diff --git a/AudioWorks/AudioWorks.sln.DotSettings b/AudioWorks/AudioWorks.sln.DotSettings
index bd40e4ab..995f2339 100644
--- a/AudioWorks/AudioWorks.sln.DotSettings
+++ b/AudioWorks/AudioWorks.sln.DotSettings
@@ -259,7 +259,7 @@
<Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" />
<Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
<Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" />
- CSharp90
+ CSharp100
No
C:\Users\jerem\AppData\Local\JetBrains\Transient\ReSharperPlatformVs15\v09_fd249c97\SolutionCaches
True
diff --git a/AudioWorks/Directory.Build.props b/AudioWorks/Directory.Build.props
index d1f419f8..a8124762 100644
--- a/AudioWorks/Directory.Build.props
+++ b/AudioWorks/Directory.Build.props
@@ -1,8 +1,8 @@
- net5.0;netstandard2.0
- 9.0
+ net6.0;netstandard2.0
+ 10.0
enable
$(BUILD_BUILDID)
0
diff --git a/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs b/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs
index 06cf35b0..cd8d73dd 100644
--- a/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs
+++ b/AudioWorks/src/AudioWorks.Api/AudioFileAnalyzer.cs
@@ -145,7 +145,7 @@ public async Task AnalyzeAsync(
params ITaggedAudioFile[] audioFiles)
{
if (audioFiles == null) throw new ArgumentNullException(nameof(audioFiles));
- // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
+ // ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (audioFiles.Any(audioFile => audioFile == null))
throw new ArgumentException("One or more audio files are null.", nameof(audioFiles));
diff --git a/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs b/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs
index 9a7f2db7..7dc9289d 100644
--- a/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs
+++ b/AudioWorks/src/AudioWorks.Api/AudioFileEncoder.cs
@@ -172,7 +172,7 @@ public async Task> EncodeAsync(
params ITaggedAudioFile[] audioFiles)
{
if (audioFiles == null) throw new ArgumentNullException(nameof(audioFiles));
- // ReSharper disable once ParameterOnlyUsedForPreconditionCheck.Local
+ // ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (audioFiles.Any(audioFile => audioFile == null))
throw new ArgumentException("One or more audio files are null.", nameof(audioFiles));
diff --git a/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj b/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj
index cf07a244..9b71d323 100644
--- a/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj
+++ b/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj
@@ -2,7 +2,7 @@
- 1.1.0
+ 1.2.0
$(VersionPrefix).$(Revision)
1.0.0.0
The primary AudioWorks API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
@@ -28,9 +28,11 @@
-
-
-
+
+
+
+
+
diff --git a/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs b/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs
index ea9f0da0..c573bf99 100644
--- a/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs
+++ b/AudioWorks/src/AudioWorks.Api/ExtensionInstaller.cs
@@ -230,9 +230,7 @@ await ResolvePackagesAsync(packageMetadata.Identity, cacheContext, cancellationT
if (downloadResult.Status != DownloadResourceResultStatus.Available ||
downloadResult.PackageReader == null ||
-#pragma warning disable IDE0083 // Use pattern matching
- !(downloadResult.PackageStream is FileStream packageStream))
-#pragma warning restore IDE0083 // Use pattern matching
+ downloadResult.PackageStream is not FileStream packageStream)
continue;
var libGroups = (await downloadResult.PackageReader.GetLibItemsAsync(cancellationToken)
@@ -269,7 +267,7 @@ await ResolvePackagesAsync(packageMetadata.Identity, cacheContext, cancellationT
CopyContentFiles(
sourceFileName,
- Path.Combine(extensionDir.FullName, new DirectoryInfo(sourceFileName)!.Parent!.Name,
+ Path.Combine(extensionDir.FullName, new DirectoryInfo(sourceFileName).Parent!.Name,
Path.GetFileName(item)),
logger);
}
diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj
index 51e160df..abf9d57b 100644
--- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj
+++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj
@@ -2,9 +2,9 @@
- net5.0;netcoreapp3.1;net462
- net5.0;netcoreapp3.1
- 1.1.0
+ net6.0;netcoreapp3.1;net462
+ net6.0;netcoreapp3.1
+ 1.2.0
$(VersionPrefix).$(Revision)
true
@@ -25,31 +25,31 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
+
diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml
index e2ed8501..80f18e2e 100644
--- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml
+++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.format.ps1xml
@@ -219,118 +219,216 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1
index 15a5099b..baeb4b3a 100644
Binary files a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 and b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1 differ
diff --git a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1 b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1
index 8a44c992..853d7991 100644
--- a/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1
+++ b/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1
@@ -13,11 +13,11 @@ $binaryModuleRoot = $PSModuleRoot
if ($PSEdition -eq 'Desktop') {
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net462'
}
-elseif ($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -eq 0) {
+elseif ($PSVersionTable.PSVersion.Major -eq 7 -and $PSVersionTable.PSVersion.Minor -lt 2) {
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'netcoreapp3.1'
}
else {
- $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net5.0'
+ $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net6.0'
}
$binaryModulePath = Join-Path -Path $binaryModuleRoot -ChildPath 'AudioWorks.Commands.dll'
@@ -29,118 +29,216 @@ $PSModule.OnRemove = {
}
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDHoCv8GE7lo4eS
-# DN3gKLBGHzkIx4SO7H0gInQWjEmgMaCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCOeM2fXrlMS9BQnjXWmNMkLcym
-# dxhG+5ow64IJe/eqZTANBgkqhkiG9w0BAQEFAASCAQBIH1qyTBl47GAnNw9me3+O
-# +fNZ0C9jKck5IO7RULob5q0erkYAQKh09dqXc2SlrTpdFoMLyHVBC8aRkfmsk7VR
-# h7DwfCoq0damxwl+owCY5mJ57228kMuNubmUopOyjqnAHVfmKRNqSaw5B+rZon+w
-# d8j06AXFDYeFuxn+t1H/XidXHLuhri7y2qk5bRRCg+bmcBBTct3uRF6z7jISu3ob
-# vi7osxzBHbywzM+xRF5yIpKWSrQ2s9NOF/OuxzgouIUfwr9wUzkxjA9L4afkc+py
-# WDZ09CaDY1z9oB6q09DeAhA7tB3TZj2JTv3aFmX/YEe6veeUpQ7mnxO8IxtedVmF
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjE1NTQxM1owLwYJKoZIhvcNAQkEMSIEIPZoSlSCytPklc27X5Iq
-# 0UZNE7+vJlrZ5qIUIhO74Ug/MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAI/cVb2ykaymtVDPAO5Pst+JZvf7zGFIhFHInjmlXg8L/Zqbn
-# YaGyvw6oP36U7gLBru9M9o5YbWg9ZADtuUWl0J0TLDEDz9dSeTbO1NTm8uLd04eL
-# yCsaUa79/cM7ueBY6/pzAsO3idv8qnlD+AGBshlzSM3Vf8pguS0ZWjJqXkLP3BtG
-# SU9CMtyZdRoy52QhyXKkVjpl8kMW9Y9W8FJFmJ9T/wmkeDBZ6ELuce6Ha/6a3fcy
-# TaVPQGeu01hLrmIIx6yFQ3JglZ8XMnaBV46l4Ev/BzFuYeEGOSZ/iprF/Z+nV2At
-# qvSPDl+8xCKf96kHxovY71n34DPX4h1BdxghjQ==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU+EfGE6wUFZ5X0XUziGsFr6bU
+# dlaggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRdSsNMJlQ2
+# 3SW+xNfbASDoEeZMHzANBgkqhkiG9w0BAQEFAASCAYATV97Bc8YgcKIBUcmD1jC7
+# n6o49zeVSB184xV4XWLLz65L/HDlirguYj8FJAVllUIK/A0QV/jtCJoYKviq1JdP
+# BUGjpYATVdjOMaaymyo4VKJM1mkcSt3Nd609Cvs70hX9l/h3OH0SsmAM34KU4eVS
+# WduC+RzWv/iWkvgqsC5uoURFCRGo5jgJtTY6YwmxJvg1iy4mCmnJzTTQNCGUFJuR
+# HwU3AnP14SbagUxbu5CZd2MLXlAjdUAAMZw5zrGyp5GcmjdkL9VWaAexxH3v/Mtw
+# apGGV+aupUW+Ikx/9u5Iiu7FgszlPv8z7McjlKSeJpyiGZUisL4+9y+Wa+wZzC72
+# Zi7PQ+qQUSV3UzQcgROpkYau3wpJnjwstHurzzYSL9OwLWMMyP5UWJNelsZyuNhZ
+# jgxNr/FVb68VeOqrmRyXYIzb9e2H/1oMXeC9o4QeGRUnw+trwNWnAL5mitsPAm9O
+# /ykDVLCW+wzmc+NpMcgipdeFFmk4FtIFTV67+wM3JxahggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjE0NlowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMEZu5J0RPNlmpneh8nEM
+# o3lW6SmpAp/S04RQpClr2+hd7WcGA5GmGVqz3IA+SpPKuTCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAHIhtvarEcw40pyG6YiYw4es76N14n5tk
+# grgcYDb8PkFnXjhz/457/4vL/voHNcVPoNpJ53oOlEd6rqFun3LwS+2ppcuyvQRC
+# Gud32HV+ielm8Br4Hzd/6iULb3Q+E4YNrsC3uZgTIRFhVi8JgLNZBZtWM+WInwbk
+# Fvq78IKVyjEoSUdv+zz0c5s4AZaRp8QSRgzsB7C/nULvf3CwhBFR1reuPSTRcGbw
+# dxvlDrrU3w+I4LvNQiS8ofLILeEEOMMSlDdNgob6Lg2mOIq/m1DeDdXMYylzAJsO
+# qK+agPmoxGO1jRAZWRQyRLqlK2/L2HOv0D0m928bRtkxwgAxn6SC4j0gj/i+BLq7
+# tjDuzOoUbRiMNOuS7NTz/zy9CPS+clXXhbNk1UpGrnr6ICmu6eGQUw4VZ8G1Ne5F
+# hsYhmA14l9PgQaJQ8AShIue2Y13zzPcAPA2dwK14Sh2D1FTlzBG6S9ruLlfKodQV
+# yY2Qf+AVKXUIjVqcmTr9NHxvyjaIVo+PG2G92uINSDcWrDBl9xEU8DDYSWhN6+sf
+# sLjPk5OUDyv/OugYBeJaiVPCnGyN+O1G+NCCa7woHhwyOBFOczGJ9uhF2XWjHdfP
+# fCwDoJc9HEc1declfIh+KgmtKh/Bw406w3cUJKdiI6UKZN6WL+HOK7mIAFUOVh82
+# DXEx0gXe51M=
# SIG # End signature block
diff --git a/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1 b/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1
index a4b632b3..ca641aaf 100644
--- a/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1
+++ b/AudioWorks/src/AudioWorks.Commands/PublishModule.ps1
@@ -38,7 +38,7 @@ Remove-Item -Path $(Join-Path -Path $outputDir -ChildPath *) -Recurse -Include "
Write-Host "Generating help file..."
# Only do this once, as platyPS can't be loaded if it is already in use.
-if ($Framework -eq "net5.0")
+if ($Framework -eq "net6.0")
{
Install-PackageProvider -Name NuGet -Scope CurrentUser -Force -ErrorAction SilentlyContinue
Install-Module -Name platyPS -Scope CurrentUser -Force -ErrorAction SilentlyContinue
@@ -46,118 +46,216 @@ if ($Framework -eq "net5.0")
New-ExternalHelp -Path $(Join-Path -Path $ProjectDir -ChildPath docs) -OutputPath $(Join-Path -Path $outputRoot -ChildPath en-US) -Force -ErrorAction Stop
}
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCR1kZs9w7mLOT5
-# h2EqbzS2/fEOX+BasK3FO36KM+WdnqCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBVTDcWcY8RqHgPHSCZBwFF7ggZ
-# uyAF+pcRZeR17Y28fjANBgkqhkiG9w0BAQEFAASCAQAwbKh4c59xWNapMYn86pbI
-# vfplUcMVg/Ob+a/jt3sgkBrdd19Smo9pwxS+MfzcvjtVZVvr+mtq1+8CSaH+kanU
-# 5XF9MkLjCJhtinxf/EcS2QznJVc3kXhmTfAiMVfQgRToOV9BZvhpoirATFkK6uBc
-# dz3fvcH2dQSDcYqRfMGtu6s237OrYIhgYW0gZkoF5wIO0ZVfLrJRrUn4LIwfLVyM
-# CvBs2Q6agtKzL0jvIITkER+9ERdySDtkmYMxKX+k5Gyd7aWvI4loEKo03XeHbGRI
-# 17EL6MUE4ak8quM3XX+5JlTBE+Roi9KXvYXntVwodM8hDmef2XxRw5PaFZHbBFhf
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjIzNDMzMFowLwYJKoZIhvcNAQkEMSIEIISVgMW1N5GubXBThsuZ
-# rEmeeld4oYC41T4zKGa6VD3yMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAEHtvcN39Rme2LwTJJEq+JAtpfebVsFPsLJxYhsJkQ1lXn58k
-# THtNE1rjMIvtUKEIj8wM6JVEad9qu6SteFBJBKbSzSdc6KxxL0WMdOTRUWNp+cTC
-# p5KjpWnaFpVlroYjY6kmyuqHFLPtTFl2yzV4UweSizrwf93msNM4px0dupFKaMKP
-# GfYHYW6kkfUfqLG7lxyg9vgDbRck36BktTWjPWGGv8sSycwvTTH9oulIaXBfcpbQ
-# YDPhR7KKByud3GHHiMAoN5CjMMzTMFPA+bAC0ivA4VooAehqKL1EggOdgvfNTIrR
-# dvdqKnlsAloIk9kiTIoKS6vvm0EE9oGQ2MgDWg==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUpqh8tCQFnmErTXd2kU4wezsH
+# 4dyggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQ6Fpclw6AF
+# 4V9a0RhW7KOx3zncLDANBgkqhkiG9w0BAQEFAASCAYBRA+0311Mv/8tmo09gZnmy
+# jsH/C+6OM8/fZFs+fhKpJelBWg8mkVvXilXxUljd38SsOwIeOD2YTrHKwwZQT5t5
+# mwaLs7NWevxEg9KWNDqkGSBwmLIr5Gi0PliDd3onpcYiQJmgMwPasMYjbtKeb+Je
+# P3yVM3XfKjZG1/JjwWV1uhYfTHcENUt/ccUq02XBqd4rBpNg7AamNBTrnbZLH8Vr
+# BSy6MpLZGF/fMkHZrdEXhvCEBM4s0NMBwZFY8QOVBo9wRIaR7EvEs/JUXdnMvYpm
+# hWhPTXArJSoXjPeRyEOXjVaiqNhqWyLq+8cLJwMiRzaIaowJohawzEOv4Tr+09yY
+# GduTA9BQ2sFt7tP+pgLeVduDWRj7ypRSWnoxZVk0iIS7ix4R+Fd0/SN06Fkzrckr
+# mIXYa2UvZWBMZHF5NQkH/sKZ4VoJ4po/g9kMKFSOLEOszZspq9pJBcv+1QOMvpKS
+# NTonKpQnuXODD9jeuoYUiN16hQ6qMO3vYUoHhg7RYPihggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjMzMVowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMCCIBOFT12QmFWZjcIDU
+# gjLBK8jtP4m4YQJm8266XdlmPqJPTbWHJTpHLIApJsKyYjCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAea7L7kRDJl3RbJDoZeRq8jh6FvFzCkvk
+# V4Cc5TEit3vUrMzpUENST8URqEy+X6beRA3V+K2piPzjYDaKEBV0ka781nItW1We
+# 2lBtXxXrQXlq2efEmH3PFE2Q6xuPKZ3nA76A65N6D1AQp+DBQbpZ+aee1eAn3PdA
+# FmLB5iaROasALbeYtgKZrrB1iuWCPCuntnLFRUP0m2mMBIWo6FBBKtQ7zYl8YdfU
+# wltQG8tmS4hrd10kTBaRffCU/b7MZAgA/W9qqPPTwJIurPo2MQmN8Zw9mqcUrFGa
+# ow84mgOOjsOxf9uoHD0zh3Y3wVUcf56ah4xK+7Es1lqC2MDOK6tBfLJxInzYmbF8
+# /tt3dVAs6JJkHpUsUe9E71ayVBQfMKHWBcvXpurpUOqKYxR5hZyZXET8vXBjRSmY
+# 2JETOZrEYVD7u2xeEHhESB0U8fjs6Qob39qhpAGLm4SV/4fUdqC5wwx6u5x6056Q
+# sd29AweBSuABpbKoo9jXgdmPfH/Y2E4rWg2EZSaf8TPd1so76ZzZIcA/7MLYf3pS
+# 7vt9qISp+w7wjwi74svtjkQqjRLSjFcIxe9S/5+SBFPzeooYhWhBA3QBoc89sOXc
+# drdI9s/hoLOozdm1vESuXzD+vzf8nXMucuF/o9GNUlEDA8n5GpPprnesif7X48x9
+# BlkJ8nvZhpM=
# SIG # End signature block
diff --git a/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md b/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md
index 02be557c..88726023 100644
--- a/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md
+++ b/AudioWorks/src/AudioWorks.Commands/docs/Export-AudioFile.md
@@ -13,8 +13,8 @@ Exports an audio file.
## SYNTAX
```
-Export-AudioFile [-Encoder] [-Path] [-AudioFile] [-Name ]
- [-Force] [-MaxDegreeOfParallelism ] []
+Export-AudioFile [-Encoder] [-Path] [-AudioFile] [-Name ] [-Force]
+ [-MaxDegreeOfParallelism ] []
```
## DESCRIPTION
diff --git a/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs b/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs
index 6d3bc9f5..6cf461ec 100644
--- a/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs
+++ b/AudioWorks/src/AudioWorks.Common/AudioMetadata.cs
@@ -138,7 +138,7 @@ public string Day
_day = string.Empty;
else
{
- if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 31)
+ if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 31)
throw new AudioMetadataInvalidException("Day must be between 1 and 31.");
_day = intValue.ToString("00", CultureInfo.InvariantCulture);
}
@@ -163,7 +163,7 @@ public string Month
_month = string.Empty;
else
{
- if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 12)
+ if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 12)
throw new AudioMetadataInvalidException("Month must be between 1 and 12.");
_month = intValue.ToString("00", CultureInfo.InvariantCulture);
}
@@ -213,7 +213,7 @@ public string TrackNumber
_trackNumber = string.Empty;
else
{
- if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 99)
+ if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 99)
throw new AudioMetadataInvalidException("TrackNumber must be between 1 and 99.");
_trackNumber = intValue.ToString("00", CultureInfo.InvariantCulture);
}
@@ -238,7 +238,7 @@ public string TrackCount
_trackCount = string.Empty;
else
{
- if (!int.TryParse(value, out var intValue) || intValue < 1 || intValue > 99)
+ if (!int.TryParse(value, out var intValue) || intValue is < 1 or > 99)
throw new AudioMetadataInvalidException("TrackCount must be between 1 and 99.");
_trackCount = intValue.ToString("00", CultureInfo.InvariantCulture);
}
diff --git a/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj b/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj
index f2368775..aa5f7951 100644
--- a/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj
+++ b/AudioWorks/src/AudioWorks.Common/AudioWorks.Common.csproj
@@ -2,7 +2,7 @@
- 1.1.0
+ 1.2.0
$(VersionPrefix).$(Revision)
1.0.0.0
Public types used by the AudioWorks API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
@@ -25,16 +25,18 @@
+
+
-
+
-
+
-
+
diff --git a/AudioWorks/src/AudioWorks.Common/CoverArt.cs b/AudioWorks/src/AudioWorks.Common/CoverArt.cs
index c26879a1..70e7d499 100644
--- a/AudioWorks/src/AudioWorks.Common/CoverArt.cs
+++ b/AudioWorks/src/AudioWorks.Common/CoverArt.cs
@@ -47,7 +47,7 @@ public sealed class CoverArt : ICoverArt
public string FileExtension { get; }
///
- public ReadOnlySpan Data => _data.AsSpan().Slice(0, _dataSize);
+ public ReadOnlySpan Data => _data.AsSpan()[.._dataSize];
internal CoverArt(Stream stream)
{
diff --git a/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj b/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj
index 0f065003..49f05363 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj
+++ b/AudioWorks/src/AudioWorks.Extensibility/AudioWorks.Extensibility.csproj
@@ -2,7 +2,7 @@
- 1.1.0
+ 1.2.0
$(VersionPrefix).$(Revision)
1.0.0.0
The AudioWorks extension API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
@@ -18,15 +18,16 @@
-
-
+
+
-
+
+
diff --git a/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs b/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs
index 0d6a095e..610221f8 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs
+++ b/AudioWorks/src/AudioWorks.Extensibility/ExtensionAssemblyResolver.cs
@@ -68,7 +68,7 @@ void ResolveFullFramework(IEnumerable assemblyFiles) =>
var matchingAssemblyName = assemblyFiles
.FirstOrDefault(assemblyFile => AssemblyName.ReferenceMatchesDefinition(
- AssemblyName.GetAssemblyName(assemblyFile), new AssemblyName(args.Name)));
+ AssemblyName.GetAssemblyName(assemblyFile), new(args.Name)));
if (matchingAssemblyName == null)
{
_logger.LogTrace("Did not locate dependency '{0}'.", args.Name);
diff --git a/AudioWorks/src/AudioWorks.Extensibility/Int24.cs b/AudioWorks/src/AudioWorks.Extensibility/Int24.cs
index b92c6b5e..95d1716b 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/Int24.cs
+++ b/AudioWorks/src/AudioWorks.Extensibility/Int24.cs
@@ -24,11 +24,11 @@ readonly struct Int24
readonly byte _byte2;
readonly byte _byte3;
- internal Int24(float value)
+ internal Int24(int value)
{
_byte1 = (byte) value;
- _byte2 = (byte) (((uint) value >> 8) & 0xFF);
- _byte3 = (byte) (((uint) value >> 16) & 0xFF);
+ _byte2 = (byte) ((value >> 8) & 0xFF);
+ _byte3 = (byte) ((value >> 16) & 0xFF);
}
public static implicit operator int(Int24 value) =>
diff --git a/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs b/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs
index e9fc1124..6acb6635 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs
+++ b/AudioWorks/src/AudioWorks.Extensibility/RuntimeChecker.cs
@@ -30,40 +30,33 @@ public static class RuntimeChecker
/// Returns the NuGet framework short folder name for the current runtime.
///
/// The NuGet short folder name.
- public static string GetShortFolderName()
- {
-#if NETSTANDARD2_0
- if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework",
- StringComparison.Ordinal))
- return $"net{GetFrameworkVersion()}";
-
- // .NET Core 2.x didn't report the version correctly. Assume they are v2.1
- var version = Version.Parse(RuntimeInformation.FrameworkDescription.Substring(RuntimeInformation.FrameworkDescription.LastIndexOf(' ')));
- return version.Major == 4 ? "netcoreapp2.1" : $"netcoreapp{version.ToString(2)}";
-#else
- var version = Version.Parse(
- RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..].Split('-')[0]);
-
- return version.Major >= 5 ? $"net{version.ToString(2)}" : $"netcoreapp{version.ToString(2)}";
-#endif
- }
#if NETSTANDARD2_0
+ public static string GetShortFolderName() =>
+ RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.Ordinal)
+ ? $"net{GetFrameworkVersion()}"
+ : $"netcoreapp{Version.Parse(RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..]).ToString(2)}";
static string GetFrameworkVersion()
{
using var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
using (var ndpKey = baseKey.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"))
- {
- var release = (int) ndpKey.GetValue("Release", 0);
-
- return release switch
+ return (int?) ndpKey?.GetValue("Release", 0) switch
{
>= 528040 => "48",
>= 461808 => "472",
>= 461308 => "471",
- _ => release >= 460798 ? "47" : "462"
+ >= 460798 => "47",
+ _ => "462"
};
- }
+ }
+#else
+ public static string GetShortFolderName()
+ {
+ var version = Version.Parse(
+ RuntimeInformation.FrameworkDescription[RuntimeInformation.FrameworkDescription.LastIndexOf(' ')..]
+ .Split('-')[0]);
+
+ return version.Major >= 5 ? $"net{version.ToString(2)}" : $"netcoreapp{version.ToString(2)}";
}
#endif
}
diff --git a/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs b/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs
index 21f6a4cf..a05a0c7c 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs
+++ b/AudioWorks/src/AudioWorks.Extensibility/SampleBuffer.cs
@@ -70,7 +70,7 @@ public sealed class SampleBuffer : IDisposable
///
public SampleBuffer(ReadOnlySpan interleavedSamples, int channels)
{
- if (channels < 1 || channels > 2)
+ if (channels is < 1 or > 2)
throw new ArgumentOutOfRangeException(nameof(channels),
$"{nameof(channels)} must be 1 or 2.");
if (interleavedSamples.Length % channels != 0)
@@ -96,7 +96,7 @@ public SampleBuffer(ReadOnlySpan interleavedSamples, int channels)
///
public SampleBuffer(ReadOnlySpan monoSamples, int bitsPerSample)
{
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample),
$"{nameof(bitsPerSample)} is out of range.");
@@ -122,7 +122,7 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample
if (leftSamples.Length != rightSamples.Length)
throw new ArgumentException(
$"{nameof(rightSamples)} does not match the length of {nameof(leftSamples)}", nameof(rightSamples));
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample),
$"{nameof(bitsPerSample)} is out of range.");
@@ -130,12 +130,8 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample
Frames = leftSamples.Length;
_buffer = MemoryPool.Shared.Rent(Frames * 2);
- SampleProcessor.Convert(leftSamples, _buffer.Memory.Span.Slice(0, Frames), bitsPerSample);
-#if NETSTANDARD2_0
- SampleProcessor.Convert(rightSamples, _buffer.Memory.Span.Slice(Frames), bitsPerSample);
-#else
+ SampleProcessor.Convert(leftSamples, _buffer.Memory.Span[..Frames], bitsPerSample);
SampleProcessor.Convert(rightSamples, _buffer.Memory.Span[Frames..], bitsPerSample);
-#endif
}
///
@@ -150,10 +146,10 @@ public SampleBuffer(ReadOnlySpan leftSamples, ReadOnlySpan rightSample
/// is out of range.
public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bitsPerSample)
{
- if (channels < 1 || channels > 2)
+ if (channels is < 1 or > 2)
throw new ArgumentOutOfRangeException(nameof(channels),
$"{nameof(channels)} must be 1 or 2.");
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample),
$"{nameof(bitsPerSample)} is out of range.");
if (interleavedSamples.Length % channels != 0)
@@ -182,10 +178,10 @@ public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bits
/// is out of range.
public SampleBuffer(ReadOnlySpan interleavedSamples, int channels, int bitsPerSample)
{
- if (channels < 1 || channels > 2)
+ if (channels is < 1 or > 2)
throw new ArgumentOutOfRangeException(nameof(channels),
$"{nameof(channels)} must be 1 or 2.");
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample),
$"{nameof(bitsPerSample)} is out of range.");
var bytesPerSample = (int) Math.Ceiling(bitsPerSample / 8.0);
@@ -237,7 +233,7 @@ public void CopyTo(Span monoDestination)
if (Channels != 1)
throw new InvalidOperationException("Not a single-channel SampleBuffer.");
- _buffer.Memory.Span.Slice(0, Frames).CopyTo(monoDestination);
+ _buffer.Memory.Span[..Frames].CopyTo(monoDestination);
}
///
@@ -260,12 +256,12 @@ public void CopyTo(Span leftDestination, Span rightDestination)
if (IsInterleaved)
SampleProcessor.DeInterleave(
- _buffer.Memory.Span.Slice(0, Frames * 2),
+ _buffer.Memory.Span[..(Frames * 2)],
leftDestination,
rightDestination);
else
{
- _buffer.Memory.Span.Slice(0, Frames).CopyTo(leftDestination);
+ _buffer.Memory.Span[..Frames].CopyTo(leftDestination);
_buffer.Memory.Span.Slice(Frames, Frames).CopyTo(rightDestination);
}
}
@@ -294,13 +290,13 @@ public void CopyTo(Span leftDestination, Span rightDestination, int bi
{
Span leftBuffer = stackalloc float[Frames];
Span rightBuffer = stackalloc float[Frames];
- SampleProcessor.DeInterleave(_buffer.Memory.Span.Slice(0, Frames * 2), leftBuffer, rightBuffer);
+ SampleProcessor.DeInterleave(_buffer.Memory.Span[..(Frames * 2)], leftBuffer, rightBuffer);
SampleProcessor.Convert(leftBuffer, leftDestination, bitsPerSample);
SampleProcessor.Convert(rightBuffer, rightDestination, bitsPerSample);
}
else
{
- SampleProcessor.Convert(_buffer.Memory.Span.Slice(0, Frames), leftDestination, bitsPerSample);
+ SampleProcessor.Convert(_buffer.Memory.Span[..Frames], leftDestination, bitsPerSample);
SampleProcessor.Convert(_buffer.Memory.Span.Slice(Frames, Frames), rightDestination, bitsPerSample);
}
}
@@ -326,10 +322,10 @@ public void CopyToInterleaved(Span destination)
nameof(destination));
if (Channels == 1 || IsInterleaved)
- _buffer.Memory.Span.Slice(0, Frames * Channels).CopyTo(destination);
+ _buffer.Memory.Span[..(Frames * Channels)].CopyTo(destination);
else
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
destination);
}
@@ -355,16 +351,16 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
if (destination.Length < Frames * Channels)
throw new ArgumentException("destination is not long enough to store the samples.",
nameof(destination));
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample), "bitsPerSample is out of range.");
if (Channels == 1 || IsInterleaved)
- SampleProcessor.Convert(_buffer.Memory.Span.Slice(0, Frames * Channels), destination, bitsPerSample);
+ SampleProcessor.Convert(_buffer.Memory.Span[..(Frames * Channels)], destination, bitsPerSample);
else
{
Span interleavedBuffer = stackalloc float[Frames * 2];
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
interleavedBuffer);
SampleProcessor.Convert(interleavedBuffer, destination, bitsPerSample);
@@ -390,7 +386,7 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
if (_isDisposed) throw new ObjectDisposedException(GetType().ToString());
if (_buffer == null) return;
- if (bitsPerSample < 1 || bitsPerSample > 32)
+ if (bitsPerSample is < 1 or > 32)
throw new ArgumentOutOfRangeException(nameof(bitsPerSample), "bitsPerSample is out of range.");
var bytesPerSample = (int) Math.Ceiling(bitsPerSample / 8.0);
if (destination.Length < Frames * Channels * bytesPerSample)
@@ -403,14 +399,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
case 1:
if (Channels == 1 || IsInterleaved)
SampleProcessor.Convert(
- _buffer.Memory.Span.Slice(0, Frames * Channels),
+ _buffer.Memory.Span[..(Frames * Channels)],
destination,
bitsPerSample);
else
{
Span interleavedBuffer = stackalloc float[Frames * 2];
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
interleavedBuffer);
SampleProcessor.Convert(interleavedBuffer, destination, bitsPerSample);
@@ -420,14 +416,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
var int16Destination = MemoryMarshal.Cast(destination);
if (Channels == 1 || IsInterleaved)
SampleProcessor.Convert(
- _buffer.Memory.Span.Slice(0, Frames * Channels),
+ _buffer.Memory.Span[..(Frames * Channels)],
int16Destination,
bitsPerSample);
else
{
Span interleavedBuffer = stackalloc float[Frames * 2];
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
interleavedBuffer);
SampleProcessor.Convert(interleavedBuffer, int16Destination, bitsPerSample);
@@ -437,14 +433,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
var int24Destination = MemoryMarshal.Cast(destination);
if (Channels == 1 || IsInterleaved)
SampleProcessor.Convert(
- _buffer.Memory.Span.Slice(0, Frames * Channels),
+ _buffer.Memory.Span[..(Frames * Channels)],
int24Destination,
bitsPerSample);
else
{
Span interleavedBuffer = stackalloc float[Frames * 2];
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
interleavedBuffer);
SampleProcessor.Convert(interleavedBuffer, int24Destination, bitsPerSample);
@@ -454,14 +450,14 @@ public void CopyToInterleaved(Span destination, int bitsPerSample)
var int32Destination = MemoryMarshal.Cast(destination);
if (Channels == 1 || IsInterleaved)
SampleProcessor.Convert(
- _buffer.Memory.Span.Slice(0, Frames * Channels),
+ _buffer.Memory.Span[..(Frames * Channels)],
int32Destination,
bitsPerSample);
else
{
Span interleavedBuffer = stackalloc float[Frames * 2];
SampleProcessor.Interleave(
- _buffer.Memory.Span.Slice(0, Frames),
+ _buffer.Memory.Span[..Frames],
_buffer.Memory.Span.Slice(Frames, Frames),
interleavedBuffer);
SampleProcessor.Convert(interleavedBuffer, int32Destination, bitsPerSample);
diff --git a/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs b/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs
index 8eb7c21d..a2c61d4f 100644
--- a/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs
+++ b/AudioWorks/src/AudioWorks.Extensibility/SampleProcessor.cs
@@ -36,7 +36,7 @@ internal static void Convert(ReadOnlySpan source, Span destination,
var adjVector = new Vector(adjustment);
var maxVector = new Vector(max);
var srcVectors = MemoryMarshal.Cast>(source);
- srcVectors = srcVectors.Slice(0, srcVectors.Length - srcVectors.Length % 4);
+ srcVectors = srcVectors[..^(srcVectors.Length % 4)];
var destVectors = MemoryMarshal.Cast>(destination);
for (int srcIndex = 0, destIndex = 0; srcIndex < srcVectors.Length; destIndex++)
@@ -74,7 +74,7 @@ internal static void Convert(ReadOnlySpan source, Span destination
{
var maxVector = new Vector(max);
var srcVectors = MemoryMarshal.Cast>(source);
- srcVectors = srcVectors.Slice(0, srcVectors.Length - srcVectors.Length % 2);
+ srcVectors = srcVectors[..^(srcVectors.Length % 2)];
var destVectors = MemoryMarshal.Cast>(destination);
for (int srcIndex = 0, destIndex = 0; srcIndex < srcVectors.Length; destIndex++)
@@ -97,7 +97,7 @@ internal static void Convert(ReadOnlySpan source, Span destination
var max = multiplier - 1;
for (var sampleIndex = 0; sampleIndex < source.Length; sampleIndex++)
- destination[sampleIndex] = new(Math.Min(source[sampleIndex] * multiplier, max));
+ destination[sampleIndex] = new((int) Math.Min(source[sampleIndex] * multiplier, max));
}
internal static void Convert(ReadOnlySpan source, Span destination, int bitsPerSample)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs
index d8a0d35f..f597bd52 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AacAudioEncoder.cs
@@ -71,7 +71,7 @@ public SettingInfoDictionary SettingInfo
}
}
- public string FileExtension { get; } = ".m4a";
+ public string FileExtension => ".m4a";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs
index b4735ed2..4db0753c 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioDecoder.cs
@@ -71,7 +71,7 @@ public unsafe SampleBuffer DecodeSamples()
Finished = true;
var result = new SampleBuffer(
- buffer.Slice(0, (int) (frameCount * _outputDescription.ChannelsPerFrame)),
+ buffer[..(int) (frameCount * _outputDescription.ChannelsPerFrame)],
(int) _outputDescription.ChannelsPerFrame, 32);
return result;
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs
index 7b28bad3..753a7cd0 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AlacAudioEncoder.cs
@@ -49,7 +49,7 @@ public SettingInfoDictionary SettingInfo
}
}
- public string FileExtension { get; } = ".m4a";
+ public string FileExtension => ".m4a";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs
index 659a7d50..1af5b173 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioConverter.cs
@@ -78,7 +78,8 @@ unsafe AudioConverterStatus InputCallback(
_descriptionsHandle.Free();
var inputDescriptions = new AudioStreamPacketDescription[numberPackets];
- _audioFile.ReadPackets(out var numBytes, inputDescriptions, _packetIndex, ref numberPackets,
+ var numBytes = (uint) _buffer.Memory.Length;
+ _audioFile.ReadPackets(ref numBytes, inputDescriptions, _packetIndex, ref numberPackets,
new(_bufferHandle.Pointer));
_packetIndex += numberPackets;
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs
index fe892cf4..052a0a11 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioFile.cs
@@ -92,12 +92,12 @@ internal void GetPropertyInfo(AudioFilePropertyId id, out uint dataSize, out uin
SafeNativeMethods.AudioFileGetPropertyInfo(Handle, id, out dataSize, out isWritable);
internal void ReadPackets(
- out uint numBytes,
+ ref uint numBytes,
AudioStreamPacketDescription[] packetDescriptions,
long startingPacket,
ref uint packets,
IntPtr data) =>
- SafeNativeMethods.AudioFileReadPackets(Handle, false, out numBytes, packetDescriptions,
+ SafeNativeMethods.AudioFileReadPacketData(Handle, false, ref numBytes, packetDescriptions,
startingPacket, ref packets, data);
protected virtual void Dispose(bool disposing)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj
index 0b09a0f5..e1668712 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/AudioWorks.Extensions.Apple.csproj
@@ -2,7 +2,7 @@
- 1.8.1
+ 1.9.0
$(VersionPrefix).$(Revision)
The Apple lossless and AAC format extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/Apple-Extension#release-notes
@@ -20,7 +20,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs
index 9124a502..c9f40c4a 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/CoreAudioHandler.cs
@@ -20,12 +20,10 @@ This file is part of AudioWorks.
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Loader;
-using AudioWorks.Common;
#endif
+using AudioWorks.Common;
using AudioWorks.Extensibility;
-#if WINDOWS
using Microsoft.Extensions.Logging;
-#endif
namespace AudioWorks.Extensions.Apple
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs
index 96e187b2..c8e259a4 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Apple/SafeNativeMethods.cs
@@ -23,7 +23,7 @@ namespace AudioWorks.Extensions.Apple
static class SafeNativeMethods
{
#if OSX
- const string _coreAudioLibrary = "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio";
+ const string _coreAudioLibrary = "/System/Library/Frameworks/AudioToolbox.framework/AudioToolbox";
#else
const string _coreAudioLibrary = "CoreAudioToolbox";
#endif
@@ -90,10 +90,10 @@ internal static extern AudioFileStatus AudioFileGetPropertyInfo(
#else
[DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
#endif
- internal static extern AudioFileStatus AudioFileReadPackets(
+ internal static extern AudioFileStatus AudioFileReadPacketData(
AudioFileHandle handle,
[MarshalAs(UnmanagedType.Bool)] bool useCache,
- out uint numBytes,
+ ref uint numBytes,
[In, Out] AudioStreamPacketDescription[] packetDescriptions,
long startingPacket,
ref uint packets,
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj
index 48f4e318..db1922f0 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/AudioWorks.Extensions.Flac.csproj
@@ -2,7 +2,7 @@
- 1.12.0
+ 1.13.0
$(VersionPrefix).$(Revision)
The Free Lossless Audio Codec (FLAC) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/FLAC-Extension#release-notes
@@ -33,7 +33,7 @@
-
+
PreserveNewest
true
contentFiles\any\any\
@@ -41,7 +41,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs
index f0f3313c..160b2917 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacAudioEncoder.cs
@@ -39,7 +39,7 @@ sealed class FlacAudioEncoder : IAudioEncoder, IDisposable
["Padding"] = new IntSettingInfo(0, 16_775_369)
};
- public string FileExtension { get; } = ".flac";
+ public string FileExtension => ".flac";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs
index a519252b..4366e424 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/FlacLibHandler.cs
@@ -67,10 +67,14 @@ public bool Handle()
var osVersion = GetOSVersion();
var libPath = Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" :
- osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" :
- osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" :
- "osx.11");
+ osVersion.StartsWith("10.15", StringComparison.Ordinal)
+ ? "macos.10.15-x64" :
+ osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.11-arm64"
+ : "macos.11-x64" :
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.12-arm64"
+ : "macos.12-x64");
AddUnmanagedLibraryPath(libPath);
#endif
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs
index c80ffb06..d9b92ad3 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/MetadataStreamDecoder.cs
@@ -51,8 +51,8 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl
var commentBytes = new Span(entry.Entry.ToPointer(), (int) entry.Length);
var delimiter = commentBytes.IndexOf((byte) 0x3D); // '='
#if NETSTANDARD2_0
- var keyBytes = commentBytes.Slice(0, delimiter);
- var valueBytes = commentBytes.Slice(delimiter + 1);
+ var keyBytes = commentBytes[..delimiter];
+ var valueBytes = commentBytes[(delimiter + 1)..];
AudioMetadata.Set(
Encoding.ASCII.GetString(
(byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)),
@@ -62,7 +62,7 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl
valueBytes.Length));
#else
AudioMetadata.Set(
- Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter)),
+ Encoding.ASCII.GetString(commentBytes[..delimiter]),
Encoding.UTF8.GetString(commentBytes[(delimiter + 1)..]));
#endif
}
@@ -71,7 +71,7 @@ protected override unsafe void MetadataCallback(IntPtr handle, IntPtr metadataBl
case MetadataType.Picture:
var picture = Marshal.PtrToStructure(metadataBlock).Picture;
- if (picture.Type == PictureType.CoverFront || picture.Type == PictureType.Other)
+ if (picture.Type is PictureType.CoverFront or PictureType.Other)
AudioMetadata.CoverArt = CoverArtFactory.GetOrCreate(
new Span(picture.Data.ToPointer(), (int) picture.DataLength));
break;
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs
index eaae78fc..e2c4091f 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/VorbisCommentBlock.cs
@@ -55,8 +55,8 @@ internal unsafe void Append(string key, string value)
SafeNativeMethods.MetadataObjectVorbisCommentEntryFromNameValuePair(
out var entry,
- new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes.Slice(0, keyLength + 1)))),
- new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes.Slice(0, valueLength + 1)))));
+ new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes[..(keyLength + 1)]))),
+ new(Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes[..(valueLength + 1)]))));
// The comment takes ownership of the new entry if 'copy' is false
SafeNativeMethods.MetadataObjectVorbisCommentAppendComment(Handle, entry, false);
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libFLAC.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libFLAC.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libFLAC.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.15-x64/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.10.15-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib
new file mode 100644
index 00000000..b0f76c91
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libFLAC.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib
new file mode 100644
index 00000000..0fa164f4
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libFLAC.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libFLAC.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libFLAC.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.11/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.11-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib
new file mode 100644
index 00000000..e9645b28
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libFLAC.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib
new file mode 100644
index 00000000..33e0f0fc
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib
new file mode 100644
index 00000000..11e581df
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libFLAC.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib
new file mode 100644
index 00000000..c9009e42
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/macos.12-x64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib
deleted file mode 100644
index a5eb0eba..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libFLAC.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib
deleted file mode 100644
index a6af48df..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.13-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib
deleted file mode 100644
index 9fca4712..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libFLAC.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib
deleted file mode 100644
index 81136f36..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Flac/osx.10.14-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj
index aac6265e..59acee0f 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/AudioWorks.Extensions.Id3.csproj
@@ -2,7 +2,7 @@
- 1.6.1
+ 1.7.0
$(VersionPrefix).$(Revision)
The ID3 extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/ID3-Extension#release-notes
@@ -12,10 +12,15 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs
index f3569770..9f7cbab9 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFactory.cs
@@ -42,7 +42,7 @@ internal static FrameBase Build(string frameId)
return newFrame;
//Get the T*** frame
- if (_frameTypes.TryGetValue(frameId.Substring(0, 1), out type) && Activator.CreateInstance(type, frameId) is FrameBase txxxFrame)
+ if (_frameTypes.TryGetValue(frameId[..1], out type) && Activator.CreateInstance(type, frameId) is FrameBase txxxFrame)
return txxxFrame;
throw new ArgumentException($"'{frameId}' is not a supported frame ID.", nameof(frameId));
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs
index 48d347e9..79f7eb28 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameFullText.cs
@@ -52,7 +52,7 @@ internal override void Parse(Span frame)
#if NETSTANDARD2_0
Language = Encoding.ASCII.GetString(
- (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame.Slice(index))), 3);
+ (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame[index..])), 3);
#else
Language = Encoding.ASCII.GetString(frame.Slice(index, 3));
#endif
@@ -62,11 +62,7 @@ internal override void Parse(Span frame)
return;
Description = TextBuilder.ReadText(frame, ref index, TextType);
-#if NETSTANDARD2_0
- Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType);
-#else
Text = TextBuilder.ReadTextEnd(frame[index..], TextType);
-#endif
}
internal override void Write(Stream output)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs
index e10ca41b..8190e2df 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FramePicture.cs
@@ -45,11 +45,7 @@ internal override void Parse(Span frame)
Description = TextBuilder.ReadText(frame, ref index, TextType);
PictureData = new byte[frame.Length - index];
-#if NETSTANDARD2_0
- frame.Slice(index, frame.Length - index).CopyTo(PictureData);
-#else
frame[index..].CopyTo(PictureData);
-#endif
}
internal override void Write(Stream output)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs
index 84cbff76..b308921f 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameText.cs
@@ -35,11 +35,7 @@ internal override void Parse(Span frame)
{
var index = 0;
TextType = (TextType) frame[index++];
-#if NETSTANDARD2_0
- Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType);
-#else
Text = TextBuilder.ReadTextEnd(frame[index..], TextType);
-#endif
}
internal override void Write(Stream output)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs
index 13a9ac99..2c5cfaec 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/FrameTextUserDef.cs
@@ -35,12 +35,8 @@ internal override void Parse(Span frame)
TextType = (TextType) frame[index++];
Description = TextBuilder.ReadText(frame, ref index, TextType);
-#if NETSTANDARD2_0
- Text = TextBuilder.ReadTextEnd(frame.Slice(index), TextType);
-#else
Text = TextBuilder.ReadTextEnd(frame[index..], TextType);
-#endif
- }
+ }
internal override void Write(Stream output)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs
index 7a7dfd9b..abdcf6b2 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/ID3v1.cs
@@ -96,15 +96,15 @@ internal void Deserialize(Stream stream)
buffer = stackalloc char[30];
reader.Read(buffer);
- Title = new(buffer.Slice(0, buffer.IndexOf('\0')));
+ Title = new(buffer[..buffer.IndexOf('\0')]);
reader.Read(buffer);
- Artist = new(buffer.Slice(0, buffer.IndexOf('\0')));
+ Artist = new(buffer[..buffer.IndexOf('\0')]);
reader.Read(buffer);
- Album = new(buffer.Slice(0, buffer.IndexOf('\0')));
- reader.Read(buffer.Slice(0, 4));
- Year = new(buffer.Slice(0, Math.Min(4, buffer.IndexOf('\0'))));
+ Album = new(buffer[..buffer.IndexOf('\0')]);
+ reader.Read(buffer[..4]);
+ Year = new(buffer[..Math.Min(4, buffer.IndexOf('\0'))]);
reader.Read(buffer);
- Comment = new(buffer.Slice(0, buffer.IndexOf('\0')));
+ Comment = new(buffer[..buffer.IndexOf('\0')]);
if (buffer[28] == 0)
TrackNumber = buffer[29];
#endif
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs
index a190c94c..87ee8397 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/Id3AudioMetadataEncoder.cs
@@ -53,7 +53,7 @@ public void WriteMetadata(Stream stream, AudioMetadata metadata, SettingDictiona
logger.LogWarning("ID3 version 2.3 tags don't support UTF-8. Using version 2.4.");
}
- if (versionValue!.Equals("2.4", StringComparison.Ordinal))
+ if (versionValue.Equals("2.4", StringComparison.Ordinal))
version = 4;
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs
index d3e9866c..22c64e93 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagManager.cs
@@ -75,7 +75,7 @@ internal static TagModel Deserialize(Stream stream)
#if NETSTANDARD2_0
stream.Read(frameIdBuffer, 0, 1);
#else
- stream.Read(frameIdBuffer.Slice(0, 1));
+ stream.Read(frameIdBuffer[..1]);
#endif
// We reached the padding
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs
index 023667ba..084c5668 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TagModelToMetadataAdapter.cs
@@ -93,12 +93,8 @@ internal TagModelToMetadataAdapter(TagModel tagModel)
// The TDAT frame contains the day and the month
case "TDAT":
- Day = frameText.Text.Substring(0, 2);
-#if NETSTANDARD2_0
- Month = frameText.Text.Substring(2);
-#else
+ Day = frameText.Text[..2];
Month = frameText.Text[2..];
-#endif
break;
case "TYER":
@@ -113,7 +109,7 @@ internal TagModelToMetadataAdapter(TagModel tagModel)
{
Month = splitRecordingTime[1];
if (splitRecordingTime.Length > 2)
- Day = splitRecordingTime[2].Substring(0, 2);
+ Day = splitRecordingTime[2][..2];
}
break;
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs
index 8b8c29e1..0f5e299d 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Id3/TextBuilder.cs
@@ -83,11 +83,7 @@ static string ReadTextNoPreamble(Span frame, ref int index, TextType textT
#endif
{
var text = string.Empty;
-#if NETSTANDARD2_0
- var count = frame.Slice(index).IndexOf((byte) 0);
-#else
var count = frame[index..].IndexOf((byte) 0);
-#endif
switch (count)
{
case -1:
@@ -95,7 +91,7 @@ static string ReadTextNoPreamble(Span frame, ref int index, TextType textT
case > 0:
#if NETSTANDARD2_0
text = _encodings[textType].GetString(
- (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame.Slice(index))), count);
+ (byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(frame[index..])), count);
#else
text = _encodings[textType].GetString(frame.Slice(index, count));
#endif
@@ -139,20 +135,12 @@ static string ReadTextEndNoPreamble(Span frame, TextType textType) =>
static string ReadUtf16End(Span frame)
{
if (frame[0] == 0xFE && frame[1] == 0xFF)
-#if NETSTANDARD2_0
- return ReadTextEndNoPreamble(frame.Slice(2), TextType.Utf16BigEndian);
-#else
return ReadTextEndNoPreamble(frame[2..], TextType.Utf16BigEndian);
-#endif
if (frame[0] == 0xFF && frame[1] == 0xFE)
-#if NETSTANDARD2_0
- return ReadTextEndNoPreamble(frame.Slice(2), TextType.Utf16);
-#else
return ReadTextEndNoPreamble(frame[2..], TextType.Utf16);
-#endif
- throw new AudioInvalidException("Invalid UTF16 string.");
+ throw new AudioInvalidException("Invalid UTF16 string.");
}
}
}
\ No newline at end of file
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj
index 27be1529..a4e31074 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/AudioWorks.Extensions.Lame.csproj
@@ -2,7 +2,7 @@
- 1.8.2
+ 1.9.0
$(VersionPrefix).$(Revision)
The Lame MP3 encoding extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/Lame-Extension#release-notes
@@ -33,7 +33,7 @@
-
+
PreserveNewest
true
contentFiles\any\any\
@@ -41,7 +41,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs
index b5393a3c..c74acc31 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/Encoder.cs
@@ -93,7 +93,7 @@ ref MemoryMarshal.GetReference(buffer),
if (bytesEncoded < 0)
throw new AudioEncodingException($"Lame encountered error '{bytesEncoded}' while encoding.");
- _stream.Write(buffer.Slice(0, bytesEncoded));
+ _stream.Write(buffer[..bytesEncoded]);
#endif
}
@@ -132,7 +132,7 @@ ref MemoryMarshal.GetReference(buffer),
if (bytesEncoded < 0)
throw new AudioEncodingException($"Lame encountered error '{bytesEncoded}' while encoding.");
- _stream.Write(buffer.Slice(0, bytesEncoded));
+ _stream.Write(buffer[..bytesEncoded]);
#endif
}
@@ -155,7 +155,7 @@ internal void Flush()
_handle,
ref MemoryMarshal.GetReference(buffer),
buffer.Length);
- _stream.Write(buffer.Slice(0, bytesFlushed));
+ _stream.Write(buffer[..bytesFlushed]);
#endif
}
@@ -179,10 +179,10 @@ internal void UpdateLameTag()
byte empty = 0;
var bufferSize = SafeNativeMethods.GetLameTagFrame(_handle, ref empty, UIntPtr.Zero);
Span buffer = stackalloc byte[(int) bufferSize.ToUInt32()];
- _stream.Write(buffer.Slice(0, (int) SafeNativeMethods.GetLameTagFrame(
+ _stream.Write(buffer[..(int) SafeNativeMethods.GetLameTagFrame(
_handle,
ref MemoryMarshal.GetReference(buffer),
- bufferSize).ToUInt32()));
+ bufferSize).ToUInt32()]);
#endif
_stream.Position = endOfData;
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs
index 3fa4bf2d..628ea9bc 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameAudioEncoder.cs
@@ -64,7 +64,7 @@ public SettingInfoDictionary SettingInfo
}
}
- public string FileExtension { get; } = ".mp3";
+ public string FileExtension => ".mp3";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs
index 6d0ebc2b..72a0e985 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/LameLibHandler.cs
@@ -57,10 +57,14 @@ public bool Handle()
var osVersion = GetOSVersion();
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" :
- osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" :
- osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" :
- "osx.11"));
+ osVersion.StartsWith("10.15", StringComparison.Ordinal)
+ ? "macos.10.15-x64" :
+ osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.11-arm64"
+ : "macos.11-x64" :
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.12-arm64"
+ : "macos.12-x64"));
#endif
try
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.15-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.10.15-x64/libmp3lame.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.15-x64/libmp3lame.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.10.15-x64/libmp3lame.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib
new file mode 100644
index 00000000..bf4a9b9d
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-arm64/libmp3lame.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.11/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-x64/libmp3lame.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.11/libmp3lame.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.11-x64/libmp3lame.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib
new file mode 100644
index 00000000..acc6944f
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-arm64/libmp3lame.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib
new file mode 100644
index 00000000..73e89492
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/macos.12-x64/libmp3lame.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib
deleted file mode 100644
index 4930df36..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.13-x64/libmp3lame.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib
deleted file mode 100644
index 69efba85..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Lame/osx.10.14-x64/libmp3lame.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj
index dbfe9602..ab77ba89 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp3/AudioWorks.Extensions.Mp3.csproj
@@ -2,7 +2,7 @@
- 1.6.0
+ 1.7.0
$(VersionPrefix).$(Revision)
The MPEG Audio Layer 3 (MP3) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/MP3-Extension#release-notes
@@ -12,7 +12,7 @@
-
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs
index 1e06fadf..888d8f96 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AlacAtom.cs
@@ -30,11 +30,7 @@ internal AlacAtom(ReadOnlySpan data)
{
BitsPerSample = data[53];
Channels = data[57];
-#if NETSTANDARD2_0
- SampleRate = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(68));
-#else
SampleRate = BinaryPrimitives.ReadUInt32BigEndian(data[68..]);
-#endif
}
}
}
\ No newline at end of file
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj
index 3f12aa8b..6f1b5fa7 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/AudioWorks.Extensions.Mp4.csproj
@@ -2,7 +2,7 @@
- 1.6.0
+ 1.7.0
$(VersionPrefix).$(Revision)
The MPEG-4 Audio extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/MP4-Extension#release-notes
@@ -12,10 +12,15 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs
index bb3c51d7..11de8ba1 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/SttsAtom.cs
@@ -26,14 +26,8 @@ sealed class SttsAtom
internal SttsAtom(ReadOnlySpan data)
{
-#if NETSTANDARD2_0
- PacketCount = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(16));
- PacketSize = BinaryPrimitives.ReadUInt32BigEndian(data.Slice(20));
-#else
PacketCount = BinaryPrimitives.ReadUInt32BigEndian(data[16..]);
PacketSize = BinaryPrimitives.ReadUInt32BigEndian(data[20..]);
-#endif
-
}
}
}
\ No newline at end of file
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs
index d3f5f277..8e7414e9 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Mp4/TextAtom.cs
@@ -28,18 +28,18 @@ sealed class TextAtom : WritableAtom
internal TextAtom(ReadOnlySpan data)
{
#if NETSTANDARD2_0
- _fourCc = new string(CodePagesEncodingProvider.Instance.GetEncoding(1252)
- .GetChars(data.Slice(0, 4).ToArray()));
- Value = new string(Encoding.UTF8.GetChars(data.Slice(24).ToArray()));
+ _fourCc = new(CodePagesEncodingProvider.Instance.GetEncoding(1252)
+ .GetChars(data[..4].ToArray()));
+ Value = new(Encoding.UTF8.GetChars(data[24..].ToArray()));
#else
Span fourCcBuffer = stackalloc char[4];
(CodePagesEncodingProvider.Instance.GetEncoding(1252) ?? Encoding.ASCII)
- .GetChars(data.Slice(0, 4), fourCcBuffer);
+ .GetChars(data[..4], fourCcBuffer);
_fourCc = new(fourCcBuffer);
Span charBuffer = stackalloc char[Encoding.UTF8.GetMaxCharCount(data.Length - 24)];
var charCount = Encoding.UTF8.GetChars(data[24..], charBuffer);
- Value = new(charBuffer.Slice(0, charCount));
+ Value = new(charBuffer[..charCount]);
#endif
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj
index 4490d4ed..a7fb5628 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/AudioWorks.Extensions.Opus.csproj
@@ -2,7 +2,7 @@
- 1.13.2
+ 1.14.0
$(VersionPrefix).$(Revision)
The Opus extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/Opus-Extension#release-notes
@@ -41,7 +41,7 @@
-
+
PreserveNewest
true
contentFiles\any\any\
@@ -49,7 +49,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs
index b05ffb2d..c14e4271 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CommentHeaderToMetadataAdapter.cs
@@ -44,37 +44,37 @@ internal unsafe CommentHeaderToMetadataAdapter(in OggPacket packet)
throw new AudioMetadataInvalidException("Invalid Opus comment header.");
var headerPosition = 8;
- var vendorLength = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(8));
+ var vendorLength = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[8..]);
headerPosition += 4 + vendorLength;
- var commentCount = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(headerPosition));
+ var commentCount = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[headerPosition..]);
headerPosition += 4;
while (commentCount > 0)
{
- var length = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(headerPosition));
+ var length = (int) BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[headerPosition..]);
headerPosition += 4;
var commentBytes = headerBytes.Slice(headerPosition, length);
headerPosition += length;
var delimiter = commentBytes.IndexOf((byte) 0x3D); // '='
- var keyBytes = commentBytes.Slice(0, delimiter);
+ var keyBytes = commentBytes[..delimiter];
var key = Encoding.ASCII.GetString(
(byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)),
keyBytes.Length);
if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase))
- CoverArt = CoverArtAdapter.FromBase64(commentBytes.Slice(delimiter + 1));
+ CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]);
else
{
- var valueBytes = commentBytes.Slice(delimiter + 1);
+ var valueBytes = commentBytes[(delimiter + 1)..];
SetText(key, Encoding.UTF8.GetString(
(byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes)),
valueBytes.Length));
}
#else
- if (!Encoding.ASCII.GetString(headerBytes.Slice(0, 8))
+ if (!Encoding.ASCII.GetString(headerBytes[..8])
.Equals("OpusTags", StringComparison.Ordinal))
throw new AudioMetadataInvalidException("Invalid Opus comment header.");
var headerPosition = 8;
@@ -94,7 +94,7 @@ internal unsafe CommentHeaderToMetadataAdapter(in OggPacket packet)
headerPosition += length;
var delimiter = commentBytes.IndexOf((byte) 0x3D); // '='
- var key = Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter));
+ var key = Encoding.ASCII.GetString(commentBytes[..delimiter]);
if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase))
CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]);
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs
index 7bb90970..d79abcde 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/CoverArtAdapter.cs
@@ -36,23 +36,14 @@ static class CoverArtAdapter
var offset = 4;
// Seek past the mime type and description
-#if NETSTANDARD2_0
- offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4;
- offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4;
-#else
offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4;
offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4;
-#endif
// Seek past the width, height, color depth and type
offset += 16;
return CoverArtFactory.GetOrCreate(
-#if NETSTANDARD2_0
- decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset))));
-#else
decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..])));
-#endif
}
}
}
\ No newline at end of file
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs
index 25064190..39f08b5e 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/Encoder.cs
@@ -60,39 +60,35 @@ internal Encoder(
internal void SetSerialNumber(int serialNumber)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle,
- EncoderControlRequest.SetSerialNumber, serialNumber);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetSerialNumber, serialNumber);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting the serial number.");
}
internal void SetHeaderGain(int gain)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle,
- EncoderControlRequest.SetHeaderGain, gain);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetHeaderGain, gain);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting the gain.");
}
internal void SetLsbDepth(int depth)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle,
- EncoderControlRequest.SetLsbDepth, depth);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetLsbDepth, depth);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting the LSB depth.");
}
internal void SetVbrConstraint(bool enabled)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetVbrConstraint,
- enabled ? 1 : 0);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetVbrConstraint, enabled ? 1 : 0);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting VBR constraint.");
}
internal void SetVbr(bool enabled)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetVbr, enabled ? 1 : 0);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetVbr, enabled ? 1 : 0);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting VBR.");
}
@@ -102,14 +98,14 @@ internal void SetBitRate(int bitRate)
// Cache this value for determining pre-allocation
_requestedBitRate = bitRate * 1000;
- var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetBitRate, _requestedBitRate);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetBitRate, _requestedBitRate);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting the bit rate.");
}
internal void SetSignal(SignalType signal)
{
- var error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.SetSignal, (int) signal);
+ var error = OpusEncoderControlSet(EncoderControlRequest.SetSignal, (int) signal);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' setting the complexity.");
}
@@ -166,7 +162,7 @@ void FlushHeaders()
if (_requestedBitRate == 0)
{
// If the bit rate isn't explicit, get the automatic value
- error = SafeNativeMethods.OpusEncoderControl(_handle, EncoderControlRequest.GetBitRate, out _requestedBitRate);
+ error = OpusEncoderControlGet(EncoderControlRequest.GetBitRate, out _requestedBitRate);
if (error != 0)
throw new AudioEncodingException($"Opus encountered error '{error}' getting the bit rate.");
}
@@ -182,5 +178,27 @@ void FlushHeaders()
_headersFlushed = true;
}
+
+ int OpusEncoderControlGet(EncoderControlRequest request, out int value) =>
+#if OSX
+ // HACK ope_encoder_ctl needs the variadic argument pushed to the stack on ARM64
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? SafeNativeMethods.OpusEncoderControlGetArm64(_handle, request,
+ IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, out value)
+ : SafeNativeMethods.OpusEncoderControlGet(_handle, request, out value);
+#else
+ SafeNativeMethods.OpusEncoderControlGet(_handle, request, out value);
+#endif
+
+ int OpusEncoderControlSet(EncoderControlRequest request, int argument) =>
+#if OSX
+ // HACK ope_encoder_ctl needs the variadic argument pushed to the stack on ARM64
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? SafeNativeMethods.OpusEncoderControlSetArm64(_handle, request,
+ IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, argument)
+ : SafeNativeMethods.OpusEncoderControlSet(_handle, request, argument);
+#else
+ SafeNativeMethods.OpusEncoderControlSet(_handle, request, argument);
+#endif
}
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs
index 0649bb94..16ddf133 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioEncoder.cs
@@ -40,7 +40,7 @@ sealed class OpusAudioEncoder : IAudioEncoder, IDisposable
["SerialNumber"] = new IntSettingInfo(int.MinValue, int.MaxValue)
};
- public string FileExtension { get; } = ".opus";
+ public string FileExtension => ".opus";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs
index 2bd32b25..8864b3ae 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioInfoDecoder.cs
@@ -69,9 +69,9 @@ public unsafe AudioInfo ReadAudioInfo(Stream stream)
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
@@ -113,16 +113,12 @@ static unsafe AudioInfo GetAudioInfo(int serialNumber, in OggPacket headerPacket
#if NETSTANDARD2_0
if (!Encoding.ASCII.GetString((byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(headerBytes)), 8)
#else
- if (!Encoding.ASCII.GetString(headerBytes.Slice(0, 8))
+ if (!Encoding.ASCII.GetString(headerBytes[..8])
#endif
.Equals("OpusHead", StringComparison.Ordinal))
throw new AudioUnsupportedException("Not an Opus stream.");
-#if NETSTANDARD2_0
- var sampleRate = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes.Slice(12));
-#else
var sampleRate = BinaryPrimitives.ReadUInt32LittleEndian(headerBytes[12..]);
-#endif
return AudioInfo.CreateForLossy(
"Opus",
@@ -130,12 +126,8 @@ static unsafe AudioInfo GetAudioInfo(int serialNumber, in OggPacket headerPacket
(int) sampleRate,
(long) Math.Max(
(GetFinalGranulePosition(serialNumber, stream) -
-#if NETSTANDARD2_0
- BinaryPrimitives.ReadUInt16LittleEndian(headerBytes.Slice(10))) / (double) 48000 * sampleRate,
-#else
BinaryPrimitives.ReadUInt16LittleEndian(headerBytes[10..])) / (double) 48000 * sampleRate,
-#endif
- 0.0));
+ 0.0));
}
static long GetFinalGranulePosition(int serialNumber, Stream stream)
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs
index 140d02a4..44401cd8 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataDecoder.cs
@@ -63,9 +63,9 @@ public unsafe AudioMetadata ReadMetadata(Stream stream)
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs
index bf110276..a5ddf1ba 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusAudioMetadataEncoder.cs
@@ -67,9 +67,9 @@ public unsafe void WriteMetadata(Stream stream, AudioMetadata metadata, SettingD
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs
index aa8bfbe3..b5430740 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/OpusLibHandler.cs
@@ -53,16 +53,19 @@ public bool Handle()
var osVersion = GetOSVersion();
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" :
- osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" :
- osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" :
- "osx.11"));
+ osVersion.StartsWith("10.15", StringComparison.Ordinal)
+ ? "macos.10.15-x64" :
+ osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.11-arm64"
+ : "macos.11-x64" :
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.12-arm64"
+ : "macos.12-x64"));
#else // LINUX
var release = GetRelease();
if (release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase))
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" :
release.StartsWith("Ubuntu 18.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.18.04-x64" :
"ubuntu.20.04-x64"));
#endif
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs
index 34e0493c..55d28d4b 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/SafeNativeMethods.cs
@@ -315,10 +315,24 @@ internal static extern int OpusEncoderDrain(
#else
[DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
#endif
- internal static extern int OpusEncoderControl(
+ internal static extern int OpusEncoderControlGet(
OpusEncoderHandle handle,
EncoderControlRequest request,
out int value);
+#if OSX
+
+ [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl", ExactSpelling = true)]
+#if NETSTANDARD2_0
+ [DefaultDllImportSearchPaths(DllImportSearchPath.LegacyBehavior)]
+#else
+ [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
+#endif
+ internal static extern int OpusEncoderControlGetArm64(
+ OpusEncoderHandle handle,
+ EncoderControlRequest request,
+ IntPtr register2, IntPtr register3, IntPtr register4, IntPtr register5, IntPtr register6, IntPtr register7,
+ out int value);
+#endif
[DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl",
CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
@@ -327,10 +341,24 @@ internal static extern int OpusEncoderControl(
#else
[DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
#endif
- internal static extern int OpusEncoderControl(
+ internal static extern int OpusEncoderControlSet(
OpusEncoderHandle handle,
EncoderControlRequest request,
int argument);
+#if OSX
+
+ [DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_ctl", ExactSpelling = true)]
+#if NETSTANDARD2_0
+ [DefaultDllImportSearchPaths(DllImportSearchPath.LegacyBehavior)]
+#else
+ [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
+#endif
+ internal static extern int OpusEncoderControlSetArm64(
+ OpusEncoderHandle handle,
+ EncoderControlRequest request,
+ IntPtr register2, IntPtr register3, IntPtr register4, IntPtr register5, IntPtr register6, IntPtr register7,
+ int argument);
+#endif
[DllImport(_opusEncLibrary, EntryPoint = "ope_encoder_destroy",
CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopus.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopus.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopus.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopusenc.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.15-x64/libopusenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.10.15-x64/libopusenc.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib
new file mode 100644
index 00000000..0fa164f4
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib
new file mode 100644
index 00000000..0309a9ca
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopus.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib
new file mode 100644
index 00000000..609b5295
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-arm64/libopusenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopus.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopus.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopus.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopusenc.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.11/libopusenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.11-x64/libopusenc.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib
new file mode 100644
index 00000000..33e0f0fc
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib
new file mode 100644
index 00000000..983331a6
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopus.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib
new file mode 100644
index 00000000..ce887a4a
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-arm64/libopusenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib
new file mode 100644
index 00000000..c9009e42
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib
new file mode 100644
index 00000000..48922756
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopus.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib
new file mode 100644
index 00000000..d6a0d7de
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/macos.12-x64/libopusenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib
deleted file mode 100644
index a6af48df..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib
deleted file mode 100644
index 236f16fd..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopus.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib
deleted file mode 100644
index 48c078e8..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.13-x64/libopusenc.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib
deleted file mode 100644
index 81136f36..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib
deleted file mode 100644
index f546d75f..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopus.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib
deleted file mode 100644
index e8507f54..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/osx.10.14-x64/libopusenc.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so
deleted file mode 100644
index d9730cb5..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Opus/ubuntu.16.04-x64/libopusenc.so and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj
index eb5521e6..e45806f4 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/AudioWorks.Extensions.ReplayGain.csproj
@@ -2,7 +2,7 @@
- 1.7.3
+ 1.8.0
$(VersionPrefix).$(Revision)
The ReplayGain 2.0 extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/ReplayGain-Extension#release-notes
@@ -33,7 +33,7 @@
-
+
PreserveNewest
true
contentFiles\any\any\
@@ -41,7 +41,7 @@
-
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs
index e8f00af1..0f0e5e0b 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/Ebur128LibHandler.cs
@@ -57,10 +57,14 @@ public bool Handle()
var osVersion = GetOSVersion();
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" :
- osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" :
- osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" :
- "osx.11"));
+ osVersion.StartsWith("10.15", StringComparison.Ordinal)
+ ? "macos.10.15-x64" :
+ osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.11-arm64"
+ : "macos.11-x64" :
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.12-arm64"
+ : "macos.12-x64"));
#endif
try
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.15-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.10.15-x64/libebur128.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.15-x64/libebur128.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.10.15-x64/libebur128.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib
new file mode 100644
index 00000000..618fab94
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-arm64/libebur128.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.11/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-x64/libebur128.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.11/libebur128.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.11-x64/libebur128.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib
similarity index 67%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib
index 38db8343..ee9e46fe 100644
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.14-x64/libebur128.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-arm64/libebur128.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib
new file mode 100644
index 00000000..a171dbb4
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/macos.12-x64/libebur128.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib
deleted file mode 100644
index c40b7d83..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.ReplayGain/osx.10.13-x64/libebur128.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj
index fd9dfd9a..f2486704 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/AudioWorks.Extensions.Vorbis.csproj
@@ -2,7 +2,7 @@
- 1.14.3
+ 1.15.0
$(VersionPrefix).$(Revision)
The Ogg Vorbis extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/Vorbis-Extension#release-notes
@@ -41,7 +41,7 @@
-
+
PreserveNewest
true
contentFiles\any\any\
@@ -49,7 +49,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs
index bdb87567..e3737387 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/CoverArtAdapter.cs
@@ -37,23 +37,14 @@ static class CoverArtAdapter
var offset = 4;
// Seek past the mime type and description
-#if NETSTANDARD2_0
- offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4;
- offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset)) + 4;
-#else
offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4;
offset += (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..]) + 4;
-#endif
// Seek past the width, height, color depth and type
offset += 16;
return CoverArtFactory.GetOrCreate(
-#if NETSTANDARD2_0
- decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue.Slice(offset))));
-#else
decodedValue.Slice(offset + 4, (int) BinaryPrimitives.ReadUInt32BigEndian(decodedValue[offset..])));
-#endif
}
#if NETSTANDARD2_0
@@ -69,19 +60,19 @@ internal static ReadOnlySpan ToBase64(ICoverArt coverArt)
BinaryPrimitives.WriteUInt32BigEndian(buffer, 3);
#if NETSTANDARD2_0
- BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(4), (uint) coverArt.MimeType.Length);
+ BinaryPrimitives.WriteUInt32BigEndian(buffer[4..], (uint) coverArt.MimeType.Length);
fixed (char* mimeTypeAddress = coverArt.MimeType)
- fixed (byte* bufferAddress = buffer.Slice(8))
+ fixed (byte* bufferAddress = buffer[8..])
Encoding.ASCII.GetBytes(
mimeTypeAddress, coverArt.MimeType.Length,
bufferAddress, coverArt.MimeType.Length);
- BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(12 + coverArt.MimeType.Length), (uint) coverArt.Width);
- BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(16 + coverArt.MimeType.Length), (uint) coverArt.Height);
- BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(20 + coverArt.MimeType.Length), (uint) coverArt.ColorDepth);
+ BinaryPrimitives.WriteUInt32BigEndian(buffer[(12 + coverArt.MimeType.Length)..], (uint) coverArt.Width);
+ BinaryPrimitives.WriteUInt32BigEndian(buffer[(16 + coverArt.MimeType.Length)..], (uint) coverArt.Height);
+ BinaryPrimitives.WriteUInt32BigEndian(buffer[(20 + coverArt.MimeType.Length)..], (uint) coverArt.ColorDepth);
- BinaryPrimitives.WriteUInt32BigEndian(buffer.Slice(28 + coverArt.MimeType.Length), (uint) coverArt.Data.Length);
- coverArt.Data.CopyTo(buffer.Slice(32 + coverArt.MimeType.Length));
+ BinaryPrimitives.WriteUInt32BigEndian(buffer[(28 + coverArt.MimeType.Length)..], (uint) coverArt.Data.Length);
+ coverArt.Data.CopyTo(buffer[(32 + coverArt.MimeType.Length)..]);
#else
BinaryPrimitives.WriteUInt32BigEndian(buffer[4..], (uint) coverArt.MimeType.Length);
Encoding.ASCII.GetBytes(coverArt.MimeType, buffer[8..]);
@@ -99,7 +90,7 @@ internal static ReadOnlySpan ToBase64(ICoverArt coverArt)
// Since SkipLocalsInit is set, make sure the buffer is null-terminated
buffer[bytesWritten++] = 0;
- return buffer.Slice(0, bytesWritten);
+ return buffer[..bytesWritten];
}
}
}
\ No newline at end of file
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs
index 68a62799..bbfa840a 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioEncoder.cs
@@ -64,7 +64,7 @@ public SettingInfoDictionary SettingInfo
}
}
- public string FileExtension { get; } = ".ogg";
+ public string FileExtension => ".ogg";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs
index 5abec31b..2f2d8091 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioInfoDecoder.cs
@@ -66,9 +66,9 @@ public unsafe AudioInfo ReadAudioInfo(Stream stream)
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs
index 291d19b2..ab933717 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataDecoder.cs
@@ -65,9 +65,9 @@ public unsafe AudioMetadata ReadMetadata(Stream stream)
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs
index 9649e822..0c27ef88 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisAudioMetadataEncoder.cs
@@ -67,9 +67,9 @@ public unsafe void WriteMetadata(Stream stream, AudioMetadata metadata, SettingD
var nativeBuffer = new Span(sync.Buffer(bytesRead).ToPointer(), bytesRead);
#if NETSTANDARD2_0
- buffer.AsSpan().Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer.AsSpan()[..bytesRead].CopyTo(nativeBuffer);
#else
- buffer.Slice(0, bytesRead).CopyTo(nativeBuffer);
+ buffer[..bytesRead].CopyTo(nativeBuffer);
#endif
sync.Wrote(bytesRead);
}
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs
index 614a51be..880ed059 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisCommentToMetadataAdapter.cs
@@ -37,22 +37,22 @@ internal unsafe VorbisCommentToMetadataAdapter(VorbisComment vorbisComment)
var delimiter = commentBytes.IndexOf((byte) 0x3D); // '='
#if NETSTANDARD2_0
- var keyBytes = commentBytes.Slice(0, delimiter);
+ var keyBytes = commentBytes[..delimiter];
var key = Encoding.ASCII.GetString(
(byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(keyBytes)),
keyBytes.Length);
if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase))
- CoverArt = CoverArtAdapter.FromBase64(commentBytes.Slice(delimiter + 1));
+ CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]);
else
{
- var valueBytes = commentBytes.Slice(delimiter + 1);
+ var valueBytes = commentBytes[(delimiter + 1)..];
SetText(key, Encoding.UTF8.GetString(
(byte*) Unsafe.AsPointer(ref MemoryMarshal.GetReference(valueBytes)),
valueBytes.Length));
}
#else
- var key = Encoding.ASCII.GetString(commentBytes.Slice(0, delimiter));
+ var key = Encoding.ASCII.GetString(commentBytes[..delimiter]);
if (key.Equals("METADATA_BLOCK_PICTURE", StringComparison.OrdinalIgnoreCase))
CoverArt = CoverArtAdapter.FromBase64(commentBytes[(delimiter + 1)..]);
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs
index 386f355b..36713ee2 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/VorbisLibHandler.cs
@@ -53,16 +53,19 @@ public bool Handle()
var osVersion = GetOSVersion();
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" :
- osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" :
- osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" :
- "osx.11"));
+ osVersion.StartsWith("10.15", StringComparison.Ordinal)
+ ? "macos.10.15-x64" :
+ osVersion.StartsWith("11", StringComparison.Ordinal) ? RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.11-arm64"
+ : "macos.11-x64" :
+ RuntimeInformation.ProcessArchitecture == Architecture.Arm64
+ ? "macos.12-arm64"
+ : "macos.12-x64"));
#else // LINUX
var release = GetRelease();
if (release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase))
AddUnmanagedLibraryPath(Path.Combine(
Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath)!,
- release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" :
release.StartsWith("Ubuntu 18.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.18.04-x64" :
"ubuntu.20.04-x64"));
#endif
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbis.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbis.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbis.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbisenc.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.15-x64/libvorbisenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.10.15-x64/libvorbisenc.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib
new file mode 100644
index 00000000..0fa164f4
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib
new file mode 100644
index 00000000..148fdf59
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbis.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib
new file mode 100644
index 00000000..661ddc3a
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-arm64/libvorbisenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libogg.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libogg.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libogg.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbis.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbis.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbis.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbisenc.dylib
similarity index 100%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.11/libvorbisenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.11-x64/libvorbisenc.dylib
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib
new file mode 100644
index 00000000..33e0f0fc
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib
new file mode 100644
index 00000000..d9f43a4a
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbis.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib
similarity index 56%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib
index 240c9427..28a2511b 100644
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbisenc.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-arm64/libvorbisenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib
new file mode 100644
index 00000000..c9009e42
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libogg.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib
new file mode 100644
index 00000000..2eee8e7b
Binary files /dev/null and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbis.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib
similarity index 70%
rename from AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib
rename to AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib
index 80d1a608..736eab66 100644
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbisenc.dylib and b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/macos.12-x64/libvorbisenc.dylib differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib
deleted file mode 100644
index a6af48df..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib
deleted file mode 100644
index 2bda89ce..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.13-x64/libvorbis.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib
deleted file mode 100644
index 81136f36..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libogg.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib
deleted file mode 100644
index 5827336a..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/osx.10.14-x64/libvorbis.dylib and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so
deleted file mode 100644
index dd0f29db..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbis.so and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so b/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so
deleted file mode 100644
index 45f4cfbb..00000000
Binary files a/AudioWorks/src/Extensions/AudioWorks.Extensions.Vorbis/ubuntu.16.04-x64/libvorbisenc.so and /dev/null differ
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj
index 834b6517..6c429ae1 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/AudioWorks.Extensions.Wave.csproj
@@ -2,7 +2,7 @@
- 1.8.0
+ 1.9.0
$(VersionPrefix).$(Revision)
The Waveform Audio File Format (WAVE) extension for AudioWorks. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
https://github.com/jherby2k/AudioWorks/wiki/Wave-Extension#release-notes
@@ -12,7 +12,12 @@
-
+
+
+
+
+
+
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs
index 348372cc..f54371e3 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioDecoder.cs
@@ -150,7 +150,7 @@ public SampleBuffer DecodeSamples()
throw new AudioInvalidException("Stream is unexpectedly truncated.");
if (_format == DataFormat.Lpcm)
- result = new(buffer.AsSpan().Slice(0, length), _audioInfo.Channels, _bitsPerSample);
+ result = new(buffer.AsSpan()[..length], _audioInfo.Channels, _bitsPerSample);
else
{
var lpcmBuffer = ArrayPool.Shared.Rent(length);
@@ -164,7 +164,7 @@ public SampleBuffer DecodeSamples()
lpcmBuffer[sampleIndex] = _µLawDecodeValues[buffer[sampleIndex]];
// TODO SampleBuffer should probably accept 16-bit buffers directly
- result = new(MemoryMarshal.Cast(lpcmBuffer.AsSpan().Slice(0, length)),
+ result = new(MemoryMarshal.Cast(lpcmBuffer.AsSpan()[..length]),
_audioInfo.Channels, 16);
}
finally
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs
index d3931ac8..9bb28a8d 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioEncoder.cs
@@ -36,7 +36,7 @@ sealed class WaveAudioEncoder : IAudioEncoder, IDisposable
public SettingInfoDictionary SettingInfo { get; } = new();
- public string FileExtension { get; } = ".wav";
+ public string FileExtension => ".wav";
public void Initialize(Stream stream, AudioInfo info, AudioMetadata metadata, SettingDictionary settings)
{
diff --git a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs
index 97735760..13821f54 100644
--- a/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs
+++ b/AudioWorks/src/Extensions/AudioWorks.Extensions.Wave/WaveAudioInfoDecoder.cs
@@ -96,29 +96,13 @@ public AudioInfo ReadAudioInfo(Stream stream)
static AudioInfo ParseLpcm(ReadOnlySpan fmtData, uint dataSize) =>
AudioInfo.CreateForLossless(
"LPCM",
-#if NETSTANDARD2_0
- BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(2)),
- BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(14)),
- (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData.Slice(4)),
- dataSize / BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(12)));
-#else
BinaryPrimitives.ReadUInt16LittleEndian(fmtData[2..]),
BinaryPrimitives.ReadUInt16LittleEndian(fmtData[14..]),
(int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData[4..]),
dataSize / BinaryPrimitives.ReadUInt16LittleEndian(fmtData[12..]));
-#endif
static AudioInfo ParseG711(string format, ReadOnlySpan fmtData, uint dataSize)
{
-#if NETSTANDARD2_0
- var sampleRate = (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData.Slice(4));
- var blockSize = BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(12));
- return AudioInfo.CreateForLossy(format,
- BinaryPrimitives.ReadUInt16LittleEndian(fmtData.Slice(2)),
- sampleRate,
- dataSize / blockSize,
- blockSize * 8 * sampleRate);
-#else
var sampleRate = (int) BinaryPrimitives.ReadUInt32LittleEndian(fmtData[4..]);
var blockSize = BinaryPrimitives.ReadUInt16LittleEndian(fmtData[12..]);
return AudioInfo.CreateForLossy(format,
@@ -126,7 +110,6 @@ static AudioInfo ParseG711(string format, ReadOnlySpan fmtData, uint dataS
sampleRate,
dataSize / blockSize,
blockSize * 8 * sampleRate);
-#endif
}
}
}
diff --git a/AudioWorks/src/Extensions/PublishLocally.ps1 b/AudioWorks/src/Extensions/PublishLocally.ps1
index e0e1a405..c2bbd1f6 100644
--- a/AudioWorks/src/Extensions/PublishLocally.ps1
+++ b/AudioWorks/src/Extensions/PublishLocally.ps1
@@ -47,118 +47,216 @@ foreach ($package in Get-ChildItem -Path $(Join-Path -Path $PSScriptRoot -ChildP
else { nuget add $package -Source $localFeedDir -Expand -NonInteractive }
}
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAeddb5qQfOD85I
-# 9jP4ktczcEOiskLJESD1h/OisJbRwKCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB0YuUPd098uvrOqERByvWNl9QS
-# GW2/Hm/qapPlD3wfHDANBgkqhkiG9w0BAQEFAASCAQCeB2s76UIvxYqPyidY7r0n
-# 83fFK821AEMGq8bNFI9g5eqPXYCx3kHw7MTxSzB1BgJDcb/UzwbjVZNUVlqqTPtG
-# B04VYofOtkBW5OGzi8srf8Kg8vtGYFqLRccqoPlCJDsVZ0Lo1F8RsI/vI/CVrP2z
-# RiWUENI/kUSqyftPqViohAb3Qn1YdrlbJw3QvMcDge1TUNjGbug1MLkETXX83n0A
-# D00y7KOKJFjHE/Q7suBxUtEQVRFeAVZGDihOTQMAn3efYM/0+DW25Jn2dkeXUnCV
-# ycTlGAw38gs7J/JeiAJPVPEw8jNya+EzioT+E0Sw2MI9PQgvaxZdjVnO6g0A3kLQ
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjIzNDMxM1owLwYJKoZIhvcNAQkEMSIEIBjoFU5wEoWOkjvMGSaI
-# W3ntUTGnityB05XP2+Rr3/UXMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAKUNoGHZQyXhkF4OdWfx+/FygzzUR1a0YS0+cPcHIbNm9lVBv
-# nCpRBXJ6UDMO9YdJKZE4i1nCaOuRFteoDhds59iIh+2veTJROfrOGThT6oyPqODm
-# XiQy/NmuuGVzNqSdtT0G55pmsL4pNEE2cz3Z3ioYAbcDru1VAg4cHpv9zrviWiYB
-# sLPPej4w6Ui5ElcuiN+gyYc6oC62xH1RktbWVkKLTmCURJTW51YtFCag5saB5+Zz
-# T8+SWYjdHK1DNLZi/t7SnQsVR3OA3nUrjS3WwR89KkdoGh2/G66bCbHBzkEtf27X
-# FT/pD2XqzcqiXqyGmiZJaqT/KliqEiyOpMTF/A==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU1Q8zD0OrOdH6tkuPF44gFBD0
+# FnaggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTzoIz0N++H
+# xvJNsjNvWE2XwmQruTANBgkqhkiG9w0BAQEFAASCAYBDfxmxDvf0/7e50xal/H/V
+# kb/2yHnho2uXvb4QS8cO06s5uy9HrC/adwPSmV6EU5y8IR8Ms19KrfJ4OR0/dmoC
+# /eNLgFLZNIpMriSD/ym9NVbuzV6D5IGV96axZFHvQzVBjvZCV0qbtdUZIfjweD7x
+# MXO7eFI4k19bZPT61cTP8v9G+xVK4vTk6pwNE8xC/i8dwmLR9NxsGqK2sP5xCR5m
+# KCEaUFgh3djhMpjDiGaHVdjtE18cSHTDPPQaB5nPhdfLpszwQijSx/bwFqK9tFvl
+# n7xooIwvLgFfd8yfMQdLvAab6QeuIH65htQOp1wtYeGMhyuPQY/U0xoELD6C1fXy
+# QMo1G0Mm2UGhpqJJNtZ8ttNvpmUd7CAuIEeTDIuscFA8thh7L7c11lKcubw/BkCk
+# sX7ZBETjs9Yl9SsUu08InWDB3oCF/gz1y1ip1Yxty0DR1jr1wk18zbDeqisTp4g3
+# U9AMSyG47TlbLvU9zRRajpeKtpmB30xf5zMYUmfTDi+hggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjU0NFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMICR2iXOhlD7cqMNkDSy
+# r4OVRgktN+DXAaYzrW8BQ6RRKnCzz7uey5qzg6bjukAaEDCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAg/Mj0CpWOH2OjzD1tRTMpuiw8bj5HJS9
+# XqQ2ky5TblUztgO+iAlJmJZCwPp6HVJT4haodAZ1YRuj+TaHHQtwAInv2/83SRoX
+# HqEgZrTlYogMpRzFBONW/+STMAYydjOBzXWpS85vQT33n/9BXjOfAoW8eLNm5HRN
+# FoJmS3sI+nlA6cOcBuZyL4q7BoDVR9ZxWMQnU2msEAuhZOkFndUa1u3z8Ex8iJMP
+# g80otx1nfP8wKtUNUiZCTjOS7JThPJZbYSRxNFdHMvrNz7N4XiRpsvPFXo0xXXuc
+# 54tCYSwQS54uHzfq7ZMKsVbLk+i2XY7NLaPVGuu8TrpKyPJ2PZNF8cOdhhrsRnYO
+# swsBDr6ibQZPo0UbWbxh+Ie5YHxg3ZbOLQaWWFxZ6yajWpmcds34EB6BWzUuLPJX
+# I/+PRgcN7p5IRiEGjFi2p3K+Ry+QNENOXlJetxje8DPhZA8sYeKQma4AKa4L+BFz
+# Zh7cqg0dDzH0jU6nDayAgBVbKDGSw/aqYnU0JUkw2luw1mqUaRFxHKnJGjj6W6cr
+# U48l9YWw6KOp9mKjewvmU4ioF1W4vy82NY+NNSUms+VXSF7SVVm2hiEhv9pTHrqx
+# bf3YHRXq4iShWItWu8mHXN4V0t5RVY472ugzQp8bLBjE+C1Jnjyq4m4xju6ZNSSS
+# A166X+ObKm8=
# SIG # End signature block
diff --git a/AudioWorks/src/Extensions/UseLocalRepository.ps1 b/AudioWorks/src/Extensions/UseLocalRepository.ps1
index 5cb21559..4535c744 100644
--- a/AudioWorks/src/Extensions/UseLocalRepository.ps1
+++ b/AudioWorks/src/Extensions/UseLocalRepository.ps1
@@ -20,118 +20,216 @@ $content = Get-Content $settingsFile | ConvertFrom-Json
$content.ExtensionRepository = $localFeedDir
$content | ConvertTo-Json | Set-Content -Path $settingsFile
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCuihgWnDMxc5LY
-# smMwHbWY+A6Inc+kV9ZrULJZpD0hvKCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCB37a/gCuqZfV+Fa1uudNhIxsv4
-# DReIHFjtBtK/G0/qQjANBgkqhkiG9w0BAQEFAASCAQBeXbJ4Deg7FwTTmqdw7nOc
-# IM3hABZHh2Y3JuEyFNDHX0gcjbyNhpYd3/2Rtk9kYmJ/2eaWy02fQZ+GeacC2tDi
-# fB/VzH+09I2R4ZlHTBLk5ybQtF/Nr6/g/8zQo+8+m0r42j1ZakICIPu7nVcO/30U
-# FXe4lphX4uUHPVUwmPozHRWqeahqKVYc42GjLcbw2JhMHC+i/LDh5tC9YLZ1TaYa
-# nDvdpv9zfvQlANfmS+oGiWGV41A9Jdhxtz75X8Ec28g+OztTgwRF/KU1ppRMJGHa
-# 7B3hIeUO88+newhXWdlPGz+DF0Fx1yc8+a0E4SYaNSloR63hqc7wNXVh5FvF3s6p
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjIzNDI0MFowLwYJKoZIhvcNAQkEMSIEIL//S4e/IStv4VJ6AJZi
-# 6MAHqAi468/SiUgMbztbBz80MDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAk4rEu5TxLwDoFbIqAK4ZbSj8BEnnkbBj/EAqJxVedd3TG8lz
-# 0KREeXMvyx74RfxnYzMZMJdcYYzKiAfG3aaN7BqwKnPL7KGuASThrCLrEkIF0/vu
-# osrZsii3Fnoqu5C465RNHR/QLkHfQvhtUaodLeUohzdSaoQZr+QzqVn0GbsbYHxy
-# 5G9d7ha778EBzQcXXg0kTZUkwmTlX9iWToMB1MB865ZJSb3fbAhNK2NbluCERIuh
-# sz0uyS0lGCmLp+LInZWP5uWnTKbQ2VInd3L/bclYZsVul8FkaGgMf5ZTe7t5GO0A
-# VdJYreM4v1L3ZHjS284EEuUKge7hF9VyPof03g==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU+69a8PcNwbELqcLr9paODc6l
+# GgiggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBTR8USZZAi8
+# U+FmXL2kzIBYT1oKbjANBgkqhkiG9w0BAQEFAASCAYAHviBi9HHWF8fT1Sh1iJfh
+# 9qTRnj7FRrvHj2A7MXJ9y6p8tRmiJn5lc378vWNY1AVXzCBaUv5/oEaeYFBQl6ly
+# zBUr+eiClO3JkxWH2qefApdDZMmp7l96u19abBXu1qkul+YdlYyLO7jwiWKMncFH
+# 6d1IzGPn4p9V9zgAjY6WoKBmOJeteFttq+uXNS8jtar2wbmv1kkKK63VdaRe6x+Q
+# KcRKXl4YzfL5eR1v09Zyk229IeePfsR22niiHDdQf3B+nQ+CZ6RemMQxfCIp4L0+
+# PuePZ1pGL1tBtd1Ef9fZWrOiqXUJHnPntToP0sbQbdYTWZHxmSYncgj+bIOboFOq
+# zDFJDjRxHjUJVtxBKqbmB4T2DkEK4ozMYw3iCEj6GzG02metCxxmh501pUsTFW3d
+# GkutAgj0v5v3na5WjK4gwU+Bx+wUi2gz/9D2veBOMjJLqLO2LRo6fN4aIVPHl+4S
+# KOH/Jzk9289FqdTCOXZKxMOwHsc+xkX8G+ZpoGLE/ZqhggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjUwOFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMOFYSIJlBOtOgPoziRfd
+# CAftLkoPmC56dPjz9bEqfIOR1+FF/fGhnJrG/aHAjbLhTDCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIANglhz95oEjqrpzY5KI431zTP2OSG/P7p
+# G92V2fSL1kbnBZ5RluxWaLyctQOtEHe/KFDVmBgFkAn+5/sDHb26zdapCPIOclYf
+# Xdkq4bFHzsv5ppQ9K58aSkAbGWTqbGgWn9vSmUkLXjd3q41ChmBjRx4g4zuPbeui
+# kJrhEwhgTJAwRp0lDL9V7L0TrihI9ospxdl0BjHmqXbVg3uyP9j+PXA43urQ9WJq
+# goXg6wEPWa+2dbviWoObtTG2ULXR9R2Etuh5WAtDQxj4DXvrG0yPK/dbeXt1Dd9x
+# 60k6J4vcDkEceRkWYBqnaSInP7SguguokZOkUgJBMcXLXRrZ/BhjfEUFwTHSKNHi
+# w+mYnyHBflDhbzT44RrFWu5ENwOInB61anRSYymWSj5LZpWgWCxRn46R3vlG9E2P
+# 7f2aHa+cnmqT+Lvo6fu3W9lvoBiGNAHj1lVvqZIHXEYjYOhwZc/X2JjmOTbFE4OP
+# /Kj4DOhkuEMvJhjU9WlyboywGBKVSFTQFwDn4yb8LiXAZKuq/mf5nK/FGbG5z/85
+# VkmihFt7htLZTwduqJw7WAQgZeq0NvyLwlO080UaX+pCYr7cJSs/dQxd1saq9A8l
+# c2Z0jAtHeumVNssplAz4gR5H9wQ1difkOfwPQ8i04neHnP2JZta7iQU+OkzAT9aW
+# bLm9CBUPIpc=
# SIG # End signature block
diff --git a/AudioWorks/src/Extensions/UseRemoteRepository.ps1 b/AudioWorks/src/Extensions/UseRemoteRepository.ps1
index ee754ba5..95cdc1d9 100644
--- a/AudioWorks/src/Extensions/UseRemoteRepository.ps1
+++ b/AudioWorks/src/Extensions/UseRemoteRepository.ps1
@@ -20,118 +20,216 @@ $content = Get-Content $settingsFile | ConvertFrom-Json
$content.ExtensionRepository = $remoteFeed
$content | ConvertTo-Json | Set-Content -Path $settingsFile
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAy2/RPz9gC4GE/
-# apRPFwGZMdA+2xdTgvVxx8F5VsQr96CCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCC5FbRF61abZCuyHYerKH7l4xOH
-# KCfYqqvysqAZYVfIwjANBgkqhkiG9w0BAQEFAASCAQAUOYMGbwo/b3nD7P1TI6Uj
-# rYfF8/FlqCcwad2z11wHISLf0F69oRnmsHGFFDkGOjR5EcnDP5kr9n50NwbG11O6
-# XHZHjcDRLAKvPa0yQmflhLNaC841Vhle9Yv5TzmN0uyg4LZfQXCcafG+mgRL9Ago
-# kUnR2LI/yY1YGrXw3FQgwVseZwK44OOs6qBGe8qFMTiFjeNDL7czAoD8dKL/q9vv
-# ZeBD4elqHmlVN0pZZjZOqNoxgXCLM5iudHoUaxCORtvJx/aB++LYFalnHcynnkk6
-# 3Sw159bCGALfVbg4o3HdtE4rUBkFDglbiDiqJd6OfMykmuj6lXJ7HSzxeDlhTsQ0
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjIzNDIyMFowLwYJKoZIhvcNAQkEMSIEIIUjvd9vUgkC6aF9XORu
-# Bp6lHubuS/WuT9FDIDIsyPIvMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAVwyZPLVdLZzmbf2dONScf7tP3Mrq7b6pFA+1SCj845bHc6L4
-# sqJl3TnXVtHgnJRIInK6YwuarvsDwc16vva2muARoPfGsY+SNeJgOPiJFf8rbC0J
-# LdjM5j9qXgGX4Ehogryr1wYCfbdx/chYf3ejErpFlZnDG1rvq2p45pwdjv4bv4a/
-# GAqFXe2GWx+qa7bckQ0RDXPUsRxA8vDf9pRMbgZ7JSaxzDxrtsnsoML1LRL/RIiv
-# xf17wzyUTgTQ+1tB/IX0HlUsWVT9y4ac0Dw/r+N3gb9hbU7EKTbwHdb41P2FZ+/f
-# tGMdlLdaGG42sC7Mgz4EgBDx2NBHuJ233CD/jw==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU4saIUsp1sS4qlFzKDqv0Q/a+
+# 6v2ggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBSTqhBkLb+W
+# mi8vpSEPOROXTNXP+zANBgkqhkiG9w0BAQEFAASCAYBbFMa6iyJsxg32qxMCwSva
+# at1Jpn1Cbnlq6s4CMu6Mhh9/tCbG5LqpLR61IDOKugW6ft8HIC1dq7psoWUaX7nE
+# mcGoOPVF+9CqFOsGKFE2G2blhgmrx9tu+Hm5zS6NsHT03F8MZAUVHBJwmCfRN0Cy
+# k22pfv1L6QSMS5SxUURJWaZIaKzXBI39y23P7ovck/Zs3+bp7SsJz5YN5DOtKYbf
+# uXr9crujmeHjUypGDeH24VD5aV0WQ8Rjx90TxsiwOexhTvU5uo8RKtplEpLuIdIJ
+# 2GSg/2HMqvK4+VzojxPkqGfR1Ed6IoWijakFYUYe9AgrDEtUpCIHlOJeXcE5licT
+# Hv5WnLX979QaBCl4QUv0rQBzNkNbSmMxuSwxyszKzrIlx7iFlu14bSObe4i7z5HS
+# ZHixMtAcsJRD4suKlz6+rjhJf/mB1eGYkEg/chjScFQ7P92UTN6aar2IyVFmnx7I
+# 7hZLGDdo8tQyZnPnODy9TrC1aNXn6G7XTGOk4t8nipGhggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjUyOFowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMHHRQR6qaMBouNgn8Y9g
+# k5PPV0HYu5hrMQefVhj/oQjLd0PgQuFSneLrFRnOdMIXjTCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIALD9PcsPITWgf6CZz8Pn1/nB3xPTquc66
+# dK65PVg94HAV6s/Et/PiuqGz5gtZUuB9ya6mESaec/OEAGrwASUYHxUSpe5L/HbH
+# DfVNcPGYBMBATVEJ1nCxwfhbuxcGfMKWzXb8epxCYcl+TtMPWZffjrCoLknI8m/P
+# Vfj09LnEbempUxhUPSLl74jpO2xpriIcJ111CUuknNshiBjg/cx173ySBpT7d/cE
+# 1bSbfjgCLhE/4Am3qv5UOqj2B1Ogi8ZB3FBJx1WXxmCDwjvJ307OMcbA1zorGBBV
+# FkJpR9FMVBk2LUL8Z9LfFY2WZxlxCULfuaSNvDawJRNo9UDz8r5dMoIk8Fs7jhH5
+# GxN7kiEzi12FyEuEBQE2PEgO8QVylTlsg4Yq4/PVJrpjiRnG+chnqNlyQRgaXXyy
+# pswaxqE3MvOO0yH5Xw1TkQpcrgmL3t8brgtXJrENxkA4Kve5X90hN+NTADFL9Bpz
+# 1IpL+/avozfXMCoOCl50m6ic8Ftgico9tZVpxYR/m4sOwXvH78ToRJc4ki8WFW5u
+# GJk+MT1urrMUEj+Mut2eROEom9rL2s/0hqBqZO2g1SESNxlR8264H/CIe6vZ+00O
+# DSvV7SKzf68V9ZYLG3o9fUAYCYfQ8aQKQw55FpiUr9hi2AiNvq6We101Nmgnpzas
+# g5wqCg2BKjE=
# SIG # End signature block
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj b/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj
index 047986d6..fc77526a 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj
@@ -1,29 +1,29 @@
- net5.0;netcoreapp3.1;netcoreapp2.1;net462
- net5.0;netcoreapp3.1;netcoreapp2.1
+ net6.0;netcoreapp3.1;net462
+ net6.0;netcoreapp3.1
false
true
-
-
-
+
+
+
-
-
+
+
-
+
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs
index fe906f76..b6206661 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeGroupDataSource.cs
@@ -35,39 +35,11 @@ public static class AnalyzeGroupDataSource
new TestSettingDictionary(),
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
+ new[]
{
new TestAudioMetadata
{
-#if NETCOREAPP2_1
- TrackPeak = "0.820313",
-#else
- TrackPeak = "0.820312",
-#endif
- AlbumPeak = "1.000000",
- TrackGain = "-1.36",
- AlbumGain = "-6.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "1.000000",
- AlbumPeak = "1.000000",
- TrackGain = "-6.49",
- AlbumGain = "-6.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "1.000000",
- AlbumPeak = "1.000000",
- TrackGain = "-7.22",
- AlbumGain = "-6.11"
- }
- },
- new[] // libebur128 1.2.4
- {
- new TestAudioMetadata
- {
-#if NET462 || NETCOREAPP2_1
+#if NET462
TrackPeak = "0.820313",
#else
TrackPeak = "0.820312",
@@ -110,31 +82,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.820708",
- AlbumPeak = "1.001060",
- TrackGain = "-1.36",
- AlbumGain = "-6.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "1.001060",
- AlbumPeak = "1.001060",
- TrackGain = "-6.49",
- AlbumGain = "-6.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "1.001014",
- AlbumPeak = "1.001060",
- TrackGain = "-7.22",
- AlbumGain = "-6.11"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -174,31 +122,7 @@ public static class AnalyzeGroupDataSource
new TestSettingDictionary(),
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.590515",
- AlbumPeak = "0.965790",
- TrackGain = "4.24",
- AlbumGain = "-2.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.914001",
- AlbumPeak = "0.965790",
- TrackGain = "-2.03",
- AlbumGain = "-2.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.965790",
- AlbumPeak = "0.965790",
- TrackGain = "-3.84",
- AlbumGain = "-2.11"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -241,31 +165,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.590625",
- AlbumPeak = "0.965800",
- TrackGain = "4.24",
- AlbumGain = "-2.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.914001",
- AlbumPeak = "0.965800",
- TrackGain = "-2.03",
- AlbumGain = "-2.11"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.965800",
- AlbumPeak = "0.965800",
- TrackGain = "-3.84",
- AlbumGain = "-2.11"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -305,31 +205,7 @@ public static class AnalyzeGroupDataSource
new TestSettingDictionary(),
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.813904",
- AlbumPeak = "0.999664",
- TrackGain = "-1.15",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997620",
- AlbumPeak = "0.999664",
- TrackGain = "-6.28",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999664",
- AlbumPeak = "0.999664",
- TrackGain = "-7.03",
- AlbumGain = "-5.91"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -372,31 +248,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.814064",
- AlbumPeak = "0.999686",
- TrackGain = "-1.15",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997620",
- AlbumPeak = "0.999686",
- TrackGain = "-6.28",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999686",
- AlbumPeak = "0.999686",
- TrackGain = "-7.03",
- AlbumGain = "-5.91"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -436,31 +288,7 @@ public static class AnalyzeGroupDataSource
new TestSettingDictionary(),
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.814056",
- AlbumPeak = "0.999634",
- TrackGain = "-1.15",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997467",
- AlbumPeak = "0.999634",
- TrackGain = "-6.28",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999634",
- AlbumPeak = "0.999634",
- TrackGain = "-7.02",
- AlbumGain = "-5.91"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -503,31 +331,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.814071",
- AlbumPeak = "0.999712",
- TrackGain = "-1.15",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997490",
- AlbumPeak = "0.999712",
- TrackGain = "-6.28",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999712",
- AlbumPeak = "0.999712",
- TrackGain = "-7.02",
- AlbumGain = "-5.91"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -567,31 +371,7 @@ public static class AnalyzeGroupDataSource
new TestSettingDictionary(),
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.814049",
- AlbumPeak = "0.999651",
- TrackGain = "-1.13",
- AlbumGain = "-5.89"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997602",
- AlbumPeak = "0.999651",
- TrackGain = "-6.26",
- AlbumGain = "-5.89"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999651",
- AlbumPeak = "0.999651",
- TrackGain = "-7.00",
- AlbumGain = "-5.89"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -634,31 +414,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.814095",
- AlbumPeak = "0.999651",
- TrackGain = "-1.13",
- AlbumGain = "-5.89"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997607",
- AlbumPeak = "0.999651",
- TrackGain = "-6.26",
- AlbumGain = "-5.89"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999651",
- AlbumPeak = "0.999651",
- TrackGain = "-7.00",
- AlbumGain = "-5.89"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
@@ -701,31 +457,7 @@ public static class AnalyzeGroupDataSource
},
new[]
{
- new[] // libebur128 1.1.0 (Ubuntu 16.04)
- {
- new TestAudioMetadata
- {
- TrackPeak = "0.813904",
- AlbumPeak = "0.999664",
- TrackGain = "-1.15",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.997620",
- AlbumPeak = "0.999664",
- TrackGain = "-6.28",
- AlbumGain = "-5.91"
- },
- new TestAudioMetadata
- {
- TrackPeak = "0.999664",
- AlbumPeak = "0.999664",
- TrackGain = "-7.03",
- AlbumGain = "-5.91"
- }
- },
- new[] // libebur128 1.2.4
+ new[]
{
new TestAudioMetadata
{
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs
index dbf5d196..6574271e 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/AnalyzeValidFileDataSource.cs
@@ -59,14 +59,7 @@ public static class AnalyzeValidFileDataSource
},
new[]
{
- new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04)
- {
- TrackPeak = "0.988234",
- AlbumPeak = "0.988234",
- TrackGain = "-8.84",
- AlbumGain = "-8.84"
- },
- new TestAudioMetadata // libebur128 1.2.4
+ new TestAudioMetadata
{
TrackPeak = "0.987757",
AlbumPeak = "0.987757",
@@ -105,14 +98,7 @@ public static class AnalyzeValidFileDataSource
},
new[]
{
- new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04)
- {
- TrackPeak = "1.326816",
- AlbumPeak = "1.326816",
- TrackGain = "-9.75",
- AlbumGain = "-9.75"
- },
- new TestAudioMetadata // libebur128 1.2.4
+ new TestAudioMetadata
{
TrackPeak = "1.342166",
AlbumPeak = "1.342166",
@@ -151,14 +137,7 @@ public static class AnalyzeValidFileDataSource
},
new[]
{
- new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04)
- {
- TrackPeak = "1.013034",
- AlbumPeak = "1.013034",
- TrackGain = "-8.67",
- AlbumGain = "-8.67"
- },
- new TestAudioMetadata // libebur128 1.2.4
+ new TestAudioMetadata
{
TrackPeak = "1.012000",
AlbumPeak = "1.012000",
@@ -197,14 +176,7 @@ public static class AnalyzeValidFileDataSource
},
new[]
{
- new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04)
- {
- TrackPeak = "1.011720",
- AlbumPeak = "1.011720",
- TrackGain = "-8.66",
- AlbumGain = "-8.66"
- },
- new TestAudioMetadata // libebur128 1.2.4
+ new TestAudioMetadata
{
TrackPeak = "1.014152",
AlbumPeak = "1.014152",
@@ -243,14 +215,7 @@ public static class AnalyzeValidFileDataSource
},
new[]
{
- new TestAudioMetadata // libebur128 1.1.0 (Ubuntu 16.04)
- {
- TrackPeak = "0.993001",
- AlbumPeak = "0.993001",
- TrackGain = "-8.64",
- AlbumGain = "-8.64"
- },
- new TestAudioMetadata // libebur128 1.2.4
+ new TestAudioMetadata
{
TrackPeak = "0.992940",
AlbumPeak = "0.992940",
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs
index e863d38c..f97725de 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/EncodeValidFileDataSource.cs
@@ -209,7 +209,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "ADF68390D58F5312FE3B01D75FE5BE57", // FLAC 1.3.1 (Ubuntu 16.04)
"44AA2E52CED28503D02D51957B19DF74", // FLAC 1.3.2 (Ubuntu 18.04)
"42070347011D5067A9D962DA3237EF63" // FLAC 1.3.3
}
@@ -222,7 +221,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "9A4394FF3EA062E68526EFBCC3851FB9", // FLAC 1.3.1 (Ubuntu 16.04)
"588ACB7827AF0D1A6A18751EEFEA3604", // FLAC 1.3.2 (Ubuntu 18.04)
"0771EF09959F087FACE194A4479F5107" // FLAC 1.3.3
}
@@ -235,9 +233,9 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
- "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
+ "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM)
+ "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel)
}
},
@@ -248,7 +246,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "EFAA1634FCAC4C0AA6544F085DCAA315", // FLAC 1.3.1 (Ubuntu 16.04)
"8A532C4C9D61AF027BC6F684C59FE9A6", // FLAC 1.3.2 (Ubuntu 18.04)
"F0F075E05A3AFB67403CCF373932BCCA" // FLAC 1.3.3
}
@@ -261,7 +258,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "20A6542862C62E47F75FA91CA3863F21", // FLAC 1.3.1 (Ubuntu 16.04)
"4A4DE0494E31D82F446421C876FB10EA", // FLAC 1.3.2 (Ubuntu 18.04)
"D3A7B834DCE97F0709AEFCA45A24F5B6" // FLAC 1.3.3
}
@@ -274,7 +270,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "C470B50240F504610DD9637C0D9CBB4A", // FLAC 1.3.1 (Ubuntu 16.04)
"A34A2A6CD402C98AB46C4BF4CE901A8E", // FLAC 1.3.2 (Ubuntu 18.04)
"10F6AC75659ECFE81D3C07D8D3074538" // FLAC 1.3.3
}
@@ -287,7 +282,6 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "A7A171C2C168DABC8E0374423C23583E", // FLAC 1.3.1 (Ubuntu 16.04)
"B4E17B8DD9733AAB81EC9FA27D4F0D81", // FLAC 1.3.2 (Ubuntu 18.04)
"FCBAB8A8C261456CF6F87E603B237426" // FLAC 1.3.3
}
@@ -300,9 +294,9 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "AE5FE89E167550019A672C46D81B765E", // FLAC 1.3.1 (Ubuntu 16.04)
"A6B18F2B4DDC51DC37154410E701251F", // FLAC 1.3.2 (Ubuntu 18.04)
- "2F2F341FEECB7842F7FA9CE6CB110C67" // FLAC 1.3.3
+ "2DE79B3EED60288225952EB7436F2CD5", // FLAC 1.3.3 (MacOS on ARM)
+ "2F2F341FEECB7842F7FA9CE6CB110C67" // FLAC 1.3.3 (Intel)
}
},
@@ -313,9 +307,9 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "4E48D943C0D10F7B59490398AA68C305", // FLAC 1.3.1 (Ubuntu 16.04)
"CC3E8D9A5B48AE40CB9D0EDD38D433B5", // FLAC 1.3.2 (Ubuntu 18.04)
- "A48820F5E30B5C21A881E01209257E21" // FLAC 1.3.3
+ "0300307842382C0C0D3B8B210C3D0852", // FLAC 1.3.3 (MacOS on ARM)
+ "A48820F5E30B5C21A881E01209257E21" // FLAC 1.3.3 (Intel)
}
},
@@ -326,9 +320,9 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "075CCCEB8C9263F21C95CDF5C2B9D691", // FLAC 1.3.1 (Ubuntu 16.04)
"93016EE621E1F515BDAF0D405917DA25", // FLAC 1.3.2 (Ubuntu 18.04)
- "D90693A520FA14AC987272ACB6CD8996" // FLAC 1.3.3
+ "0A5C07954515A06B7E34D68FDDFF5237", // FLAC 1.3.3 (MacOS on ARM)
+ "D90693A520FA14AC987272ACB6CD8996" // FLAC 1.3.3 (Intel)
}
},
@@ -343,9 +337,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
- "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
+ "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM)
+ "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel)
}
},
@@ -360,7 +354,6 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "1F6BE17A7FCDCC0D879F4A067B4CEF8B", // FLAC 1.3.1 (Ubuntu 16.04)
"D352B276E4712ABBA3A8F1B9CA8BAB55", // FLAC 1.3.2 (Ubuntu 18.04)
"A58022B124B427771041A96F65D8DF21" // FLAC 1.3.3
}
@@ -377,9 +370,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "78D765C28F4817CB0189B8A1238F2C27", // FLAC 1.3.1 (Ubuntu 16.04)
"C73F21F10850A4542EEA2435226F1DEB", // FLAC 1.3.2 (Ubuntu 18.04)
- "F341E56E68A0A168B779A4EBFD41422D" // FLAC 1.3.3
+ "9C069D424B8A5772FBD4FE0CCF388C68", // FLAC 1.3.3 (MacOS on ARM)
+ "F341E56E68A0A168B779A4EBFD41422D" // FLAC 1.3.3 (Intel)
}
},
@@ -394,9 +387,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
- "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
+ "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM)
+ "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel)
}
},
@@ -411,9 +404,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2ED9148F4629DDBCCF43BF903E8F237E", // FLAC 1.3.1 (Ubuntu 16.04)
"7DBB3E3E8079E60932AA5F8B4D9CD57C", // FLAC 1.3.2 (Ubuntu 18.04)
- "986464F3AC48E00D00B8ECF3AF3FD6BC" // FLAC 1.3.3
+ "667DF0654576D3ADA2F89D81CF47AF6F", // FLAC 1.3.3 (MacOS on ARM)
+ "986464F3AC48E00D00B8ECF3AF3FD6BC" // FLAC 1.3.3 (Intel)
}
},
@@ -428,9 +421,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
- "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
+ "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM)
+ "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel)
}
},
@@ -445,9 +438,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "75A88A48CC2EDE69F79E4D86F3B67B11", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
- "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
+ "676357A9EB8CB19FE4098F8077184A05", // FLAC 1.3.3 (MacOS on ARM)
+ "734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3 (Intel)
}
},
@@ -462,9 +455,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "F303C709C209A5B6A986D7EBF0CCC07B", // FLAC 1.3.1 (Ubuntu 16.04)
"FFB7D9F0F4CDF37EDBA799FE371424A7", // FLAC 1.3.2 (Ubuntu 18.04)
- "662592BD8B3853B6FEC4E188F7D0F246" // FLAC 1.3.3
+ "BDA6463E9B77660A277D5A965035D137", // FLAC 1.3.3 (MacOS on ARM)
+ "662592BD8B3853B6FEC4E188F7D0F246" // FLAC 1.3.3 (Intel)
}
},
@@ -479,9 +472,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "67E4AB6AD90E9FFE867ED57E6AFCC09C", // FLAC 1.3.1 (Ubuntu 16.04)
"F03F417B853C560705CD424AD329EFBC", // FLAC 1.3.2 (Ubuntu 18.04)
- "455753A51355171BF22CCC78647235B4" // FLAC 1.3.3
+ "D134EDD71967B03340C8FFB21AAD6301", // FLAC 1.3.3 (MacOS on ARM)
+ "455753A51355171BF22CCC78647235B4" // FLAC 1.3.3 (Intel)
}
},
@@ -502,6 +495,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "24C88B615C59F3054FF0A44C677987FA", // MacOS 11
"50F7F27DBCCE5874118C3DE9B0F0306D"
}
},
@@ -517,6 +511,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "04244493BA087CD69BAD989927BD1595", // MacOS 11
"4A2E22037B18F3318920EA47BA76825C"
}
},
@@ -532,6 +527,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "8522CA9ADFA8E200FDF5936AEF62EA43", // MacOS 11
"C299C20C8EF4ED5B6B5664E6B81C3244"
}
},
@@ -547,6 +543,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "1BB62FEE2C66905CFBB6FEC048BF9772", // MacOS 11
"26442948986C55394D8AE960E66101C3"
}
},
@@ -562,6 +559,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "B55FDF0750DE71AA26781CA565222D05", // MacOS 11
"40626FB4389C8CF567C0BF74621036BD"
}
},
@@ -577,6 +575,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "8D7D0F67E43BECA4B9EE8AC0D552C01F", // MacOS 11
"26B6F5A519F858AB695C5090E7B98451"
}
},
@@ -592,6 +591,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "C88E17FEC4F9AE6C0F8ED21E423E60D3", // MacOS 11
"C8E2DD6861F837C845A52A4C34523C85"
}
},
@@ -607,6 +607,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "826418694704C310B1FFFDE1D1874839", // MacOS 11
"FAF8B7679D0B2446D83BA248CB491410"
}
},
@@ -622,6 +623,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "E170FAAB89D07557FC15F472715168A0", // MacOS 11
"38406F719F6EF9E5F5D4E7862AA5C351"
}
},
@@ -638,6 +640,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "B9F0B2D3BCB6FD612829084D8C42C2AA", // MacOS 11
"2F72E377036957C669D858AEA26DF62F"
}
},
@@ -654,6 +657,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "EF39C30FA5D1106F655DC55806D8CB44", // MacOS 11
"F57326FFFD308ED69B83F7F451938D55"
}
},
@@ -671,6 +675,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "04244493BA087CD69BAD989927BD1595", // MacOS 11
"4A2E22037B18F3318920EA47BA76825C"
}
},
@@ -688,6 +693,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "771DAECD27700570C845116672E7DACC", // MacOS 11
"03305CCE91A686386908415EF35BDE0D"
}
},
@@ -705,6 +711,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
+ "DF3747EF579BFC71DC15CC0399E8F347", // MacOS 11
"815E83D61745D4E117E12D31543C47BF"
}
},
@@ -724,8 +731,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "A4A51635A3E24D6AD0C377C918FBE7B6", // MacOS 10.14
"F62EB3988683FAFF83599C61A18E4BB5", // MacOS 10.15
+ "1E20EEB7DE9491EFC9B946EE9947A437", // MacOS 11 on Intel
+ "7E21540C472F59D17BB67D400BFD7991", // MacOS 11 on ARM
"09CD8B8C8E9D8BC09121D8C9F871F9B7", // 32-bit Windows on Intel
"CF5AD69DADDCCE22612CD6FA8FB21897", // 32-bit Windows on AMD
"75D127D9FCD7720CBE92C0670A93A880", // 64-bit Windows on Intel
@@ -744,8 +752,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14
"EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15
+ "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel
+ "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM
"9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel
"7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD
"1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel
@@ -764,8 +773,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "6C9073E678B05536C0B6AE3BF98691DD", // MacOS 10.14
"F1DD4F4527CCD1F347EEE1008EA2CC92", // MacOS 10.15
+ "16D9FC9ACF0A6F1CE04BACE0368C297C", // MacOS 11 on Intel
+ "13BB443AE1F220DF897615F96EF0A0D2", // MacOS 11 on ARM
"CB39DFBF414790022574435C2D30297D", // 32-bit Windows on Intel
"EB0DA4A098888A34C2F77A2A65D2E337", // 32-bit Windows on AMD
"E0A80A6B32CD5A8FA5C62B44F28C4A87", // 64-bit Windows on Intel
@@ -784,8 +794,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "8CA08D60F2A8FD8E9E966FB86C56246B", // MacOS 10.14
"D8CFD4140F419E15B4227A3E079F0A8D", // MacOS 10.15
+ "9EEEFD7C9BD1965C842964F88243E361", // MacOS 11 on Intel
+ "88908D8E665C16C5B6762CD1B14F8B7C", // MacOS 11 on ARM
"E0C34EA1479C8979D3AF3A2C98D4E699", // 32-bit Windows on Intel
"06469BD31CF3F0B799D9E52BBEA00C72", // 32-bit Windows on AMD
"ED307F76DD052720321284BAD8876AB2", // 64-bit Windows on Intel
@@ -804,8 +815,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "A947F12FF7966ABAD94A102E3E26735F", // MacOS 10.14
"E75BB5AB85B9091CF800762611718B5E", // MacOS 10.15
+ "DF9FAF5172A3A2B98A40A45AE96AE020", // MacOS 11 on Intel
+ "18E802BDE2DDECAAEF5628312EC47EC9", // MacOS 11 on ARM
"6E08F885FEC4094041F6A0B4A02F10AB", // 32-bit Windows on Intel
"194D40FBCAE58B4A01095DD89CE70A2D", // 32-bit Windows on AMD
"369DAA1350BB9C45BAF84F7769221F00", // 64-bit Windows on Intel
@@ -824,8 +836,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "A856507F3B0F038F436AAB49B4CB111C", // MacOS 10.14
"D44290597054C7643B8A492DA3F0F97F", // MacOS 10.15
+ "0885887CE776F7DF0B62938F0B1B5A37", // MacOS 11 on Intel
+ "7B13752769B0DCF9A5054C462D18CB40", // MacOS 11 on Intel
"D41235E8E642C5773C499DCE06A72CC8", // 32-bit Windows on Intel
"C7FD479EFD340F30F3DE645205FA3BC5", // 32-bit Windows on AMD
"A86E9A3D4A9479A44F852FA42BA0C9C2", // 64-bit Windows on Intel
@@ -844,8 +857,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "0F0823DFE0AC879E021E881F70AF5775", // MacOS 10.14
"C57AA6ADEDD247E629980DC8E78610A8", // MacOS 10.15
+ "C06FCDFF1A3A1D4FCD4ACAB7AA962957", // MacOS 11 on Intel
+ "04ABF599CC89FC3478FAFD96DD393DBA", // MacOS 11 on ARM
"7BAD797AA7C5F71C7168C24077271029", // 32-bit Windows on Intel
"01DF45A55B786EBDEFCFFFFFD58187DF", // 32-bit Windows on AMD
"102A8F21E39D364419B9CF5BFB386631", // 64-bit Windows on Intel
@@ -864,12 +878,16 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "7F43E990D02B3D55798A69F675362138", // MacOS 10.14
"0E0C4050A3325A97DCC8782850A085C1", // MacOS 10.15
+ "B3E88B401D50081F75096694932AFA63", // MacOS 11 on Intel
+ "B1BD1E3A78B5E47CAAE8462B13720EDE", // MacOS 11 on ARM
"9AC3DEF9B464D0E1AB2D4F91C1A08B83", // 32-bit Windows on Intel
- "4BB812252790CAEDE8CE8547E7BD546A", // 32-bit Windows on AMD
- "2863A63E2060267B6A6151CA90239BC6", // 64-bit Windows on Intel
- "AFBA08886BCC7401D3BD2915E5083A9B" // 64-bit Windows on AMD
+ "4BB812252790CAEDE8CE8547E7BD546A", // Legacy .NET on 32-bit Windows / AMD
+ "CA76E6BF627014C55077F133C4E2E405", // .NET Core 3.0+ on 32-bit Windows / AMD
+ "2863A63E2060267B6A6151CA90239BC6", // Legacy .NET on 64-bit Windows / Intel
+ "940C0D0056C23E7F8DCDCC09C51E1475", // .NET Core 3.0+ on 64-bit Windows / Intel
+ "AFBA08886BCC7401D3BD2915E5083A9B", // Legacy .NET on 64-bit Windows / AMD
+ "BD90F67F68BEDEAB116241A3B0B79CDB" // .NET Core 3.0+ on 64-bit Windows / AMD
}
},
@@ -884,8 +902,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "7F43E990D02B3D55798A69F675362138", // MacOS 10.14
"0E0C4050A3325A97DCC8782850A085C1", // MacOS 10.15
+ "B3E88B401D50081F75096694932AFA63", // MacOS 11 on Intel
+ "B1BD1E3A78B5E47CAAE8462B13720EDE", // MacOS 11 on ARM
"9AC3DEF9B464D0E1AB2D4F91C1A08B83", // 32-bit Windows on Intel
"4BB812252790CAEDE8CE8547E7BD546A", // 32-bit Windows on AMD
"2863A63E2060267B6A6151CA90239BC6", // 64-bit Windows on Intel
@@ -906,8 +925,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14
"EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15
+ "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel
+ "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM
"9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel
"7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD
"1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel
@@ -928,8 +948,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "924AD280AF0C8E068F2CA14211631527", // MacOS 10.14
"86088ED15687B386696E2A86CB26B90B", // MacOS 10.15
+ "EA0A363DB54E3435F680C2308EF2A3D9", // MacOS 11 on Intel
+ "E11E1E49987AA13BA2DE91237256AAAF", // MacOS 11 on ARM
"78299761793D1A6EC79CBB9233156FD8", // 32-bit Windows on Intel
"E53BA332FDCFBE927A81040DB480688B", // 32-bit Windows on AMD
"93D67A9C673E7ABE3929846DBE5DBF97", // 64-bit Windows on Intel
@@ -950,8 +971,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B26CC58D8473661388019F210607C1B7", // MacOS 10.14
"3ED7A24F4D3C2337506DDE23FAFFF996", // MacOS 10.15
+ "A2061435078552AF063273BF4498D456", // MacOS 11 on Intel
+ "D565DE5B4A908E077EEC1BB5B75C05C2", // MacOS 11 on ARM
"7EDD94F25082AEEE82B2AA87E795AB6D", // 32-bit Windows on Intel
"9EFB3B60246E65F1C90A0880CF8905D9", // 32-bit Windows on AMD
"A1CD6AC102BA40A728B2C7E00B1E786D", // 64-bit Windows on Intel
@@ -972,8 +994,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "31E4469B7D826DF20C38EC8EC80C0D16", // MacOS 10.14
"090AD76F6A073DB5A6FCB206FE76B3B3", // MacOS 10.15
+ "A8FB56E50B8131AD68A311FFCEE0F6FB", // MacOS 11 on Intel
+ "DAA69EC398F6E9E31B67B12DD735331F", // MacOS 11 on ARM
"0177BB1DEB19854CA8495C4CBBB25366", // 32-bit Windows on Intel
"4EE479F602DD0FB162B19540B683B2BF", // 32-bit Windows on AMD
"38D28BD3802566CB30D3B824D7FF593F", // 64-bit Windows on Intel
@@ -994,8 +1017,8 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2321A80FDC5F36A1860523948548F8E5", // MacOS 10.14
"7DA8554E0BC588114FC632ACF751039D", // MacOS 10.15
+ "C9B699DB0247E0F95DE4C3A39582C4D0", // MacOS 11
"9E77C0824474E3600F1A919715609A1B", // 32-bit Windows
"2321A80FDC5F36A1860523948548F8E5" // 64-bit Windows
}
@@ -1014,8 +1037,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "E36539ED8969070A53809CECCD0B422A", // MacOS 10.14
"13D8C2E82652D483B473B373FC56C753", // MacOS 10.15
+ "391A6E071EE1085676EDB8BAC8888937", // MacOS 11 on Intel
+ "01245B8ECCFC4C4DA1F261F691A3FF37", // MacOS 11 on ARM
"EBD496E30A953A8D0FE11C2609EFABC3", // 32-bit Windows on Intel
"AFEC3388275B59A08EFD11A9B32904FD", // 32-bit Windows on AMD
"2AD5FC82A78732A66B8F04387D7D412B", // 64-bit Windows on Intel
@@ -1036,8 +1060,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "9116562A92B3F1FA983A180972CE670E", // MacOS 10.14
"CACCC7C8EFADCEA67B61FBD88040CEF2", // MacOS 10.15
+ "63FF38E19B0CAEAD684B9F03E9126D11", // MacOS 11 on Intel
+ "8B21060F2783BBD1029CB5E38489EE6F", // MacOS 11 on ARM
"DE5F94EC1EACB75A3D049AE9960A7ACB", // 32-bit Windows on Intel
"C3A45A0F87C7E3A8BDAD6526CFA00ABF", // 32-bit Windows on AMD
"298A2B946AA53102FD025DDD9D273B21", // 64-bit Windows on Intel
@@ -1058,8 +1083,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "503F9957F1FE77F23189507AFC641297", // MacOS 10.14
+
"2192CBAE8336E9611C536D086A1DB531", // MacOS 10.15
+ "35BDD732D1DEAF05CDAA969A37758E09", // MacOS 11 on Intel
+ "0557E7171818C5DC73C175F1F8DC7535", // MacOS 11 on ARM
"B26C14FD53A4027C26FA3A57CB96AF4C", // 32-bit Windows
"96E46C6CF7126E26E58224D5F55850F2", // 64-bit Windows on Intel
"31A39465557533AA9D2E6F4985AFF237" // 64-bit Windows on AMD
@@ -1080,8 +1107,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "503F9957F1FE77F23189507AFC641297", // MacOS 10.14
"2192CBAE8336E9611C536D086A1DB531", // MacOS 10.15
+ "35BDD732D1DEAF05CDAA969A37758E09", // MacOS 11 on Intel
+ "0557E7171818C5DC73C175F1F8DC7535", // MacOS 11 on ARM
"B26C14FD53A4027C26FA3A57CB96AF4C", // 32-bit Windows
"96E46C6CF7126E26E58224D5F55850F2", // 64-bit Windows on Intel
"31A39465557533AA9D2E6F4985AFF237" // 64-bit Windows on AMD
@@ -1102,8 +1130,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "31FCA720DAD2B27CCFD20D52F8E32B2D", // MacOS 10.14
"2EE6CD80BF1B68CE6C7F3C22FC96DB6B", // MacOS 10.15
+ "2689DD85934B68279881E8CA660419CC", // MacOS 11 on Intel
+ "C17ED28BC045C9E5010DF361ADE59515", // MacOS 11 on ARM
"B65D496ADABF3DBCDB24136A9655C295", // 32-bit Windows
"D4A9A3FFC75AC0383B68BADA43E23C3D", // 64-bit Windows on Intel
"EBDEAB5BAC8FBA910667D3664192EA07" // 64-bit Windows on AMD
@@ -1124,8 +1153,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "1D7F6BDC889271BEA523A07DD29BDD37", // MacOS 10.14
"66F3C02A4A016EDB29216A1917D6E54A", // MacOS 10.15
+ "1A4D28ABAD6B47007B7FB06B526DDCAB", // MacOS 11 on Intel
+ "FB38869E1A10C837554BCD0CCDBC660A", // MacOS 11 on ARM
"365D7E965534C8690B4694B27D0CF1C9", // 32-bit Windows on Intel
"BCA45E90590A453EF4DBDCE3950C9CC4", // 32-bit Windows on AMD
"08686D04EFF88BC663C469F2DD224020", // 64-bit Windows on Intel
@@ -1146,8 +1176,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "336CE3C01C6F9D430E6FC947B93820F7", // MacOS 10.14
"EAD8D0B06C252C21C49920DCF360CAAF", // MacOS 10.15
+ "A1FE40A8416A31D87160E49797AAF469", // MacOS 11 on Intel
+ "439F73E38831F4A10B5BD4F91F732A15", // MacOS 11 on ARM
"9A0F6E1984B428F236E1209C13AED4D1", // 32-bit Windows on Intel
"7FABBF9DDF1A16701E57C6DD190485E0", // 32-bit Windows on AMD
"1D0F379EC9C47267569F88729569D407", // 64-bit Windows on Intel
@@ -1168,8 +1199,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "6F97B672D446B19B9370EE3FF4A5DCB5", // MacOS 10.14
"32C00BC525D1101491AE423027AFF09B", // MacOS 10.15
+ "248F69EF80DD2185FD4953BA8FC564C3", // MacOS 11 on Intel
+ "F245069996E7B90FBC76C04515E7DB2C", // MacOS 11 on ARM
"DDA8DBB070EA36F77455A41A2628B6AA", // 32-bit Windows on Intel
"9EBD64EEF7F1CB540012892515A3B0F5", // 32-bit Windows on AMD
"B49EC8F6428A1CDEBA4F0728FC1BF8E5", // 64-bit Windows on Intel
@@ -1190,8 +1222,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "FD0ADBEFE09CE73D7A71768366A029A4", // MacOS 10.14
"B60568438DAB722DF989DA528B5461AC", // MacOS 10.15
+ "56419864ABD22CED84B79209BEFED0E6", // MacOS 11 on Intel
+ "AF4D1BAF1D9D5DFB5F4B6E5D5D50F423", // MacOS 11 on ARM
"5502D724D98AA24FE49FA8AFB0FC63A6", // 32-bit Windows on Intel
"838B5CABD1F8E0077559E4DF504842DC", // 32-bit Windows on AMD
"19940A1BA1D575D9E165584C24A955F4", // 64-bit Windows on Intel
@@ -1212,8 +1245,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "362C1DC415B6ED27B3BB0C43EEC7614A", // Lame 3.99.5 (Ubuntu 16.04)
- "F2BD0875E273743A8908F96DCCFDFC44", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F2BD0875E273743A8908F96DCCFDFC44", // Lame 3.100 (Ubuntu and MacOS)
"7CB68FB7ACC70E8CD928E7DB437B16FE" // Lame 3.100 (Windows)
}
},
@@ -1225,8 +1257,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "3FBE256A1ABC2C530FAAA632929F9AC2", // Lame 3.99.5 (Ubuntu 16.04)
- "1CB5B915B3A72CBE76087E16F96A0A3E", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "1CB5B915B3A72CBE76087E16F96A0A3E", // Lame 3.100 (Ubuntu and MacOS)
"537DE5BA83AAF6542B2E29C74D405EC2" // Lame 3.100 (Windows)
}
},
@@ -1238,8 +1269,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1251,8 +1281,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "F2FFFC7C7001A93C0CC19466D51FC597", // Lame 3.99.5 (Ubuntu 16.04)
- "1454732B48913F2A3898164BA366DA01", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "1454732B48913F2A3898164BA366DA01", // Lame 3.100 (Ubuntu and MacOS)
"D6C2622620E83D442C80AADBE6B45921" // Lame 3.100 (Windows)
}
},
@@ -1264,8 +1293,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "BFF278600EB87215603D727BAA7905BD", // Lame 3.99.5 (Ubuntu 16.04)
- "AD56C3A1ACD627DBDA4B5A28AFE0355D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "AD56C3A1ACD627DBDA4B5A28AFE0355D", // Lame 3.100 (Ubuntu and MacOS)
"5BCC0ED414809596507ECFEDEBD4454D" // Lame 3.100 (Windows)
}
},
@@ -1277,8 +1305,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "C5EC333961C48A9D79B4AB308FF847A2", // Lame 3.99.5 (Ubuntu 16.04)
- "0190385E444B8576C297E1DE837279F1", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "0190385E444B8576C297E1DE837279F1", // Lame 3.100 (Ubuntu and MacOS)
"C43AEE67905D09300EE49323D6330426" // Lame 3.100 (Windows)
}
},
@@ -1290,8 +1317,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "1F4DAA185870D806297B11487E0E76C4", // Lame 3.99.5 (Ubuntu 16.04)
- "3CE431DA62AC5204B9FAE63BD8E2B4A8", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "3CE431DA62AC5204B9FAE63BD8E2B4A8", // Lame 3.100 (Ubuntu and MacOS)
"CC60AD39342F059B4F590988F192FE8D" // Lame 3.100 (Windows)
}
},
@@ -1303,8 +1329,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04)
- "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS)
"EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows)
}
},
@@ -1316,9 +1341,10 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "E73399A30F5497FD72E1AEE0A3E76EAF", // Lame 3.99.5 (Ubuntu 16.04)
- "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
- "A4306E31052226EFD081D5D5FA80F62B" // Lame 3.100 (Windows)
+ "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (MacOS and Legacy .NET on Ubuntu)
+ "C50EBCF351F8931F36802CF099BFF826", // Lame 3.100 (.NET Core 3.0+ on Ubuntu)
+ "A4306E31052226EFD081D5D5FA80F62B", // Lame 3.100 (Legacy .NET on Windows)
+ "6B4C5AF12696064CB7FFC96CEE942994" // Lame 3.100 (.NET Core 3.0+ on Windows)
}
},
@@ -1329,8 +1355,7 @@ public static class EncodeValidFileDataSource
new TestSettingDictionary(),
new[]
{
- "E73399A30F5497FD72E1AEE0A3E76EAF", // Lame 3.99.5 (Ubuntu 16.04)
- "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "FB1B7DECB2C2A2C9CAA1FBB917A81472", // Lame 3.100 (Ubuntu and MacOS)
"A4306E31052226EFD081D5D5FA80F62B" // Lame 3.100 (Windows)
}
},
@@ -1346,8 +1371,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04)
- "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS)
"EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows)
}
},
@@ -1363,8 +1387,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "50C73110274DB00C514B7C5E1AD8B483", // Lame 3.99.5 (Ubuntu 16.04)
- "F69CCDFC32565F97130CBAEABFF0D13C", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F69CCDFC32565F97130CBAEABFF0D13C", // Lame 3.100 (Ubuntu and MacOS)
"BAB786013527E61F4719BBC1F6682C92" // Lame 3.100 (Windows)
}
},
@@ -1380,8 +1403,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04)
- "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS)
"EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows)
}
},
@@ -1397,8 +1419,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "08C1435414AB53A9CE55236823A31452", // Lame 3.99.5 (Ubuntu 16.04)
- "EA1232E970C83FCDDE00D4C1D51F0446", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "EA1232E970C83FCDDE00D4C1D51F0446", // Lame 3.100 (Ubuntu and MacOS)
"B3402C50D24A82004D50DC0172E81BC1" // Lame 3.100 (Windows)
}
},
@@ -1414,8 +1435,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04)
- "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS)
"B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows)
}
},
@@ -1432,8 +1452,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04)
- "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS)
"B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows)
}
},
@@ -1450,8 +1469,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "C4C0E6CE93054389A86B6244BB385036", // Lame 3.99.5 (Ubuntu 16.04)
- "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "388108BB7EE76567E9869F4CE9786CE9", // Lame 3.100 (Ubuntu and MacOS)
"B0AC00BF6DFDA60BAD712FD3F9DFED21" // Lame 3.100 (Windows)
}
},
@@ -1467,8 +1485,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2C075F8F211B7EF63DDF024D641AA7D4", // Lame 3.99.5 (Ubuntu 16.04)
- "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "F737A24D4F60E5B3229689CC15FF10EE", // Lame 3.100 (Ubuntu and MacOS)
"EA2FE7549FB7A1971265FA27B88D0285" // Lame 3.100 (Windows)
}
},
@@ -1484,8 +1501,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "8D6D2321FA9B2AAC5291B6E4C1383D62", // Lame 3.99.5 (Ubuntu 16.04)
- "ED3A9531742553641B112C0D0A41F099", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "ED3A9531742553641B112C0D0A41F099", // Lame 3.100 (Ubuntu and MacOS)
"ADA8A213D1219A92937453878EEA3D18" // Lame 3.100 (Windows)
}
},
@@ -1501,8 +1517,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "7FD72518A2291E0BCFFE6F4993EDDE2C", // Lame 3.99.5 (Ubuntu 16.04)
- "6645726904A761FDF324711CFD21D477", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "6645726904A761FDF324711CFD21D477", // Lame 3.100 (Ubuntu and MacOS)
"47A50D9D488F78F43577BB5BBA0BD783" // Lame 3.100 (Windows)
}
},
@@ -1518,8 +1533,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1535,8 +1549,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1552,8 +1565,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1569,8 +1581,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1586,8 +1597,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "472A428EDB8AD18369EEC4F748F80A59", // Lame 3.99.5 (Ubuntu 16.04)
- "65D418A236D86A8CE33E07A76C98DF08", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "65D418A236D86A8CE33E07A76C98DF08", // Lame 3.100 (Ubuntu and MacOS)
"BB8B33BD589DA49D751C883B8A0FF653" // Lame 3.100 (Windows)
}
},
@@ -1603,8 +1613,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "E539FECE8D80128F11BA73148B92209F", // Lame 3.99.5 (Ubuntu 16.04)
- "5DE234656056DFDAAD30E4DA9FD26366", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "5DE234656056DFDAAD30E4DA9FD26366", // Lame 3.100 (Ubuntu and MacOS)
"3B10B6430B2A823C58F16953F5B33E9C" // Lame 3.100 (Windows)
}
},
@@ -1620,8 +1629,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "30520C93D354F17F637671B99BE75083", // Lame 3.99.5 (Ubuntu 16.04)
- "2BBC83E74AB1A4EB150BC6E1EB9920B5", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "2BBC83E74AB1A4EB150BC6E1EB9920B5", // Lame 3.100 (Ubuntu and MacOS)
"2ACEB0816512B4300D13E9329F76D752" // Lame 3.100 (Windows)
}
},
@@ -1637,8 +1645,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "464C9EE0662B447224805438FAC9D10E", // Lame 3.99.5 (Ubuntu 16.04)
- "BEB5029A08011BCEDFFA99173B763E7F", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "BEB5029A08011BCEDFFA99173B763E7F", // Lame 3.100 (Ubuntu and MacOS)
"E9525D2505684DDB3F9FDDE7B550577E" // Lame 3.100 (Windows)
}
},
@@ -1654,8 +1661,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04)
- "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS)
"54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows)
}
},
@@ -1672,8 +1678,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04)
- "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS)
"54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows)
}
},
@@ -1690,8 +1695,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "5BE352395ADE20729E8F68977C3043C7", // Lame 3.99.5 (Ubuntu 16.04)
- "EACCA2FD6404ACA1AB46027FAE6A667B", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "EACCA2FD6404ACA1AB46027FAE6A667B", // Lame 3.100 (Ubuntu and MacOS)
"AAE7CB7E1E4EAAF5ED19F8B986647298" // Lame 3.100 (Windows)
}
},
@@ -1707,8 +1711,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1725,8 +1728,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "9CD9C9FCE1E42F79EDBAA84BA1B8D8C4", // Lame 3.99.5 (Ubuntu 16.04)
- "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "AD0C6C5DE14F77D2CFEE3F27EEA6B0C6", // Lame 3.100 (Ubuntu and MacOS)
"54E8544993C1E818C72DE5AC00DEABF5" // Lame 3.100 (Windows)
}
},
@@ -1742,8 +1744,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "B46B30D5E331FE64F24C620CFD5C717D", // Lame 3.99.5 (Ubuntu 16.04)
- "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu 18.04 / 20.04 and MacOS)
+ "10E44CEE38E66E9737677BE52E7A286D", // Lame 3.100 (Ubuntu and MacOS)
"EF2FAA877F1DE84DC87015F841103263" // Lame 3.100 (Windows)
}
},
@@ -1759,10 +1760,8 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "59CF1B3F6C08A8185613B375B3846ECD", // Lame 3.99.5 (Legacy .NET on Ubuntu 16.04)
- "6847664CB1935E396A9DB6F12462431F", // Lame 3.99.5 (.NET Core 3.0+ on Ubuntu 16.04)
- "8D5A9BA2D974BCDEFB50A3DA7E134335", // Lame 3.100 (Legacy .NET on Ubuntu 18.04 / 20.04 and MacOS)
- "49CB061F4DE93D7F88D3B656458C7003", // Lame 3.100 (.NET Core 3.0+ on Ubuntu 18.04 / 20.04 and MacOS)
+ "8D5A9BA2D974BCDEFB50A3DA7E134335", // Lame 3.100 (MacOS)
+ "49CB061F4DE93D7F88D3B656458C7003", // Lame 3.100 (Ubuntu)
"3AE3B2DA82CE86ABDA69CFBB06EBDB6E", // Lame 3.100 (Legacy .NET on Windows)
"F3F89801873BDC7D9E403C160051B457" // Lame 3.100 (.NET Core 3.0+ on Windows)
}
@@ -1779,10 +1778,8 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2D46634044D9B9FE8154B27B4E268E64", // Lame 3.99.5 (Legacy .NET on Ubuntu 16.04)
- "F12EE18E94A5FAC3BA8933A8D429B76D", // Lame 3.99.5 (.NET Core 3.0+ on Ubuntu 16.04)
- "94E8EF913253B83D35E760A8C81C18BA", // Lame 3.100 (Legacy .NET on Ubuntu 18.04 / 20.04 and MacOS)
- "E804988EFC1EA58704E6C78B42CE1DF6", // Lame 3.100 (.NET Core 3.0+ on Ubuntu 18.04 / 20.04 and MacOS)
+ "94E8EF913253B83D35E760A8C81C18BA", // Lame 3.100 (MacOS)
+ "E804988EFC1EA58704E6C78B42CE1DF6", // Lame 3.100 (Ubuntu)
"85C1262D46F863436B5C55B71C8C0B31", // Lame 3.100 (Legacy .NET on Windows)
"026C2587049104F0FFF72EB8E49F87AB" // Lame 3.100 (.NET Core 3.0+ on Windows)
}
@@ -1803,7 +1800,8 @@ public static class EncodeValidFileDataSource
new[]
{
"00502CA1BD9BE8137FCF75518D8EC5AC", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "2BEFC8DFC5C86F305FBB1126CC2B2D0D", // Vorbis 1.3.7 (MacOS)
+ "2BEFC8DFC5C86F305FBB1126CC2B2D0D", // Vorbis 1.3.7 (MacOS on Intel)
+ "F187C28A4A37DF469CF96EBC8565CC21", // Vorbis 1.3.7 (MacOS on ARM)
"E6FBBBCE3847BC9C9EB45A89A7D7DDA6" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1820,7 +1818,8 @@ public static class EncodeValidFileDataSource
{
"1A3784BD4B5A5F7324F0F19119EC8829", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"EFC7217481D26BB0828C6E4BE7D2D414", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "E8B8006C5EC2A3D50555B85F367F4922", // Vorbis 1.3.7 (MacOS)
+ "E8B8006C5EC2A3D50555B85F367F4922", // Vorbis 1.3.7 (MacOS on Intel)
+ "4759435E55E2DF81B20F6DD929330EE5", // Vorbis 1.3.7 (MacOS on ARM)
"62C6F8889AA6CBE4A80750EFF33D9FDA", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"3C12BC37F57BB2C4542A92ABD52EA27D" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -1838,7 +1837,8 @@ public static class EncodeValidFileDataSource
{
"F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS)
+ "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel)
+ "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM)
"57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1855,7 +1855,8 @@ public static class EncodeValidFileDataSource
{
"AA03C92A5ED981484D17EA96D87B9331", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"BDCF3199D9F7457000B8D2BDFB757579", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "6D4108CB330E72038EA67B4D7B335AF9", // Vorbis 1.3.7 (MacOS)
+ "6D4108CB330E72038EA67B4D7B335AF9", // Vorbis 1.3.7 (MacOS on Intel)
+ "C1D824314622416360560019BD79F519", // Vorbis 1.3.7 (MacOS on ARM)
"A75601BC8CABA65EADD866211A1EF536" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1872,7 +1873,8 @@ public static class EncodeValidFileDataSource
{
"5C6A8AC9FE704864E8ABC4F1654F65D7", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"F796497F75425D1928C66B88F3F24232", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "239E03B5B24AA65E6335303DF50FB3A2", // Vorbis 1.3.7 (MacOS)
+ "239E03B5B24AA65E6335303DF50FB3A2", // Vorbis 1.3.7 (MacOS on Intel)
+ "2A14B596BBE04A8391249A4276753F10", // Vorbis 1.3.7 (MacOS on ARM)
"5EF3AF9F00AB434F1A0A08482DE2C0DE" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1889,7 +1891,8 @@ public static class EncodeValidFileDataSource
{
"9153B9D26FA0A06AD1515B5660055CA3", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"6DD98044F88A9535595D2B2D16D1A787", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "D48672C42031B4419ADC0F420D503A47", // Vorbis 1.3.7 (MacOS)
+ "D48672C42031B4419ADC0F420D503A47", // Vorbis 1.3.7 (MacOS on Intel)
+ "2C8DB7597ED25C3494B89E5FBCC75508", // Vorbis 1.3.7 (MacOS on ARM)
"DB770934E3E57E832BFFA1C1C85E065F" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1906,7 +1909,8 @@ public static class EncodeValidFileDataSource
{
"9A93109BCB1025791DCA8B63E9EFE3B6", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"3E40EB8AEB86CA5E3C76525E1E03D0FD", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "4721899D9DDAF7394B1A679F753F81CF", // Vorbis 1.3.7 (MacOS)
+ "4721899D9DDAF7394B1A679F753F81CF", // Vorbis 1.3.7 (MacOS on Intel)
+ "856219EF1D9C77A64FE0994B7373C848", // Vorbis 1.3.7 (MacOS on ARM)
"4E69AF464154872795B7AD87BA762870", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"38EB06F6C7055EC41221129C2440E823" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -1924,7 +1928,8 @@ public static class EncodeValidFileDataSource
{
"91ADF87CA8AE3D1669EA65D30BB083D8", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"19AF57343851DC074CDD23039C577BC2", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "F6D78BE21567DD9244848160A2BD3889", // Vorbis 1.3.7 (MacOS)
+ "F6D78BE21567DD9244848160A2BD3889", // Vorbis 1.3.7 (MacOS on Intel)
+ "ED7CAFD6D69FFF643E01219D1E9696E7", // Vorbis 1.3.7 (MacOS on ARM)
"AB097FDBAA6B8516129A17ED1C5BDC21" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1939,10 +1944,12 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "0AA286B6A6896263E9182853FFA2DD52", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
- "8A4B07CF14C30DF85BCBDCD91A597424", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS)
- "F25060DBEAB99B219CDB5EC54D37AD1C" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
+ "67F854EBB448041C99902D721EB029C0", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
+ "BD1777F28C923D15E00840C2725EB14A", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
+ "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS on Intel)
+ "CD4B255CDC3C689C8A2242FDE5F912C7", // Vorbis 1.3.7 (MacOS on ARM)
+ "F25060DBEAB99B219CDB5EC54D37AD1C", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows)
+ "CCC19FAB9648FAF81A46A0A55C0E0F1D" // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows)
}
},
@@ -1958,7 +1965,8 @@ public static class EncodeValidFileDataSource
{
"0AA286B6A6896263E9182853FFA2DD52", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"8A4B07CF14C30DF85BCBDCD91A597424", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS)
+ "AD172F94045E0970A71F8C439EEEA6C9", // Vorbis 1.3.7 (MacOS on Intel)
+ "CD4B255CDC3C689C8A2242FDE5F912C7", // Vorbis 1.3.7 (MacOS on ARM)
"F25060DBEAB99B219CDB5EC54D37AD1C" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1976,7 +1984,8 @@ public static class EncodeValidFileDataSource
{
"ABC75E49AF00624847D66A441068199F", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"8EB74661170103394BB0737E102B978A", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "88C186B7AA3DC3A55CD430FFF8AADCB1", // Vorbis 1.3.7 (MacOS)
+ "88C186B7AA3DC3A55CD430FFF8AADCB1", // Vorbis 1.3.7 (MacOS on Intel)
+ "E7BE0862210C0010541BE605901D4A6D", // Vorbis 1.3.7 (MacOS on ARM)
"8224BAEA06E788DF37EFC01CCCD479C8" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -1994,7 +2003,8 @@ public static class EncodeValidFileDataSource
{
"9B499871B3788480810EB00DDF08054F", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"171C2CA1CDB8C004B15A4D1D6C2C7375", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "74D8326F97A08EBCCC7FF754FE37464F", // Vorbis 1.3.7 (MacOS)
+ "74D8326F97A08EBCCC7FF754FE37464F", // Vorbis 1.3.7 (MacOS on Intel)
+ "9DEA359E04D151021DC995764B8C428E", // Vorbis 1.3.7 (MacOS on ARM)
"C77B164D4E60453D679F35551FD3BF02" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -2013,7 +2023,8 @@ public static class EncodeValidFileDataSource
{
"F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS)
+ "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel)
+ "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM)
"57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -2032,7 +2043,8 @@ public static class EncodeValidFileDataSource
{
"E3B0B6AE0805022FAA88EC50199E9D05", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"DFDCDBBC24E1DC2EE1411CE40D7DF3FE", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "9DEF0BAB12400A25E06EA7CA8C32CCC6", // Vorbis 1.3.7 (MacOS)
+ "9DEF0BAB12400A25E06EA7CA8C32CCC6", // Vorbis 1.3.7 (MacOS on Intel)
+ "483C59AF294602813322BFF28BF554A5", // Vorbis 1.3.7 (MacOS on ARM)
"79C966C3D6728C49723640C0D7B9330B", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"55B7584D23DE2667374ABB9C3C571875" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
@@ -2053,7 +2065,8 @@ public static class EncodeValidFileDataSource
{
"08A958E00D3797F33ABB2F098556DE43", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"EC722CED6079EC8609552686C911FFFE", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "1C21FEE55AC987FE8ACA1865353DC833", // Vorbis 1.3.7 (MacOS)
+ "1C21FEE55AC987FE8ACA1865353DC833", // Vorbis 1.3.7 (MacOS on Intel)
+ "25AEE91A747018638A34DC630D24B3FC", // Vorbis 1.3.7 (MacOS on ARM)
"4B2B694BD0D42994F4A1911FBCB2ABF8", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"9E45D7B37055FD59650839F5BEAB1ED0" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2072,7 +2085,8 @@ public static class EncodeValidFileDataSource
new[]
{
"749518EA6F95A089787DD414855DDBC0", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "68B19B197BDAFA73A45EBF67CD961CA9", // Vorbis 1.3.7 (MacOS)
+ "68B19B197BDAFA73A45EBF67CD961CA9", // Vorbis 1.3.7 (MacOS on Intel)
+ "1CBA6651221C34E9ECDB314A653D05E0", // Vorbis 1.3.7 (MacOS on ARM)
"CAEAE4C932830A8C0A41BC5C79DC80D5", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"53E545072EC0FDA11D100BA1DE9EBC0A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2092,7 +2106,8 @@ public static class EncodeValidFileDataSource
{
"0E233828AF5FD1010188AC4C63DF40BC", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"057D14E2F3F8C9F2FD44EE29222A7BD3", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "D37BB84F2008B1B467D54C618495C4CE", // Vorbis 1.3.7 (MacOS)
+ "D37BB84F2008B1B467D54C618495C4CE", // Vorbis 1.3.7 (MacOS on Intel)
+ "9631DB55B39F79E82ECC05E27EE8928B", // Vorbis 1.3.7 (MacOS on ARM)
"215FA0E953F4BB520A46A3B44B68CC92", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"8E0D0279037DC9DCC286050A2930427A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2111,7 +2126,8 @@ public static class EncodeValidFileDataSource
new[]
{
"70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS)
+ "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel)
+ "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM)
"84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2131,7 +2147,8 @@ public static class EncodeValidFileDataSource
new[]
{
"70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS)
+ "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel)
+ "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM)
"84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2151,7 +2168,8 @@ public static class EncodeValidFileDataSource
new[]
{
"E67F4AB32814D96B1BA65652E5E11E56", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "D23564C9639B7C6490E59163C37B9C83", // Vorbis 1.3.7 (MacOS)
+ "D23564C9639B7C6490E59163C37B9C83", // Vorbis 1.3.7 (MacOS on Intel)
+ "D4974D63DD5B7326BD2143801C3DC610", // Vorbis 1.3.7 (MacOS on ARM)
"C84819FCFA2F25FCDB3E5490E54949B4", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"3FA511E9C941DFB1E61A98418C27F383" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2171,7 +2189,8 @@ public static class EncodeValidFileDataSource
{
"F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS)
+ "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel)
+ "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM)
"57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -2190,7 +2209,8 @@ public static class EncodeValidFileDataSource
new[]
{
"70ECB3839EC4DC7A7ECEA48241E2407D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
- "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS)
+ "577FA5EA45715260728A894592EEAED9", // Vorbis 1.3.7 (MacOS on Intel)
+ "5008E6BEB9E483B5190D778129D5C1C4", // Vorbis 1.3.7 (MacOS on ARM)
"84E389F08890621CF00AF8DD2D7C77DB", // Vorbis 1.3.7 AoTuV + Lancer (Windows on Intel)
"EC75AF6E1F0EFEA7E87ED7B40EFA415A" // Vorbis 1.3.7 AoTuV + Lancer (Windows on AMD)
}
@@ -2210,7 +2230,8 @@ public static class EncodeValidFileDataSource
{
"F041B26255F501A83ECD8C6C7EBCE55D", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
"C2C9FE067F40025DDF41B868350F28A5", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
- "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS)
+ "7757FDE8D2A84D6AA7406F9CA3D840D3", // Vorbis 1.3.7 (MacOS on Intel)
+ "E912A2A65C6272335DF116937A0549A6", // Vorbis 1.3.7 (MacOS on ARM)
"57E0997F13613A8C64306230A031D912" // Vorbis 1.3.7 AoTuV + Lancer (Windows)
}
},
@@ -2227,10 +2248,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "D6BF90169A6D394B23371A5AAF12A69F", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu)
- "39443EC16B23C3B5159CD199E83AD092", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu)
- "3DBC6BF05744F40C44AB21C155138EC9", // Vorbis 1.3.7 (Legacy .NET on MacOS)
- "466D9535B74B53EA088F13FF9720268C", // Vorbis 1.3.7 (.NET Core 3.0+ on MacOS)
+ "39443EC16B23C3B5159CD199E83AD092", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu)
+ "466D9535B74B53EA088F13FF9720268C", // Vorbis 1.3.7 (MacOS on Intel)
+ "A637C5C3C53C717092D518B1F47963D5", // Vorbis 1.3.7 (MacOS on ARM)
"CE264095289A42A1FB038E6F44D5F007", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / Intel)
"E698F1678A8FBC0A6834B6E7230743DA", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / AMD)
"805F62BDFE149898E21C9448F4335BAC", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows / Intel)
@@ -2250,12 +2270,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "069711A99437B82EDC84B24E0E26E08A", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu / Intel)
- "2C7D651E3D4CE104E4E53477F5FB783A", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Ubuntu / AMD)
- "7FF678CC731484D0B16E7FC01301EE7E", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu / Intel)
- "9F4297E686E3A938051AB8C753476521", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Ubuntu / AMD)
- "5CBDD488A7EB6D4C237AFBEFAD89BDFA", // Vorbis 1.3.7 (Legacy .NET on MacOS)
- "488A2980F20619FE0206CFBB1767CBAC", // Vorbis 1.3.7 (.NET Core 3.0+ on MacOS)
+ "7FF678CC731484D0B16E7FC01301EE7E", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on Intel)
+ "9F4297E686E3A938051AB8C753476521", // Vorbis 1.3.7 AoTuV + Lancer (Ubuntu on AMD)
+ "488A2980F20619FE0206CFBB1767CBAC", // Vorbis 1.3.7 (MacOS on Intel)
+ "8F7096C15F10B9EB3CA0DFA0E044877E", // Vorbis 1.3.7 (MacOS on ARM)
"4BCFD0F13F55B657F36304BBE3F41D39", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / Intel)
"F4C820158442E1ECEEBBCEFF42855E5F", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows / AMD)
"34BA39848B7D78D7FE1D2B30999DF6A9", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows / Intel)
@@ -2277,9 +2295,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "D085A7142C47B6898B3CCB6C5EDCBA55", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "D085A7142C47B6898B3CCB6C5EDCBA55", // Opus 1.1.2 (Ubuntu 18.04)
"5E705C21EEB25418F69F54E33CF65156", // Opus 1.3.1 (Ubuntu 20.04)
- "2D31A0D707D3A9AB865DB00095EB08AE", // Opus 1.3.1 (MacOS)
+ "2D31A0D707D3A9AB865DB00095EB08AE", // Opus 1.3.1 (MacOS on Intel)
+ "FB641D1DA3D800E22BD22C7983D83325", // Opus 1.3.1 (MacOS on ARM)
"8BB7F2763D133BD534AE9C20104AFA2E", // Opus 1.3.1 (32-bit Windows on Intel)
"6FB30E2C70A48F63A6596FCDE747E47A", // Opus 1.3.1 (32-bit Windows on AMD)
"05B065E87CE35617089DC8A86ED5AD19", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2297,9 +2316,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "46B412FA052C97474B60DDDCF2CA8052", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "46B412FA052C97474B60DDDCF2CA8052", // Opus 1.1.2 (Ubuntu 18.04)
"E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04)
- "C22E87F617B51970785E9A4C43C9FC48", // Opus 1.3.1 (MacOS)
+ "C22E87F617B51970785E9A4C43C9FC48", // Opus 1.3.1 (MacOS on Intel)
+ "86C499288EADAAB469F3E7FA63628AD1", // Opus 1.3.1 (MacOS on ARM)
"BE719CEBED7270CD6DC580007E20D5F2", // Opus 1.3.1 (32-bit Windows on Intel)
"B68DA72E32DD0B6A89138679E8716876", // Opus 1.3.1 (32-bit Windows on AMD)
"C8C92433A8093BB8C7AE3AE6F84653B3" // Opus 1.3.1 (64-bit Windows)
@@ -2316,9 +2336,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04)
"9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04)
- "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS)
+ "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel)
+ "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM)
"3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel)
"63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD)
"F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2336,11 +2357,11 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "C9024DED60E2039752C7B372DFFC7149", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (Ubuntu 20.04 and MacOS)
+ "C9024DED60E2039752C7B372DFFC7149", // Opus 1.1.2 (Ubuntu 18.04)
+ "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (Windows, Ubuntu 20.04 and MacOS on Intel)
+ "5074AE45A08E36CAF8FC0AB1B50F117C", // Opus 1.3.1 (MacOS on ARM)
"3C5EF551E97AEE3A916F1B39BCD5D3C2", // Opus 1.3.1 (32-bit Windows on Intel)
"B9B4ECB9629E3DCA58EC09AC5560A1F9", // Opus 1.3.1 (32-bit Windows on AMD)
- "BD5F090F921BCC80F05FCBF5725D8E0E", // Opus 1.3.1 (64-bit Windows on Intel)
"FDE97144EB743A401CD274613B32D085" // Opus 1.3.1 (64-bit Windows on AMD)
}
},
@@ -2355,9 +2376,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "22AA639A1AA309F9C343F8D8EBDB1B6D", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "22AA639A1AA309F9C343F8D8EBDB1B6D", // Opus 1.1.2 (Ubuntu 18.04)
"F7CB34EAF50E121D9474AE51E43BBB5B", // Opus 1.3.1 (Ubuntu 20.04)
- "8A8FA9C452D9EBBCF8554EE3E270A538", // Opus 1.3.1 (MacOS)
+ "8A8FA9C452D9EBBCF8554EE3E270A538", // Opus 1.3.1 (MacOS on Intel)
+ "FC74891978B6213CDF3807C6D0130E82", // Opus 1.3.1 (MacOS on ARM)
"9E31F9F58A41EA377740E7AC43E57939", // Opus 1.3.1 (32-bit Windows on Intel)
"6D4CD77579FC6041A28997D9A409DCB4", // Opus 1.3.1 (32-bit Windows on AMD)
"D0FC8A33EE164AC29D79435A4ED779B1", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2375,8 +2397,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "64C832F3C0D8A175084FB138D0A3525D", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "CD27FFC8398F52FB2F5984085D2215AC", // Opus 1.3.1 (Ubuntu 20.04 and MacOS)
+ "64C832F3C0D8A175084FB138D0A3525D", // Opus 1.1.2 (Ubuntu 18.04)
+ "CD27FFC8398F52FB2F5984085D2215AC", // Opus 1.3.1 (MacOS and Ubuntu 20.04 on Intel)
+ "2018DEFDE09A503E0734CD57B0E19FC4", // Opus 1.3.1 (Ubuntu 20.04 on AMD)
+ "4190DC99A4B49887AA3E5BC9E15DC1C8", // Opus 1.3.1 (MacOS on ARM)
"F06773DFABF471946AF2B3D55E881795", // Opus 1.3.1 (32-bit Windows on Intel)
"B540644D968E93C4EF7BA2BE7C84A5AA", // Opus 1.3.1 (32-bit Windows on AMD)
"AA2881B010E43964FC90B6DB03BCA969", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2394,8 +2418,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "852C615283FA436C87460A6DD0A5ABE5", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "9ED53495B32D47496C1C88B75D2FEF5F", // Opus 1.3.1 (Ubuntu 20.04 and MacOS)
+ "852C615283FA436C87460A6DD0A5ABE5", // Opus 1.1.2 (Ubuntu 18.04)
+ "9ED53495B32D47496C1C88B75D2FEF5F", // Opus 1.3.1 (MacOS and Ubuntu 20.04 on Intel)
+ "EF85B330CBC8A8931C2827A81F2E1532", // Opus 1.3.1 (Ubuntu 20.04 on AMD)
+ "5A928AED6645BDF1A8CBA3C2EEB7E90F", // Opus 1.3.1 (MacOS on ARM)
"86E35D927296E4954BAE384D4B28F247", // Opus 1.3.1 (32-bit Windows on Intel)
"84171D7E57590C886785D15C4E89D14E", // Opus 1.3.1 (32-bit Windows on AMD)
"143CFA3D5684C47EC62A5BEE19B59493", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2413,9 +2439,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "1B7298B4EA52190612430642D2CD0694", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "1B7298B4EA52190612430642D2CD0694", // Opus 1.1.2 (Ubuntu 18.04)
"5A2C444BCD2F8D898E369DFA78D2336D", // Opus 1.3.1 (Ubuntu 20.04)
- "5501D7D9730B0722C310D5263AFBEB77", // Opus 1.3.1 (MacOS)
+ "5501D7D9730B0722C310D5263AFBEB77", // Opus 1.3.1 (MacOS on Intel)
+ "CB28DA52EF8451F944D8ED642D438292", // Opus 1.3.1 (MacOS on ARM)
"ED5EA746CA5182DE57E0D25695D17F4E", // Opus 1.3.1 (32-bit Windows on Intel)
"F6AE6DD4A2E565AD94622055C7DD2DD6", // Opus 1.3.1 (32-bit Windows on AMD)
"E59BFB7E77545D36723E7B8EB5AF1B48", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2433,13 +2460,18 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04)
- "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS)
+ "E497EF951D153E53CD3B2C3D84E5851C", // Opus 1.1.2 (Ubuntu 18.04)
+ "F11DE8AF370B04150CBF6E08FA1E2045", // Opus 1.3.1 (Ubuntu 20.04 on Intel)
+ "AFE05CB9E10ECE0CE4A267B01E91AA7C", // Opus 1.3.1 (Ubuntu 20.04 on AMD)
+ "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS on Intel)
+ "2D7ABAB485382CFA8AD0DA8437304185", // Opus 1.3.1 (MacOS on ARM)
"17D464F4D94C17DD99AC0017BAB9228F", // Opus 1.3.1 (32-bit Windows on Intel)
- "37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (32-bit Windows on AMD)
- "B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (64-bit Windows on Intel)
- "285F9F24FA0B405F86C61AC20BE81333" // Opus 1.3.1 (64-bit Windows on AMD)
+ "37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (Legacy .NET on 32-bit Windows / AMD)
+ "B6CB931B6AE4304D77B9D327A330EF68", // Opus 1.3.1 (.NET Core 3.0+ on 32-bit Windows / AMD)
+ "B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (Legacy .NET on 64-bit Windows / Intel)
+ "58FBBA36C5E504D4BD93C427C369DB0A", // Opus 1.3.1 (.NET Core 3.0+ on 64-bit Windows / Intel)
+ "285F9F24FA0B405F86C61AC20BE81333", // Opus 1.3.1 (Legacy .NET on 64-bit Windows / AMD)
+ "634496B42A479B6EA9CDD37D2EC96823" // Opus 1.3.1 (.NET Core 3.0+ on 64-bit Windows / AMD)
}
},
@@ -2453,9 +2485,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "476D30594189602BF6E4755E990D0615", // Opus 1.1.2 (Ubuntu 18.04)
"E170CC2F31A402071E26892426AEC65B", // Opus 1.3.1 (Ubuntu 20.04)
- "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS)
+ "0ADBC105EA51C62CB1ED53B978B33415", // Opus 1.3.1 (MacOS on Intel)
+ "2D7ABAB485382CFA8AD0DA8437304185", // Opus 1.3.1 (MacOS on ARM)
"17D464F4D94C17DD99AC0017BAB9228F", // Opus 1.3.1 (32-bit Windows on Intel)
"37FAD87A9C5A0E42FEEBE2B5CC5547DF", // Opus 1.3.1 (32-bit Windows on AMD)
"B52AE38B2D30A7ADE63492CCB2F000EC", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2474,9 +2507,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "DE6D30BCAC9DA6340DA28542E75C5E01", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "DE6D30BCAC9DA6340DA28542E75C5E01", // Opus 1.1.2 (Ubuntu 18.04)
"503CA160DEC071D27F058FAE56273C29", // Opus 1.3.1 (Ubuntu 20.04)
- "CDE65307AACEA4F40F22FF925622D14E", // Opus 1.3.1 (MacOS)
+ "CDE65307AACEA4F40F22FF925622D14E", // Opus 1.3.1 (MacOS on Intel)
+ "F2FDC3B2D196D551919F3FC85120DA15", // Opus 1.3.1 (MacOS on ARM)
"0E458849DBB876C84D23FA8B1AE58E7D", // Opus 1.3.1 (32-bit Windows on Intel)
"7BB78CF68981EC0D8A4FF3006F9D56D9", // Opus 1.3.1 (32-bit Windows on AMD)
"3804E9A98DDBD216A3AED6F638C5644E", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2495,9 +2529,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "D0DB0EE3ABC3950E3009663461F631DB", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "D0DB0EE3ABC3950E3009663461F631DB", // Opus 1.1.2 (Ubuntu 18.04)
"E83E5634833A567959243B09B9AF666B", // Opus 1.3.1 (Ubuntu 20.04)
- "3AA89123958BA0DF1611539BC909DD0B", // Opus 1.3.1 (MacOS)
+ "3AA89123958BA0DF1611539BC909DD0B", // Opus 1.3.1 (MacOS on Intel)
+ "A7F53EB258E068E6B9B6C6A1D756E342", // Opus 1.3.1 (MacOS on ARM)
"049CE3FC2614A25BDE9E311CCEC4E995", // Opus 1.3.1 (32-bit Windows on Intel)
"2D4B0717D5E4BA6494A5A50131FABB2E", // Opus 1.3.1 (32-bit Windows on AMD)
"5480E19A91B0DC0891094B43168FA839", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2517,7 +2552,7 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "7556A3E6FF92CEF2D0ECD5654322DEAB", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "7556A3E6FF92CEF2D0ECD5654322DEAB", // Opus 1.1.2 (Ubuntu 18.04)
"1F81AFD1976BAB56F31A4599A8AD8FF1", // Opus 1.3.1 (Ubuntu 20.04 and MacOS)
"FC89452B5F0EA49E3D738CE67FBF8B1C", // Opus 1.3.1 (32-bit Windows)
"D345EE9B84E231E3ACB17C7AC0972154" // Opus 1.3.1 (64-bit Windows)
@@ -2536,9 +2571,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "C031F42E8AF2D482E302264E132502E1", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "C031F42E8AF2D482E302264E132502E1", // Opus 1.1.2 (Ubuntu 18.04)
"2DBEDA9428C2522EFF60481B5446FA47", // Opus 1.3.1 (Ubuntu 20.04)
- "785D39E686216F4958B8103B62E9E321", // Opus 1.3.1 (MacOS)
+ "785D39E686216F4958B8103B62E9E321", // Opus 1.3.1 (MacOS on Intel)
+ "4F1E3A4F58E62CB2F9DF5D0C3AED689D", // Opus 1.3.1 (MacOS on ARM)
"6B422669A0FCB242E0E15204F5FDCC47", // Opus 1.3.1 (32-bit Windows on Intel)
"DFF654F2AF639F992FA9BC378F80FE20", // Opus 1.3.1 (32-bit Windows on AMD)
"4A9455EB95B3C9CBCB2538D0C888267D", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2558,9 +2594,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04)
"9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04)
- "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS)
+ "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel)
+ "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM)
"3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel)
"63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD)
"F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2580,9 +2617,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "940955E239CF3D26B417F6B532EBC726", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "940955E239CF3D26B417F6B532EBC726", // Opus 1.1.2 (Ubuntu 18.04)
"713E85741D7499561FA4424B5EF74EE7", // Opus 1.3.1 (Ubuntu 20.04)
- "B98AC6052E465C5A226D8D2905B535EC", // Opus 1.3.1 (MacOS)
+ "B98AC6052E465C5A226D8D2905B535EC", // Opus 1.3.1 (MacOS on Intel)
+ "532F344E999193C4F59D1CDBF511C7DE", // Opus 1.3.1 (MacOS on ARM)
"38E90E75D928371AB9C1CFF243C731B4", // Opus 1.3.1 (32-bit Windows on Intel)
"7DB85D28D9AEF13C7D8BAB7578EC3019", // Opus 1.3.1 (32-bit Windows on AMD)
"E0219613A0740FACAAC162D7B9FD0517", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2602,9 +2640,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "9533FF6E154EE45B8ED522C3B5A25865", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "9533FF6E154EE45B8ED522C3B5A25865", // Opus 1.1.2 (Ubuntu 18.04)
"9948DAE5FCE1CF7D6298C293E3D71B0F", // Opus 1.3.1 (Ubuntu 20.04)
- "687B2402BF33EDB0EAD683235E309BC8", // Opus 1.3.1 (MacOS)
+ "687B2402BF33EDB0EAD683235E309BC8", // Opus 1.3.1 (MacOS on Intel)
+ "D9E874A3511506C2A8021FF77DEAED23", // Opus 1.3.1 (MacOS on ARM)
"0A4FC1F40FD76797222FC8CACCA83AD9", // Opus 1.3.1 (32-bit Windows on Intel)
"15F2F64E2FD60C135DE87B563DA028DF", // Opus 1.3.1 (32-bit Windows on AMD)
"F3CF4988FB774A297832863156B8ED8D", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2624,8 +2663,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows / Intel)
+ "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 18.04)
+ "B1D166A87EF5F03FDC80E8571B9FC70E", // Opus 1.3.1 (MacOS on ARM)
+ "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (MacOS, Ubuntu 20.04 and Windows on Intel)
"BD1629D7E9272CAA8AEAC20FD576B7C6" // Opus 1.3.1 (Windows on AMD)
}
},
@@ -2643,8 +2683,9 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows / Intel)
+ "201BD7EF36658DB3DC9658C67E9AF71E", // Opus 1.1.2 (Ubuntu 18.04)
+ "B1D166A87EF5F03FDC80E8571B9FC70E", // Opus 1.3.1 (MacOS on ARM)
+ "8FC7BCF02EDB42E9785797FD2C9A71D6", // Opus 1.3.1 (MacOS, Ubuntu 20.04 and Windows on Intel)
"BD1629D7E9272CAA8AEAC20FD576B7C6" // Opus 1.3.1 (Windows on AMD)
}
},
@@ -2662,9 +2703,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "8AA73947B00AABCB3602F660E69263C5", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "8AA73947B00AABCB3602F660E69263C5", // Opus 1.1.2 (Ubuntu 18.04)
"56A43E329A39A3CC568348116F5134F3", // Opus 1.3.1 (Ubuntu 20.04)
- "84D72BBEF86EA7611518CF2862FC94BD", // Opus 1.3.1 (MacOS)
+ "84D72BBEF86EA7611518CF2862FC94BD", // Opus 1.3.1 (MacOS on Intel)
+ "3FBE634F53A90A6E5E26325A49BD20E5", // Opus 1.3.1 (MacOS on ARM)
"F7583CA097F3B8D7EE50587DB0C9B883", // Opus 1.3.1 (32-bit Windows on Intel)
"CE832392AA59C20C39D1C246A96E31AC", // Opus 1.3.1 (32-bit Windows on AMD)
"0C29F2F289C7817FC177201ECCA21BC9", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2684,9 +2726,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "94AADBE44ECF34AF98982F17BCCE7C97", // Opus 1.1.2 (Ubuntu 18.04)
"9DA2DC35F1B9FBC9FAEF343788BB9E41", // Opus 1.3.1 (Ubuntu 20.04)
- "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS)
+ "0C6BF7ECB9F757DB8F8AF485137BD2C8", // Opus 1.3.1 (MacOS on Intel)
+ "DF1CE487259E093896FB4BDB74A6B1E3", // Opus 1.3.1 (MacOS on ARM)
"3CAB512976D0D62B45E2C9239B19735D", // Opus 1.3.1 (32-bit Windows on Intel)
"63CCEA9D4CF6847E5D6D29245372E93D", // Opus 1.3.1 (32-bit Windows on AMD)
"F82CC6FE2C86F5E7CD4A4F8F634E2DE9", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2706,9 +2749,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "945B2B47707ED2C2DC2D30BD4AF75A34", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "945B2B47707ED2C2DC2D30BD4AF75A34", // Opus 1.1.2 (Ubuntu 18.04)
"1CE1BF9EA0D643C0CDB9B8C8A1492B58", // Opus 1.3.1 (Ubuntu 20.04)
- "B6029E9FC954A8722A1B10700F80EA19", // Opus 1.3.1 (MacOS)
+ "B6029E9FC954A8722A1B10700F80EA19", // Opus 1.3.1 (MacOS on Intel)
+ "A9E1172F6E94329BC82ACAD85B83F3F0", // Opus 1.3.1 (MacOS on ARM)
"2B5AD4B688767C703DC63A83C3F96074", // Opus 1.3.1 (32-bit Windows on Intel)
"CE9599BAE9112521A52EC0749041D72C", // Opus 1.3.1 (32-bit Windows on AMD)
"AC629D5D7F3B004E75BE9F85D4B1DBD3", // Opus 1.3.1 (64-bit Windows on Intel)
@@ -2728,9 +2772,10 @@ public static class EncodeValidFileDataSource
},
new[]
{
- "2D5A8223552F6A731413BD1DD181040A", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "2D5A8223552F6A731413BD1DD181040A", // Opus 1.1.2 (Ubuntu 18.04)
"5B7586B7F6F2DFCCA28E3A1D4C75690A", // Opus 1.3.1 (Ubuntu 20.04)
- "EF6A93BC1F10A15E5F45255F36E90F3A", // Opus 1.3.1 (MacOS)
+ "EF6A93BC1F10A15E5F45255F36E90F3A", // Opus 1.3.1 (MacOS on Intel)
+ "8AF396D9A1F7648C2FDC7DFCC1AF35F6", // Opus 1.3.1 (MacOS on ARM)
"509504BD68BD34AC79FECEA9073BAFB3", // Opus 1.3.1 (32-bit Windows on Intel)
"0AF4C3DCD598108BEA2671C1B784A10F", // Opus 1.3.1 (32-bit Windows on AMD)
"45911349F86066B37C0DBC7D6AC43890", // Opus 1.3.1 (64-bit Windows on Intel)
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs
index 6c00b01a..66699055 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataSources/SaveMetadataValidFileSource.cs
@@ -56,7 +56,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "4707C81E467497975458C152234AD13F", // FLAC 1.3.1 (Ubuntu 16.04)
"79528DB2721970437C6D8877F655E273", // FLAC 1.3.2 (Ubuntu 18.04)
"BAE0A61EB5C4912A4793C8B259ED5633" // FLAC 1.3.3
}
@@ -88,7 +87,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "8233F3397D5097D50A061504D10AA644", // FLAC 1.3.1 (Ubuntu 16.04)
"B903A8E9B17014CDDB563A3CC73AB7F5", // FLAC 1.3.2 (Ubuntu 18.04)
"FDB702CF53676594BDD9FBEC77F154A3" // FLAC 1.3.3
}
@@ -120,7 +118,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "8233F3397D5097D50A061504D10AA644", // FLAC 1.3.1 (Ubuntu 16.04)
"B903A8E9B17014CDDB563A3CC73AB7F5", // FLAC 1.3.2 (Ubuntu 18.04)
"FDB702CF53676594BDD9FBEC77F154A3" // FLAC 1.3.3
}
@@ -152,7 +149,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "5449B08E4A9CEB9D86B3BEA443F02662", // FLAC 1.3.1 (Ubuntu 16.04)
"C830D5913F20AEF93853E1A01462708D", // FLAC 1.3.2 (Ubuntu 18.04)
"A05D916A5C03E9599CBC9A9F6989FDB0" // FLAC 1.3.3
}
@@ -184,7 +180,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "34B8ED1508B895CE54E48035C2F8F459", // FLAC 1.3.1 (Ubuntu 16.04)
"27C19A7309E49A5B07C0AD932A7B2875", // FLAC 1.3.2 (Ubuntu 18.04)
"0917BADDD895CCFD370BB222AF216E7B" // FLAC 1.3.3
}
@@ -217,7 +212,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "4707C81E467497975458C152234AD13F", // FLAC 1.3.1 (Ubuntu 16.04)
"79528DB2721970437C6D8877F655E273", // FLAC 1.3.2 (Ubuntu 18.04)
"BAE0A61EB5C4912A4793C8B259ED5633" // FLAC 1.3.3
}
@@ -253,7 +247,6 @@ public static class SaveMetadataValidFileSource
},
new[]
{
- "C6F468D2AFF114854647623FEC1B8F8F", // FLAC 1.3.1 (Ubuntu 16.04)
"4D1C0B9CD6909E81C2D5BD38A6F7CF4B", // FLAC 1.3.2 (Ubuntu 18.04)
"41092DD891ABD71749834EAF571D30D5" // FLAC 1.3.3
}
@@ -289,7 +282,6 @@ public static class SaveMetadataValidFileSource
},
new[]
{
- "C8D99C071580D2C34E42B815B680A1CA", // FLAC 1.3.1 (Ubuntu 16.04)
"D10242261CDBC3FF2D9BEB2C232DC1F7", // FLAC 1.3.2 (Ubuntu 18.04)
"D6EF71E33501C350CD5378D55BC25D8C" // FLAC 1.3.3
}
@@ -304,7 +296,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "D858D62481CDF540B881F2151C0ABB80", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
"734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
}
@@ -319,7 +310,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "D858D62481CDF540B881F2151C0ABB80", // FLAC 1.3.1 (Ubuntu 16.04)
"3983A342A074A7E8871FEF4FBE0AC73F", // FLAC 1.3.2 (Ubuntu 18.04)
"734954C2D360CD6D6C4F7FE23F6970AF" // FLAC 1.3.3
}
@@ -334,7 +324,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "86C7A296259858EC6063A3B0740D18CB", // FLAC 1.3.1 (Ubuntu 16.04)
"8E3D1A13C4F9BE314C0AD61892472AC6", // FLAC 1.3.2 (Ubuntu 18.04)
"1399992DC07E38EBCD3F5DB1AF48B8C3" // FLAC 1.3.3
}
@@ -349,7 +338,6 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "CB279829CACD8B102E3288CA3360BC52", // FLAC 1.3.1 (Ubuntu 16.04)
"F489D849B9ACD653B8986D45C487742E", // FLAC 1.3.2 (Ubuntu 18.04)
"BB1A252DAA1100EA9D0B4658DE863A86" // FLAC 1.3.3
}
@@ -682,7 +670,8 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "679251C0E61FC8EB10286525FE64F60F"
+ "679251C0E61FC8EB10286525FE64F60F", // Legacy .NET
+ "D0FF67DA066EAEABBF8182052A1375AE" // .NET Core 3.0+
}
},
@@ -1155,7 +1144,8 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "1BF5C0A314A84C08A71E620ECFAC27FF"
+ "1BF5C0A314A84C08A71E620ECFAC27FF", // Legacy .NET
+ "10BE511C440AC14D8613B8A37E75882A" // .NET Core 3.0+
}
},
@@ -1401,7 +1391,8 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "CA3A8F152FFC10FE460E6DBD2DB2F090", // Vorbis 1.3.7 AoTuV + Lancer (Windows and Ubuntu)
+ "CA3A8F152FFC10FE460E6DBD2DB2F090", // Vorbis 1.3.7 AoTuV + Lancer (Legacy .NET on Windows and Ubuntu)
+ "426B4231FC7600779D8FE877B15D54CB", // Vorbis 1.3.7 AoTuV + Lancer (.NET Core 3.0+ on Windows and Ubuntu)
"36C4695F1C9FBD9E018E98FB4A132D83" // Vorbis 1.3.7 (MacOS)
}
},
@@ -1447,7 +1438,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "9A53EDE65A60F0C1684D16744E33DCFC", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "9A53EDE65A60F0C1684D16744E33DCFC", // Opus 1.1.2 (Ubuntu 18.04)
"D22BBFDDCB298A427057253C4E833057" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1474,7 +1465,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 18.04)
"B181BB7AF0A3E37C3A262B942FD197FC" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1501,7 +1492,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "4A397361C11EC1FE03A43E176E673856", // Opus 1.1.2 (Ubuntu 18.04)
"B181BB7AF0A3E37C3A262B942FD197FC" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1528,7 +1519,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "666B7D0315E667A3D6A943294A32BE1F", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "666B7D0315E667A3D6A943294A32BE1F", // Opus 1.1.2 (Ubuntu 18.04)
"166F1DD0C71E2CCCF226157A34791E1B" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1555,7 +1546,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "910BF18671BC79D50FB8B9EAE8E4F0DA", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "910BF18671BC79D50FB8B9EAE8E4F0DA", // Opus 1.1.2 (Ubuntu 18.04)
"8EA7FC13A2F214CADF3A1D447EF5CB65" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1583,7 +1574,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "86AD4DC307C9523B2C1213FE2359FDEA", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "86AD4DC307C9523B2C1213FE2359FDEA", // Opus 1.1.2 (Ubuntu 18.04)
"BB50765E7DB79BDEADFC81E771101FD7" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1597,7 +1588,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "C2351EF6BFA1D50983183ADC6136FB9C", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "C2351EF6BFA1D50983183ADC6136FB9C", // Opus 1.1.2 (Ubuntu 18.04)
"367DB09F8408583579F918061FCB6322" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1611,7 +1602,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "CEF9DD8611EBFEF035761B450D816E95", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "CEF9DD8611EBFEF035761B450D816E95", // Opus 1.1.2 (Ubuntu 18.04)
"22D33DFB735C5B7805AB26C7A04CDA86" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
},
@@ -1625,8 +1616,10 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
- "CABF32D411EA5FA9458A79B6DC2C2D69" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
+ "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Legacy .NET on Ubuntu 18.04)
+ "F4AFFDC5F5050965D5C62BB2C7F3D346", // Opus 1.1.2 (.NET Core 3.0+ on Ubuntu 18.04)
+ "CABF32D411EA5FA9458A79B6DC2C2D69", // Opus 1.3.1 (MacOS and legacy .NET on Ubuntu 20.04, Windows)
+ "EC76B2A5E0B74A2E142BFD255C52F13E" // Opus 1.3.1 (.NET Core 3.0+ on Ubuntu 20.04 and Windows)
}
},
@@ -1639,7 +1632,7 @@ public static class SaveMetadataValidFileSource
new TestSettingDictionary(),
new[]
{
- "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 16.04 and 18.04)
+ "1636B4EF09C4EF2B16135E9C2670473B", // Opus 1.1.2 (Ubuntu 18.04)
"CABF32D411EA5FA9458A79B6DC2C2D69" // Opus 1.3.1 (Ubuntu 20.04, MacOS and Windows)
}
}
diff --git a/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs b/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs
index 2d8754c4..fdfe345c 100644
--- a/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs
+++ b/AudioWorks/tests/AudioWorks.Api.Tests/DataTypes/TestAudioInfo.cs
@@ -19,7 +19,7 @@ namespace AudioWorks.Api.Tests.DataTypes
{
public sealed class TestAudioInfo : IXunitSerializable
{
-#if NET462 || NETCOREAPP2_1 || NETCOREAPP3_1
+#if NET462 || NETCOREAPP3_1
public string Format { get; set; } = string.Empty;
public int Channels { get; set; }
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj b/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj
index f7d13635..d8b2742b 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj
@@ -1,28 +1,28 @@
- net5.0;netcoreapp3.1;net462
- net5.0;netcoreapp3.1
+ net6.0;netcoreapp3.1;net462
+ net6.0;netcoreapp3.1
false
true
false
-
-
+
+
-
-
+
+
-
+
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs
index 788dd124..142082e9 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ClearAudioMetadataTests.cs
@@ -59,7 +59,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1 b/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1
index ef389964..6f9d2dd7 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/CopyModule.ps1
@@ -36,118 +36,216 @@ Copy-Item -Path $projectOutputDir -Destination $OutputRoot -Recurse
Write-Host "Copying debugging symbols from $ModuleProjectRoot to $OutputRoot."
Join-Path -Path $ModuleProjectRoot -ChildPath bin | Join-Path -ChildPath $Configuration | Get-ChildItem -Filter *.pdb -Recurse | % { Copy-Item $_.FullName -Destination $(Join-Path $outputDir -ChildPath $_.Directory.Name) }
# SIG # Begin signature block
-# MIIVSAYJKoZIhvcNAQcCoIIVOTCCFTUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
-# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
-# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAPxj6AJ9iX/rVc
-# b9qw+5LSBmeTPb6DXumrw882SRX9NqCCDwowggTcMIIDxKADAgECAhEA/mfk8Vok
-# 48YNVHygIMJ2cDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UE
-# ChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-# cnRpZmljYXRpb24gQXV0aG9yaXR5MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBO
-# ZXR3b3JrIENBMB4XDTE2MDMwODEzMTA0M1oXDTI3MDUzMDEzMTA0M1owdzELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwS
-# Q2VydHVtIEVWIFRTQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-# AQEAv1eLvJEzWi5XMX8lV/RbU1hqJarogSDMDR1HOHAaoxY3nbdEdLUagST69RhK
-# OEsLoLrFvzRv6oz1nUIa0DGoVt2oJQ60PCXFrMbLXOOAkuqjry0AQEB80kEoHysI
-# 6FHQXYlwImxpdtB2EjwuSwcpJun4AeHQ5Sj2JMMV+qaQhHSFXIMsDsTaeEmUah0k
-# hpfpIsDGDDXgdDKqPbsB2H7ME0wgx5UtSfbxLRe8xin3+FV2nH0V3N7hQpWTYJn3
-# Q8WUQiG9mKwcs2bc/XhgRD89xJVpZ+5hy9rQueZ296E/BPTT53GvIQJeEdpTpKa1
-# kXjZkBFbtKHup24K2XOkOAVSIwIDAQABo4IBWjCCAVYwDAYDVR0TAQH/BAIwADAd
-# BgNVHQ4EFgQU8zXKjkYIDTmN30HHM25k5BY7mCswHwYDVR0jBBgwFoAUCHbNywf/
-# JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-# AQUFBwMIMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2VydHVtLnBsL2N0
-# bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJj
-# YS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9yZXBvc2l0b3J5
-# LmNlcnR1bS5wbC9jdG5jYS5jZXIwQAYDVR0gBDkwNzA1BgsqhGgBhvZ3AgUBCzAm
-# MCQGCCsGAQUFBwIBFhhodHRwOi8vd3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcN
-# AQELBQADggEBAMp05Di9MskaPPorWMVXLTVTC5DeLQWy8TMyQBuW/yJFhzmuDPAZ
-# zsHQMkQaMwyA6z0zK3x5NE7GgUQ0WFa6OQ3w5LMDrDd1wHrrt0D2mvx+gG2ptFWJ
-# PZhIylb0VaQu6eHTfrU4kZXEz7umHnVrVlCbbqfr0ZzhcSDV1aZYq+HlKV2B8QS1
-# 5BtkQqE4cT17c2TGadQiMJawJMMCWxGoPDRie2dn4UaGV3zoip+Quzhb2bWJ6gMo
-# 2423WwdtMruHf9wmzi5e6Nar2+am0OIZAhL5oNs+nVLETL1Xhe147cGWRM1GsM5l
-# 1VdyOiTGEOGwc8SPWoOs9sZylPlyd/8B1SEwggTeMIIDxqADAgECAhBrMmoPAyjT
-# eh1TC/0jvUjiMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-# ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
-# dGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5l
-# dHdvcmsgQ0EwHhcNMTUxMDI5MTEzMDI5WhcNMjcwNjA5MTEzMDI5WjCBgDELMAkG
-# A1UEBhMCUEwxIjAgBgNVBAoMGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAl
-# BgNVBAsMHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAwwb
-# Q2VydHVtIENvZGUgU2lnbmluZyBDQSBTSEEyMIIBIjANBgkqhkiG9w0BAQEFAAOC
-# AQ8AMIIBCgKCAQEAt9uo2MjjvNrag7q5v9bVV1NBt0C6FwxEldTpZjt/tL6Qo5QJ
-# pa0hIBeARrRDJj6OSxpk7A5AMkP8gp//Si3qlN1aETaLYe/sFtRJA9jnXcNlW/JO
-# CyvDwVP6QC3CqzMkBYFwfsiHTJ/RgMIYew4UvU4DQ8soSLAt5jbfGz2Lw4ydN57h
-# BtclUN95Pdq3X+tGvnYoNrgCAEYD0DQbeLQox1HHyJU/bo2JGNxJ8cIPGvSBgcdt
-# 1AR3xSGjLlP5d8/cqZvDweXVZy8xvMDCaJxKluUf8fNINQ725LHF74eAOuKADDSd
-# +hRkceQcoaqyzwCn4zdy+UCtniiVAg3OkONbxQIDAQABo4IBUzCCAU8wDwYDVR0T
-# AQH/BAUwAwEB/zAdBgNVHQ4EFgQUwHu0yLduVqcJSJr4ck/X1yQsNj4wHwYDVR0j
-# BBgwFoAUCHbNywf/JPbFze27kLzihDdGdfcwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud
-# JQQMMAoGCCsGAQUFBwMDMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jcmwuY2Vy
-# dHVtLnBsL2N0bmNhLmNybDBrBggrBgEFBQcBAQRfMF0wKAYIKwYBBQUHMAGGHGh0
-# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wMQYIKwYBBQUHMAKGJWh0dHA6Ly9y
-# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdG5jYS5jZXIwOQYDVR0gBDIwMDAuBgRVHSAA
-# MCYwJAYIKwYBBQUHAgEWGGh0dHA6Ly93d3cuY2VydHVtLnBsL0NQUzANBgkqhkiG
-# 9w0BAQsFAAOCAQEAquU/dlQCTHAOKak5lgYPMbcL8aaLUvsQj09CW4y9MSMBZp3o
-# KaFNw1D69/hFDh2C1/z+pjIEc/1x7MyID6OSCMWBWAL9C2k7zbg/ST3QjRwTFGgu
-# mw2arbAZ4p7SfDl3iG8j/XuE/ERttbprcJJVbJSx2Df9qVkdtGOy3BPNeI4lNcGa
-# jzeELtRFzOP1zI1zqOM6beeVlHBXkVC2be9zck8vAodg4uoioe0+/dGLZo0ucm1P
-# xl017pOomNJnaunaGc0Cg/l0/F96GAQoHt0iMzt2bEcFXdVS/g66dvODEMduMF+n
-# YMf6dCcxmyiD7SGKG/EjUoTtlbytOqWjQgGdvDCCBUQwggQsoAMCAQICEAiJRXNz
-# I/QuBYKVrqDJ26swDQYJKoZIhvcNAQELBQAwgYAxCzAJBgNVBAYTAlBMMSIwIAYD
-# VQQKDBlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0g
-# Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNp
-# Z25pbmcgQ0EgU0hBMjAeFw0yMDA3MDcwOTA5MzRaFw0yMTA3MDcwOTA5MzRaMIGs
-# MQswCQYDVQQGEwJDQTEQMA4GA1UECAwHQWxiZXJ0YTEQMA4GA1UEBwwHQ2FsZ2Fy
-# eTEeMBwGA1UECgwVT3BlbiBTb3VyY2UgRGV2ZWxvcGVyMS8wLQYDVQQDDCZPcGVu
-# IFNvdXJjZSBEZXZlbG9wZXIsIEplcmVteSBIZXJiaXNvbjEoMCYGCSqGSIb3DQEJ
-# ARYZamVyZW15LmhlcmJpc29uQGdtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
-# ggEPADCCAQoCggEBAKtcpDZnwp1bBZdmMc7UuYB/2MwRDela4PgXWEYFfxXLiDtU
-# qO8yDL60EUk46HYKbnQ/46VedOT/XHejJu15kMxCNvGBlqpcAvfWWR5CmxZEfQ0k
-# MwS6QsY0IqH6G36WJhIaipN26SV51qaiqZJ+C39nynMWMrUKDUaVYhAJPGJw3AxH
-# 7Okcg4KQpoRp17iopdkTd6tlXXUdBU34zK+4K/SNLboOGwReOHXX7QPTt55PRCps
-# bPBtmRZUYjlu4GF/czZgmrYtt2KD/vNGOJeV64lgsDXOGhLiZf9B7uLSuBgJ9uUd
-# hvi/bUd78VHzeSdlqPAv1SE9U3MaXEL6HrYriNsCAwEAAaOCAYowggGGMAwGA1Ud
-# EwEB/wQCMAAwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5jZXJ0dW0ucGwv
-# Y3NjYXNoYTIuY3JsMHEGCCsGAQUFBwEBBGUwYzArBggrBgEFBQcwAYYfaHR0cDov
-# L2NzY2FzaGEyLm9jc3AtY2VydHVtLmNvbTA0BggrBgEFBQcwAoYoaHR0cDovL3Jl
-# cG9zaXRvcnkuY2VydHVtLnBsL2NzY2FzaGEyLmNlcjAfBgNVHSMEGDAWgBTAe7TI
-# t25WpwlImvhyT9fXJCw2PjAdBgNVHQ4EFgQUa7EeFY9eeL0Q95FJ1iWELbpapY8w
-# HQYDVR0SBBYwFIESY3NjYXNoYTJAY2VydHVtLnBsMA4GA1UdDwEB/wQEAwIHgDBL
-# BgNVHSAERDBCMAgGBmeBDAEEATA2BgsqhGgBhvZ3AgUBBDAnMCUGCCsGAQUFBwIB
-# FhlodHRwczovL3d3dy5jZXJ0dW0ucGwvQ1BTMBMGA1UdJQQMMAoGCCsGAQUFBwMD
-# MA0GCSqGSIb3DQEBCwUAA4IBAQCgRfcD/saeY2f4/4f4jEqLcBF1icVnR1L1yFn5
-# 8MPtT5I9RVsTk+WwkCFlu1jycykbebWENth7BEq4KMBg9YCSZJhRZl7kLh12G9Nk
-# nOuoXOALOZpwzIcvVlOIvZTwj10r3QFcrgP+FefzjiquwY+O0/YFhf+WpkTfEDzU
-# 3uA5FyYgJRwN8KAhv6yU3b8HtpS7MkKSPa2PtMId8YiCEw0PRBSsGX6pKPZ/c5e1
-# JWKC1slneovG8pwwq9b49cKG7zuE/bRc0Fg/T5/QMFOPdUGjNwyO34Crpzq/2ZJV
-# qEbz3jl0wcynfu1tJxeb9gjkzkOMPFAM/+HRcl5fH6WfIYNPMYIFlDCCBZACAQEw
-# gZUwgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKDBlVbml6ZXRvIFRlY2hub2xvZ2ll
-# cyBTLkEuMScwJQYDVQQLDB5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-# JDAiBgNVBAMMG0NlcnR1bSBDb2RlIFNpZ25pbmcgQ0EgU0hBMgIQCIlFc3Mj9C4F
-# gpWuoMnbqzANBglghkgBZQMEAgEFAKCBhDAYBgorBgEEAYI3AgEMMQowCKACgACh
-# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
-# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDd/L74N2CDfuLB3CqdXrhdoHEA
-# g6vQXd88FC7CAF5+jTANBgkqhkiG9w0BAQEFAASCAQBLOjjtxUS8jW5xXGHR+BQ+
-# XrjrPSy9TIGKHcnuKJnsMUU1E1sbNTK+oR7qNlrOrlm/uZpNauBkaFwO9k1PspBv
-# oxYbXlfl1it0K/igr6P+BnUTz8yXaazVpZZ/eLd+iqyAckv1H20knT/0+MPvNhAZ
-# 9S2I++hTTZHlJsZMb0VzUvmOKfLHwvGkckLIJN84JFtAHlAalAXNtFqjO9rDYdzc
-# xxzfe2S6NxKCCTx8BOLEQd4Qlg26t4t6DedbiVhZCl9uy56+9sFgIwgPLETvcNJH
-# FkgLA5hXF6jJE5DQNODXhB/qqZmVdR4Oc4C6l3ed3Qww7lEUJQTICX7OjBi5gw9b
-# oYIDSDCCA0QGCSqGSIb3DQEJBjGCAzUwggMxAgEBMIGTMH4xCzAJBgNVBAYTAlBM
-# MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
-# ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
-# cnVzdGVkIE5ldHdvcmsgQ0ECEQD+Z+TxWiTjxg1UfKAgwnZwMA0GCWCGSAFlAwQC
-# AQUAoIIBcjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
-# MQ8XDTIwMTExNjIzNDQzOFowLwYJKoZIhvcNAQkEMSIEIFLhfv+iC9UEdjCKfDb3
-# fhsSSntYkGp2zsSvywAt7gSBMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEINnKq8Mi
-# W3Awzbg+OEbjaRwU7XkLF2TOG08EMVeJnFxYMIHLBgsqhkiG9w0BCRACDDGBuzCB
-# uDCBtTCBsgQUT41MSAZJQmrvi4bU1fx5MucULYUwgZkwgYOkgYAwfjELMAkGA1UE
-# BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNV
-# BAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEiMCAGA1UEAxMZQ2Vy
-# dHVtIFRydXN0ZWQgTmV0d29yayBDQQIRAP5n5PFaJOPGDVR8oCDCdnAwDQYJKoZI
-# hvcNAQEBBQAEggEAfgutSqAf8F9rvPjw3veb73fg4+mnVEntKvxdLDX5wDezvgdh
-# M5m/GtaWl3I/t0tyywAeNhEhk2N1XYLIbMjMIseMfjV2lfdDXnzxuhK04DCIDqQb
-# x8ExGVm6SsxRYmb+hw7NJqzz7u7ibX77xVOEffCVfL+kRiBX13w18RR2IgVSdgn7
-# SUzoWy9mhs/BdK2hEUzV86AjP/g/6b6jNTRR17L6ysKO7hf5vPGc6CgKTRQ1m+bX
-# aQHhCxe+CNby3WeFei3Nao/3CFp0iB8+aNwoEqqdDlNaOj8h+gyPJRObi8hu4n7p
-# xx8cNeMHhrX5eSr+7NqrbidL7MXbZq+PWqlhYA==
+# MIInlAYJKoZIhvcNAQcCoIInhTCCJ4ECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
+# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUEmBW/nvcGqdJQ9L+CY6530w5
+# bW6ggiBrMIIFyTCCBLGgAwIBAgIQG7WPJSrfIwBJKMmuPX7tJzANBgkqhkiG9w0B
+# AQwFADB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMB4XDTIxMDUzMTA2
+# NDMwNloXDTI5MDkxNzA2NDMwNlowgYAxCzAJBgNVBAYTAlBMMSIwIAYDVQQKExlV
+# bml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlm
+# aWNhdGlvbiBBdXRob3JpdHkxJDAiBgNVBAMTG0NlcnR1bSBUcnVzdGVkIE5ldHdv
+# cmsgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL35ePjm1YAM
+# ZJ2GG5ZkZz8iOh51AX3v+1xnjMnMXGupkea5QuUgS5vam3u5mV3Zm4BL14RAKyfT
+# 6Lowuz4JGqdJle8rQCTCl8en7psl76gKAJeFWqqd3CnJ4jUH63BNStbBs1a4oUE4
+# m9H7MX+P4F/hsT8PjhZJYNcGjRj5qiYQqyrT0NFnjRtGvkcw1S5y0cVj2udjeUR+
+# S2MkiYYuND8pTFKLKqfA4pEoibnAW/kd2ecnrf+aApfBxlCSmwIsvam5NFkKv4RK
+# /9/+s5/r2Z7gmCPspmt3FirbzK07HKSH3EZzXhliaEVX5JCCQrtC1vBh4MGjPWaj
+# XfQY7ojJjRdFKZkydQIx7ikmyGsC5rViRX83FVojaInUPt5OJ7DwQAy8TRfLTaKz
+# HtAGWt32k89XdZn1+oYaZ3izv5b+NNy951JW5bPldXvXQZEF3F1p45UNQ7n8g5Y5
+# lXtsgFpPE3LG130pekS6UqQq1UFGCSD+IqC2WzCNvIkM1ddw+IdS/drvrFEuB7NO
+# /tAJ2nDvmPpW5m3btVdL3OUsJRXIni54TvjanJ6GLMpX8xrlyJKLGoKWesO8UBJp
+# 2A5aRos66yb6I8m2sIG+QgCk+Nb+MC7H0kb25Y51/fLMudCHW8wGEGC7gzW3Xmfe
+# R+yZSPGkoRX+rYxijjlVTzkWubFjnf+3AgMBAAGjggE+MIIBOjAPBgNVHRMBAf8E
+# BTADAQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAfBgNVHSMEGDAW
+# gBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYwLwYDVR0fBCgw
+# JjAkoCKgIIYeaHR0cDovL2NybC5jZXJ0dW0ucGwvY3RuY2EuY3JsMGsGCCsGAQUF
+# BwEBBF8wXTAoBggrBgEFBQcwAYYcaHR0cDovL3N1YmNhLm9jc3AtY2VydHVtLmNv
+# bTAxBggrBgEFBQcwAoYlaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2N0bmNh
+# LmNlcjA5BgNVHSAEMjAwMC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3
+# dy5jZXJ0dW0ucGwvQ1BTMA0GCSqGSIb3DQEBDAUAA4IBAQBRwqFYFiIQi/yGMdTC
+# MtNc+EuiL2o+TfirCB7t1ej65wgN7LfGHg6ydQV6sQv613RqAAYfpM6q8mt92BHA
+# EQjUDk1hxTqo+rHh45jq4mP9QfWTfQ28XZI7kZplutBfTL5MjWgDEBbV8dAEioUz
+# +TfnWy4maUI8us281HrpTZ3a50P7Y1KAhQTEJZVV8H6nnwHFWyj44M6GcKYnOzn7
+# OC6YU2UidS3X9t0iIpGW691o7T+jGZfTOyWI7DYSPal+zgKNBZqSpyduRbKcYoY3
+# DaQzjteoTtBKF0NMxfGnbNIeWGwUUX6KVKH27595el2BmhaQD+G78UoA+fndvu2q
+# 7M4KMIIGhzCCBG+gAwIBAgIQIzBzsv/acaSMfhnQiycOfzANBgkqhkiG9w0BAQsF
+# ADBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT
+# LkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29kZSBTaWduaW5nIDIwMjEgQ0EwHhcNMjEx
+# MjA3MTQ1NjQxWhcNMjIxMjA3MTQ1NjQwWjCBrDELMAkGA1UEBhMCQ0ExEDAOBgNV
+# BAgMB0FsYmVydGExEDAOBgNVBAcMB0NhbGdhcnkxHjAcBgNVBAoMFU9wZW4gU291
+# cmNlIERldmVsb3BlcjEvMC0GA1UEAwwmT3BlbiBTb3VyY2UgRGV2ZWxvcGVyLCBK
+# ZXJlbXkgSGVyYmlzb24xKDAmBgkqhkiG9w0BCQEWGWplcmVteS5oZXJiaXNvbkBn
+# bWFpbC5jb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCJ0t6afJel
+# 1x8CaoQ4M4HCoHYH0+vjCfmEtTIc9Xu3jMmD2XCU2X3GEErMenwOu/Qa0V/CCqyH
+# 0qyTyOxlv0g4VKMTQXVVm5MR+Xu2KGdZQ/VMwArVFsg7VO0YnRI1RcLujbtIuY18
+# 8xXBIVM0UdW4psUo9joZp5vdNj6ZPV3TcFBcolnbPjuIgNUBCSsaOUb7XYbb9ykh
+# QENDVz2frP7bHDaUoLsa3u3KPfT7P49hkWkp13f71e6tzKIbsDgszR5peMzCbMYN
+# UUP3e5+Izc4TUOrvswHYNK8nhkynawwIDGUDM9DnAk2aQAGFpFeNEHERqm6wS56k
+# 2ChInDH3TGROEyi7x8QxcGvefHucMMCOmv/D6rM0IpZ9WTmlQwU/KIExxcgQA6JA
+# 7nOT6w2npHuzyhHhg+EX08tmZXpEwMyvbsDZneCs/wd4JMw/0r4x7zeQn4RqtJ3H
+# 60jM0icOn/nptfL4I6hwwAAI7NwVupvUfVGj5LV6HbYhNIio/LV5S1MCAwEAAaOC
+# AXgwggF0MAwGA1UdEwEB/wQCMAAwPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Nj
+# c2NhMjAyMS5jcmwuY2VydHVtLnBsL2Njc2NhMjAyMS5jcmwwcwYIKwYBBQUHAQEE
+# ZzBlMCwGCCsGAQUFBzABhiBodHRwOi8vY2NzY2EyMDIxLm9jc3AtY2VydHVtLmNv
+# bTA1BggrBgEFBQcwAoYpaHR0cDovL3JlcG9zaXRvcnkuY2VydHVtLnBsL2Njc2Nh
+# MjAyMS5jZXIwHwYDVR0jBBgwFoAU3XRdTADbe5+gdMqxbvc8wDLAcM0wHQYDVR0O
+# BBYEFFqHTq1SwcyRtcc2cPnNCvA7fb1hMEsGA1UdIAREMEIwCAYGZ4EMAQQBMDYG
+# CyqEaAGG9ncCBQEEMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8vd3d3LmNlcnR1bS5w
+# bC9DUFMwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgeAMA0GCSqG
+# SIb3DQEBCwUAA4ICAQCOrzpWYqDZe34Y9aNAYqKiudVTM0j6ytkwKUrrtHoqydAQ
+# /CfHq1dNPQ/INCHawmUtbWOI1X3ndWWfwzrItC6WZ3iNAmvdwGvxP1kfe7IZRqCs
+# ZOH9DEnhydZA8cd4f15rI9lg27ncGdVTM3f/oDWybHMjlFc3KW8K1P9m8wAube05
+# mjZnsceZ05LZuolXFOwmhfn9oyeSRVf1LxROfYtVBSG+re+qWM7HgaPTSzzawQCN
+# lfM2su/oc40JWR4gj+P7YsvDZc97EnKqPzgKu4NIbUue5kCuuB45rM98mVZcq3io
+# KOSL3QGl57IDssJPuZe1Saepbkm1NVSUh2BWjT90o3VaJv9tup7Ts1q0nlrWQXnQ
+# bNJwJZPCyblXQjRjs1/gucvRc57Ui9KTzYfEujllQI6KlSRFhg1hk/6MXXxRWV3L
+# qBqXzuKb4kM4zQkzPotlBXpDFh+GitnB50r3aJtr5iyDSbtetpVE5wAJ2BvZO19i
+# D6H/HRQgjICAMgboZjju68q2zQrv5UvuLG3Nmi0Q5h63eebS0CdrCxK9VzGkY9pK
+# geZG/LNLRIiTt/h3PRTSNdM++C6CWXq2xVR++Za/cPyHe7NTUXluK5q369j2mxNa
+# iqKPBjEpDVZJKrbkloXEa9GAOTip6HhiIMFviMHArvpgUX2RO+7HPoAQH/y2LTCC
+# BpUwggR9oAMCAQICEQDxZCWMCbbie+IOMmCOS/SoMA0GCSqGSIb3DQEBDAUAMFYx
+# CzAJBgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4x
+# JDAiBgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQTAeFw0yMTA1MTkw
+# NTQyNDZaFw0zMjA1MTgwNTQyNDZaMFAxCzAJBgNVBAYTAlBMMSEwHwYDVQQKDBhB
+# c3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xHjAcBgNVBAMMFUNlcnR1bSBUaW1lc3Rh
+# bXAgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANVhvoAAvd2E
+# Y+4SZZgdeFSLRvrGkRYauj0efL40GPbov3iCYjyQ41Vh27YLP0F+2SLK+Tj7cwUO
+# uSi9llDxYNyYZeW1fjEDA8ByNcRteARnR7EQ/kB7ZuTAqVOLJRcJqrQP0kRorm3g
+# qrusfuud0p3mRfsoBFwwVYQ36KRXVyAaUqCqYlJOTQG9uBtzruiiUiG2iFwSS1lk
+# W63lUnFMnU4qxFHcVSY37hCsCTREi/h3DZnixaKWpt0FoFL/mGou3nyym2I5GTGe
+# KOvfdWe+Is/b7BtbJAzmT8CCsqPyWToDkLxX91KGPqX9OqpEzKQYAo6aLoJy8ZtQ
+# OJs8qSOXGUAt3iYcsW6NagT3UaJwpQp9WQuwWqmVv9089dCPDZMKZlsB6ANCWwCm
+# md2L1RRnEe89yvLLLQTKHXLgafte/W8TCfAGKxmMHvYzLyTNRDSCPE/bq+EGS8XY
+# KJzXqdUAfHIY4+bRjS/uUWZxLJhVaDUnnphlv5AAlkIvsEn0IFImkBc0bFw1RE3R
+# toAGVlMefdtsE84GE5Jj29sbAvfic6ZMWlEbmY/odBVdz8Q71yPznpr1q54MbLPa
+# FyUwhmKMYRrmvBpwa0/DUfNamA0A4jbgKEMFFDxiYPbcg3WuYuXMIyxFn3AVgi80
+# O0wlUxJCALT5dAEU857r2Q/DGA803gILAgMBAAGjggFiMIIBXjAMBgNVHRMBAf8E
+# AjAAMB0GA1UdDgQWBBTFRxJOcle2RBRriHEaFKwxuT+6CDAfBgNVHSMEGDAWgBS+
+# VAIvv0Bsc0POrAklTp5DRBru4DAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAww
+# CgYIKwYBBQUHAwgwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5jZXJ0dW0u
+# cGwvY3RzY2EyMDIxLmNybDBvBggrBgEFBQcBAQRjMGEwKAYIKwYBBQUHMAGGHGh0
+# dHA6Ly9zdWJjYS5vY3NwLWNlcnR1bS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9y
+# ZXBvc2l0b3J5LmNlcnR1bS5wbC9jdHNjYTIwMjEuY2VyMEAGA1UdIAQ5MDcwNQYL
+# KoRoAYb2dwIFAQswJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwv
+# Q1BTMA0GCSqGSIb3DQEBDAUAA4ICAQA3c8wwt8JfieaqdKwdTatmET92Sqt1Jgu8
+# jdT2Lj2HGz6L72ijmYmXi6s8tknTEjPoHsIcUE1b10XCBqGcUxeJPtCc+5nkIDB8
+# v/0J+wAvdd2dLQBaWX7shKiZGjx3nVt+kce3c/ePH0LoiaHUDvclKn3QKrQ2o+qc
+# R+WtXFhf6xhrZI728axExiyFTu7MTVXlxhZagVQxoMenBC4fgM1eJk7oPt/xAZad
+# c0de7pLdKVpgMbhijHtIhbW1C/SOySYXW901+jFUDKZAZF00uwbMBefo48BSLDXF
+# DozWqmMrhScpNSIUl++ANdtPVy+tiwmvJsH/jWyj4OwC3TKMrFulLmI/tKnHIeyd
+# yHRVwjniwh/Qrrp/gskahwGkNMptTUA6rc68dtWojtXCqz5MYK7tMqqtMvY1BNEM
+# DEeSyjsW0fzjVHYDaW9hIUN8bHzsHU289ZhTeZj8ZGyZDH5GADw+X/s2+ntkBj4B
+# TyYNWvYpesU/i6emzBUFCUfG0g7HPqN7J90sgbagUmWXeKlwBIdq/+htgS38XUZG
+# Un6YUhC0oNp3FQGZ+FGWAiBi8QS24kYREe7F8wPbqMuaLG7xJM8ZFFyj5HkF2C76
+# oVufKYp+5c7ixH3olipo47GKVw3/GvuazXeJLvCoA2l3a3EpmM/LfB1aeJVBy4vv
+# IJcPa4RzbTCCBrkwggShoAMCAQICEQCZo4AKJlU7ZavcboSms+o5MA0GCSqGSIb3
+# DQEBDAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9s
+# b2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9y
+# aXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEw
+# NTE5MDUzMjE4WhcNMzYwNTE4MDUzMjE4WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UE
+# ChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gQ29k
+# ZSBTaWduaW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQCdI88EMCM7wUYs5zNzPmNdenW6vlxNur3rLfi+5OZ+U3iZIB+AspO+CC/bj+ta
+# JUbMbFP1gQBJUzDUCPx7BNLgid1TyztVLn52NKgxxu8gpyTr6EjWyGzKU/gnIu+b
+# HAse1LCitX3CaOE13rbuHbtrxF2tPU8f253QgX6eO8yTbGps1Mg+yda3DcTsOYOh
+# SYNCJiL+5wnjZ9weoGRtvFgMHtJg6i671OPXIciiHO4Lwo2p9xh/tnj+JmCQEn5Q
+# U0NxzrOiRna4kjFaA9ZcwSaG7WAxeC/xoZSxF1oK1UPZtKVt+yrsGKqWONoK6f5E
+# mBOAVEK2y4ATDSkb34UD7JA32f+Rm0wsr5ajzftDhA5mBipVZDjHpwzv8bTKzCDU
+# SUuUmPo1govD0RwFcTtMXcfJtm1i+P2UNXadPyYVKRxKQATHN3imsfBiNRdN5kiV
+# VeqP55piqgxOkyt+HkwIA4gbmSc3hD8ke66t9MjlcNg73rZZlrLHsAIV/nJ0mmgS
+# jBI/TthoGJDydekOQ2tQD2Dup/+sKQptalDlui59SerVSJg8gAeV7N/ia4mrGoie
+# z+SqV3olVfxyLFt3o/OQOnBmjhKUANoKLYlKmUpKEFI0PfoT8Q1W/y6s9LTI6ekb
+# i0igEbFUIBE8KDUGfIwnisEkBw5KcBZ3XwnHmfznwlKo8QIDAQABo4IBVTCCAVEw
+# DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3XRdTADbe5+gdMqxbvc8wDLAcM0w
+# HwYDVR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMDMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9j
+# cmwuY2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUF
+# BzABhhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZo
+# dHRwOi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAw
+# MC4GBFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BT
+# MA0GCSqGSIb3DQEBDAUAA4ICAQB1iFgP5Y9QKJpTnxDsQ/z0O23JmoZifZdEOEmQ
+# vo/79PQg9nLF/GJe6ZiUBEyDBHMtFRK0mXj3Qv3gL0sYXe+PPMfwmreJHvgFGWQ7
+# XwnfMh2YIpBrkvJnjwh8gIlNlUl4KENTK5DLqsYPEtRQCw7R6p4s2EtWyDDr/M58
+# iY2UBEqfUU/ujR9NuPyKk0bEcEi62JGxauFYzZ/yld13fHaZskIoq2XazjaD0pQk
+# cQiIueL0HKiohS6XgZuUtCKA7S6CHttZEsObQJ1j2s0urIDdqF7xaXFVaTHKtAuM
+# fwi0jXtF3JJphrJfc+FFILgCbX/uYBPBlbBIP4Ht4xxk2GmfzMn7oxPITpigQFJF
+# WuzTMUUgdRHTxaTSKRJ/6Uh7ki/pFjf9sUASWgxT69QF9Ki4JF5nBIujxZ2sOU9e
+# 1HSCJwOfK07t5nnzbs1LbHuAIGJsRJiQ6HX/DW1XFOlXY1rc9HufFhWU+7Uk+hFk
+# JsfzqBz3pRO+5aI6u5abI4Qws4YaeJH7H7M8X/YNoaArZbV4Ql+jarKsE0+8XvC4
+# DJB+IVcvC9Ydqahi09mjQse4fxfef0L7E3hho2O3bLDM6v60rIRUCi2fJT2/IRU5
+# ohgyTch4GuYWefSBsp5NPJh4QRTP9DC3gc5QEKtbrTY0Ka87Web7/zScvLmvQBm8
+# JDFpDjCCBrkwggShoAMCAQICEQDn/2nHOzXOS5Em2HR8aKWHMA0GCSqGSIb3DQEB
+# DAUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp
+# ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+# MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMjEwNTE5
+# MDUzMjA3WhcNMzYwNTE4MDUzMjA3WjBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
+# QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0
+# YW1waW5nIDIwMjEgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDp
+# Eh8ENe25XXrFppVBvoplf0530W0lddNmjtv4YSh/f7eDQKFaIqc7tHj7ox+u8vIs
+# JZlroakUeMS3i3T8aJRC+eQs4FF0GqvkM6+WZO8kmzZfxmZaBYmMLs8FktgFYCzy
+# wmXeQ1fEExflee2OpbHVk665eXRHjH7MYZIzNnjl2m8Hy8ulB9mR8wL/W0v0pjKN
+# T6G0sfrx1kk+3OGosFUb7yWNnVkWKU4qSxLv16kJ6oVJ4BSbZ4xMak6JLeB8szrK
+# 9vwGDpvGDnKCUMYL3NuviwH1x4gZG0JAXU3x2pOAz91JWKJSAmRy/l0s0l5bEYKo
+# lg+DMqVhlOANd8Yh5mkQWaMEvBRE/kAGzIqgWhwzN2OsKIVtO8mf5sPWSrvyplSA
+# BAYa13rMYnzwfg08nljZHghquCJYCa/xHK9acev9UD7Y+usr15d7mrszzxhF1JOr
+# 1Mpup2chNSBlyOObhlSO16rwrffVrg/SzaKfSndS5swRhr8bnDqNJY9TNyEYvBYp
+# gF95K7p0g4LguR4A++Z1nFIHWVY5v0fNVZmgzxD9uVo/gta3onGOQj3JCxgYx0Kr
+# CXu4yc9QiVwTFLWbNdHFSjBCt5/8Q9pLuRhVocdCunhcHudMS1CGQ/Rn0+7P+fzM
+# gWdRKfEOh/hjLrnQ8BdJiYrZNxvIOhM2aa3zEDHNwwIDAQABo4IBVTCCAVEwDwYD
+# VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUvlQCL79AbHNDzqwJJU6eQ0Qa7uAwHwYD
+# VR0jBBgwFoAUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQDAgEGMBMG
+# A1UdJQQMMAoGCCsGAQUFBwMIMDAGA1UdHwQpMCcwJaAjoCGGH2h0dHA6Ly9jcmwu
+# Y2VydHVtLnBsL2N0bmNhMi5jcmwwbAYIKwYBBQUHAQEEYDBeMCgGCCsGAQUFBzAB
+# hhxodHRwOi8vc3ViY2Eub2NzcC1jZXJ0dW0uY29tMDIGCCsGAQUFBzAChiZodHRw
+# Oi8vcmVwb3NpdG9yeS5jZXJ0dW0ucGwvY3RuY2EyLmNlcjA5BgNVHSAEMjAwMC4G
+# BFUdIAAwJjAkBggrBgEFBQcCARYYaHR0cDovL3d3dy5jZXJ0dW0ucGwvQ1BTMA0G
+# CSqGSIb3DQEBDAUAA4ICAQC4k1l3yUwV/ZQHCKCneqAs8EGTnwEUJLdDpokN/dMh
+# KjK0rR5qX8nIIHzxpQR3TAw2IRw1Uxsr2PliG3bCFqSdQTUbfaTq6V3vBzEebDru
+# 9QFjqlKnxCF2h1jhLNFFplbPJiW+JSnJTh1fKEqEdKdxgl9rVTvlxfEJ7exOn25M
+# Gbd/wGPwuSmMxRJVO0wnqgS7kmoJjNF9zqeehFSDDP8ZVkWg4EZ2tIS0M3uZmByR
+# r+1Lkwjjt8AtW83mVnZTyTsOb+FNfwJY7DS4FmWhkRbgcHRetreoTirPOr/ozyDK
+# hT8MTSTf6Lttg6s6T/u08mDWw6HK04ZRDfQ9sb77QV8mKgO44WGP31vXnVKoWVJp
+# FBjPvjL8/Zck/5wXX2iqjOaLStFOR/IQki+Ehn4zlcgVm22ZVCBPF+l8nAwUUShC
+# tKuSU7GmZLKCmmxQMkSiWILTm8EtVD6AxnJhoq8EnhjEEyUoflkeRF2WhFiVQOmW
+# TwZRr44IxWGkNJC6tTorW5rl2Zl+2e9JLPYf3pStAPMDoPKIjVXd6NW2+fZrNUBe
+# Do2eOa5Fn7Brs/HLQff5Xgris5MeUbdVgDrF8uxO6cLPvZPo63j62SsNg55pTWk9
+# fUIF9iPoRbb4QurjoY/woI1RAOKtYtTic6aAJq3u83RIPpGXBSJKwx4KJAOZnCDC
+# tTGCBpMwggaPAgEBMGowVjELMAkGA1UEBhMCUEwxITAfBgNVBAoTGEFzc2VjbyBE
+# YXRhIFN5c3RlbXMgUy5BLjEkMCIGA1UEAxMbQ2VydHVtIENvZGUgU2lnbmluZyAy
+# MDIxIENBAhAjMHOy/9pxpIx+GdCLJw5/MAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3
+# AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
+# AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRpdFqoCdKZ
+# kxBPtIPH4QKaIKB0YDANBgkqhkiG9w0BAQEFAASCAYAJswMZw1tnG+KdT2Ff49FJ
+# DZiePuTLvy7+9e21AG9ZhIBqlHhEG3uEOZq54mXF2uKQSVLK/o0OnKjK8Ymj0lkM
+# 5L7aUwYYS5AVhvfvY+aJESb6PSypLPtoCQgFZ0s7S4Fx4K2QgtAc0nkIoK49PnjB
+# SicNuVOBVshYDBHcQ/YADuz6l6tvuf7Gl2cJneMZF0hAZM0HPfc+jmyLZyQuyQjZ
+# pmCWjKFSXe/G0yBtMTaOxwnz7PhVK5U7cMXvX05xOIvlWdkWgoosb0AUSIixw6/b
+# Mvhr1UVygiZv3TEuSvg4db/DBRKJ2kQytZ8jOhCSoLSal7LnQ+Re/3IoSp2H2yt1
+# ea8inqouxk02dXJqC8Z/dCza3QvCwihl8L/TjtuEYvhfS6oeK6z3vr2eTvFcQzS1
+# tT8Bh88shJXg5aD7bLiOSrbeRjn0WiCVJShXN2im3rgNlJf9ovcFBKQNVzI0VDFV
+# 79Q8d3ZbUmPVwxNomCB/tP+E5tTUXNwPCL6v5lCK86ShggQEMIIEAAYJKoZIhvcN
+# AQkGMYID8TCCA+0CAQEwazBWMQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNv
+# IERhdGEgU3lzdGVtcyBTLkEuMSQwIgYDVQQDExtDZXJ0dW0gVGltZXN0YW1waW5n
+# IDIwMjEgQ0ECEQDxZCWMCbbie+IOMmCOS/SoMA0GCWCGSAFlAwQCAgUAoIIBVzAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMTIw
+# NzE1MjQ0OVowNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgG1m/6OV3K6z2Q7t5rLSO
+# gVh4TyHFVK4TR206Gj4FxdMwPwYJKoZIhvcNAQkEMTIEMLToYmetmFA2/xOv0VMN
+# Kt+q1IUgMCTmdjw4GNSNSLrltNYL6kMONSQduXm/Nf8Z5TCBoAYLKoZIhvcNAQkQ
+# AgwxgZAwgY0wgYowgYcEFNMRxpUxG4znP9W1Uxis31mK4ZsTMG8wWqRYMFYxCzAJ
+# BgNVBAYTAlBMMSEwHwYDVQQKExhBc3NlY28gRGF0YSBTeXN0ZW1zIFMuQS4xJDAi
+# BgNVBAMTG0NlcnR1bSBUaW1lc3RhbXBpbmcgMjAyMSBDQQIRAPFkJYwJtuJ74g4y
+# YI5L9KgwDQYJKoZIhvcNAQEBBQAEggIAW+twP1Pd6BmmKnlXTUlGzeroNt0TqtjH
+# OkbbRV0d4byvi6GEhvutq+qO3hR+uqxc6sTUWsm4kPGOkDZeeg/puPlAx6DqgAiB
+# tA5txyL5ehsbYJ/ZxBPX1WOZlrGj6g7MaCRWkIHqKcYU3gsNe86lxjubD3cqNiAN
+# HL9d4Sx7DQWh01WrBeYOUNRcft2K3iQieWEH1wuiQxU0qXMutc3cuy0KxzPZtx3s
+# H3jXqm1H0hb0K4rQysz4QlOLQ4gqV+rQLgTDYuLfA3YaFfp+G31uHu8xd2Z9TNTE
+# dC/btgGujzmdHa/j4iKg+j9SyqTFEcdLIwW/89ZnIOndiRBvAlJnj9Mpg6FCgfU5
+# ejQpFOrBGBqTJt8wIyfk5DkzbLC4M+CxBbjnqpk5btyA0XfWsFrmvfjHEylOAiOA
+# bOELamCaTYKHlH0eIi6L6gY1WUTcrlClyqMlfhpwLFELOHtZxOvg4Bbfqv3tc5Ut
+# Qb6aLDZs7VpM7FPowM+9kyLbP681itsgnsU/khQa+wQqgYJrIAd7ThhKfbVsscYR
+# HPuzO51m4xHIG1P5kUEgWHFQnEI3Rnuys0umiAQVlaTaH0W5GorWRr6NrjPxrPVz
+# wTHMrxP0IJ5ZzYz26ub5bT9k+MZ5VRGoXUXinYfy2ZT1E34I2Inimz9VUZvKtFs0
+# 7EgaDSkYJHA=
# SIG # End signature block
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs
index 3832a524..8d182437 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioCoverArtTests.cs
@@ -42,7 +42,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs
index 674ea2e4..45cc51e3 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/ExportAudioFileTests.cs
@@ -43,7 +43,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs
index d3c7bfae..4166e2e2 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioAnalyzerInfoTests.cs
@@ -37,7 +37,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs
index b09869f7..fc2af59c 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioCoverArtTests.cs
@@ -40,7 +40,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs
index c1a34cf4..b3da2b92 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioEncoderInfoTests.cs
@@ -37,7 +37,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs
index d015f883..9b6e78fb 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioFileTests.cs
@@ -40,7 +40,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs
index 9db15c0b..a6a274f8 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioInfoTests.cs
@@ -42,7 +42,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs
index 142ade42..336c3d42 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataEncoderInfoTests.cs
@@ -37,7 +37,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs
index a3b6536c..332e66f4 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/GetAudioMetadataTests.cs
@@ -42,7 +42,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs
index a4db6df3..2f444cd1 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/MeasureAudioFileTests.cs
@@ -44,7 +44,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs
index c698bfaa..d5579a84 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/RenameAudioFileTests.cs
@@ -49,7 +49,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs
index 2c3dd2bc..a177629f 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/SaveAudioMetadataTests.cs
@@ -49,7 +49,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs b/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs
index 3c0aecd5..b31d873b 100644
--- a/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs
+++ b/AudioWorks/tests/AudioWorks.Commands.Tests/SetAudioMetadataTests.cs
@@ -38,7 +38,7 @@ public void CommandExists()
{
ps.Invoke();
}
- catch (Exception e) when (!(e is CommandNotFoundException))
+ catch (Exception e) when (e is not CommandNotFoundException)
{
// CommandNotFoundException is the only type we are testing for
}
diff --git a/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj b/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj
index 1618c07b..6bad30e4 100644
--- a/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj
+++ b/AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj
@@ -1,22 +1,22 @@
- net5.0;netcoreapp3.1;netcoreapp2.1;net462
- net5.0;netcoreapp3.1;netcoreapp2.1
+ net6.0;netcoreapp3.1;net462
+ net6.0;netcoreapp3.1
false
true
-
-
+
+
-
-
+
+
diff --git a/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj b/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj
index 80503b1d..e1e8263c 100644
--- a/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj
+++ b/AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj
@@ -1,15 +1,15 @@
- net5.0;netcoreapp3.1;netcoreapp2.1;net462
- net5.0;netcoreapp3.1;netcoreapp2.1
+ net6.0;netcoreapp3.1;net462
+ net6.0;netcoreapp3.1
false
true
-
-
+
+
diff --git a/README.md b/README.md
index a8b38886..20b2386d 100644
--- a/README.md
+++ b/README.md
@@ -6,26 +6,22 @@ A full user interface (Windows only) [is in development](https://github.com/jher
This project supplants [PowerShell Audio](https://github.com/jherby2k/PowerShellAudio) by targetting PowerShell cross-platform (Windows, Linux and MacOS).
-Platform | Build Status (master) | Build Status (dev) | Deployment Status
+Platform | Build Status (main) | Build Status (dev) | Deployment Status
-- | -- | -- | --
Windows | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Windows?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/2/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Windows?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/2/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=2&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/2/2)
Linux | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Linux?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/3/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20Linux?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/3/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=3&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/4/4)
MacOS | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20MacOS?branchName=main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=3) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/4/main)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=3) | [![Build Status](https://dev.azure.com/jherby2k/AudioWorks/_apis/build/status/AudioWorks%20for%20MacOS?branchName=dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=4) [![Code Coverage](https://img.shields.io/azure-devops/coverage/jherby2k/AudioWorks/4/dev)](https://dev.azure.com/jherby2k/AudioWorks/_build?definitionId=4&_a=summary&repositoryFilter=1&branchFilter=4) | ![Deployment Status](https://vsrm.dev.azure.com/jherby2k/_apis/public/Release/badge/ce2541e1-667c-4be1-a926-7d44ff89db07/3/3)
### System Requirements
-AudioWorks runs on Windows 8.1+, MacOS 10.13+, and Ubuntu 16.04+. Other 64-bit Linux distributions may work, but may require additional dependencies and are currently untested. Currently, most extensions only support the Intel (x86) architecture. Apple M1 support will follow once .NET supports it.
+AudioWorks runs on Windows 8.1+, MacOS 10.15+, and Ubuntu 18.04+. Other 64-bit Linux distributions may work, but may require additional dependencies and are currently untested.
#### On Windows:
* [PowerShell 7+](https://aka.ms/powershell) (recommended) and/or Windows PowerShell 5.1
* [.NET Framework 4.6.2+](https://dotnet.microsoft.com/download/dotnet-framework/net462) (if using Windows PowerShell)
* [iTunes](https://www.apple.com/itunes) (optional, for AAC and ALAC support. Requires the classic installer, not the Windows Store version)
-#### On Ubuntu 20.04 or 18.04:
-* Via `apt-get install`:
- * libebur128-1
-#### On Ubuntu 16.04:
-* Via `apt-get install`:
- * libmp3lame0
- * libebur128-1
+#### On Ubuntu:
+* [PowerShell 7+](https://aka.ms/powershell)
+* libebur128 (`apt install libebur128-1`)
### Installation
The AudioWorks PowerShell module can found on [the PowerShell Gallery](https://www.powershellgallery.com/packages/AudioWorks.Commands).
@@ -35,15 +31,10 @@ Keep the module up to date with `Update-Module -Name AudioWorks.Commands`.
The .NET API is available via [NuGet](https://www.nuget.org/packages/AudioWorks.Api).
### Additional Requirements for Building / Testing
-* [.NET 5.0 SDK](https://dotnet.microsoft.com/download/dotnet/5.0)
-* [.NET Core 2.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/2.1)
-* [PowerShell 7+](https://aka.ms/powershell) (recommended) and/or Windows PowerShell 5.1.
-* Windows 8.1+, MacOS 10.13+, Ubuntu 16.04, 18.04 or 20.04.
-* [NuGet client tools](https://docs.microsoft.com/en-us/nuget/install-nuget-client-tools#nugetexe-cli) (for building extensions on MacOS and Linux)
-* [Visual Studio 2019 16.8+](https://visualstudio.microsoft.com/downloads) (optional - Windows only)
-* [Visual Studio 2019 for Mac 8.8+](https://visualstudio.microsoft.com/downloads) (optional - Mac only)
+* [.NET 6.0 SDK](https://dotnet.microsoft.com/download/dotnet/6.0)
+* [Visual Studio 2022](https://visualstudio.microsoft.com/downloads) (optional - Windows or Mac)
* [Visual Studio Code](https://code.visualstudio.com/) (optional - all platforms)
-* [ReSharper 2020.3+](https://www.jetbrains.com/resharper) (optional - Windows only)
+* [ReSharper 2021.3+](https://www.jetbrains.com/resharper) (optional - Windows only)
### Special Thanks
This project wouldn't be possible without the work of these other fine projects and organizations:
diff --git a/azure-pipelines-linux.yml b/azure-pipelines-linux.yml
index 7e8b44b5..480bbe09 100644
--- a/azure-pipelines-linux.yml
+++ b/azure-pipelines-linux.yml
@@ -10,6 +10,7 @@ trigger:
- LICENSE
- azure-pipelines-windows.yml
- azure-pipelines-macos.yml
+ - AudioWorks/src/Extensions/AudioWorks.Extensions.Apple
pr:
- dev
@@ -22,6 +23,18 @@ variables:
disable.coverage.autogenerate: 'true'
steps:
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 3.1 SDK'
+ inputs:
+ packageType: sdk
+ version: 3.1.x
+
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 6.0 SDK'
+ inputs:
+ packageType: sdk
+ version: 6.0.x
+
- task: DotNetCoreCLI@2
inputs:
command: 'build'
@@ -74,9 +87,8 @@ steps:
}
Write-Host 'Copied symbols:'
- Copy-Symbols net5.0 net5.0
+ Copy-Symbols net6.0 net6.0
Copy-Symbols netstandard2.0 netcoreapp3.1
- Copy-Symbols netstandard2.0 netcoreapp2.1
displayName: 'Copy symbols to extension directories'
- task: DotNetCoreCLI@2
@@ -84,9 +96,9 @@ steps:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET Core 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET 5.0'
+ testRunTitle: 'AudioWorks.Common on .NET Core 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Common on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -97,23 +109,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Common on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET 5.0'
+ testRunTitle: 'AudioWorks.Extensibility on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Extensibility on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -124,23 +127,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net5.0/*'
- displayName: 'Test AudioWorks.Api on .NET 5.0'
+ testRunTitle: 'AudioWorks.Api on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net6.0/*'
+ displayName: 'Test AudioWorks.Api on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -151,23 +145,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp3.1/*'
displayName: 'Test AudioWorks.Api on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp2.1/*'
- displayName: 'Test AudioWorks.Api on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Commands on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net5.0/AudioWorks.Commands/net5.0'
- displayName: 'Test AudioWorks.Commands on .NET 5.0'
+ testRunTitle: 'AudioWorks.Commands on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net6.0/AudioWorks.Commands/net6.0'
+ displayName: 'Test AudioWorks.Commands on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -178,12 +163,12 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/netcoreapp3.1/AudioWorks.Commands/netcoreapp3.1'
displayName: 'Test AudioWorks.Commands on .NET Core 3.1'
-- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
+- task: reportgenerator@5
inputs:
reports: '$(Agent.TempDirectory)/*/coverage.cobertura.xml'
targetdir: 'reports/coverage'
- reporttypes: 'HtmlInline_AzurePipelines;Cobertura'
- displayName: 'Generate code coverage results'
+ reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
+ displayName: 'Generate code coverage report'
- task: PublishCodeCoverageResults@1
inputs:
diff --git a/azure-pipelines-macos.yml b/azure-pipelines-macos.yml
index e875a661..025c5807 100644
--- a/azure-pipelines-macos.yml
+++ b/azure-pipelines-macos.yml
@@ -22,6 +22,18 @@ variables:
disable.coverage.autogenerate: 'true'
steps:
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 3.1 SDK'
+ inputs:
+ packageType: sdk
+ version: 3.1.x
+
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 6.0 SDK'
+ inputs:
+ packageType: sdk
+ version: 6.0.x
+
- task: DotNetCoreCLI@2
inputs:
command: 'build'
@@ -70,9 +82,8 @@ steps:
}
Write-Host 'Copied symbols:'
- Copy-Symbols net5.0 net5.0
+ Copy-Symbols net6.0 net6.0
Copy-Symbols netstandard2.0 netcoreapp3.1
- Copy-Symbols netstandard2.0 netcoreapp2.1
displayName: 'Copy symbols to extension directories'
- task: DotNetCoreCLI@2
@@ -80,9 +91,9 @@ steps:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET Core 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET 5.0'
+ testRunTitle: 'AudioWorks.Common on .NET Core 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Common on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -93,23 +104,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Common on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Common.Tests/AudioWorks.Common.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET 5.0'
+ testRunTitle: 'AudioWorks.Extensibility on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Extensibility on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -120,23 +122,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Extensibility.Tests/AudioWorks.Extensibility.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net5.0/*'
- displayName: 'Test AudioWorks.Api on .NET 5.0'
+ testRunTitle: 'AudioWorks.Api on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/net6.0/*'
+ displayName: 'Test AudioWorks.Api on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -147,23 +140,14 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp3.1/*'
displayName: 'Test AudioWorks.Api on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks/tests/AudioWorks.Api.Tests/AudioWorks.Api.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)/Extensions/netcoreapp2.1/*'
- displayName: 'Test AudioWorks.Api on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: 'AudioWorks/tests/AudioWorks.Commands.Tests/AudioWorks.Commands.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Commands on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net5.0/AudioWorks.Commands/net5.0'
- displayName: 'Test AudioWorks.Commands on .NET 5.0'
+ testRunTitle: 'AudioWorks.Commands on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/net6.0/AudioWorks.Commands/net6.0'
+ displayName: 'Test AudioWorks.Commands on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -174,12 +158,12 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)/AudioWorks/tests/AudioWorks.Commands.Tests/bin/$(buildConfiguration)/netcoreapp3.1/AudioWorks.Commands/netcoreapp3.1'
displayName: 'Test AudioWorks.Commands on .NET Core 3.1'
-- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
+- task: reportgenerator@5
inputs:
reports: '$(Agent.TempDirectory)/*/coverage.cobertura.xml'
targetdir: 'reports/coverage'
- reporttypes: 'HtmlInline_AzurePipelines;Cobertura'
- displayName: 'Generate code coverage results'
+ reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
+ displayName: 'Generate code coverage report'
- task: PublishCodeCoverageResults@1
inputs:
diff --git a/azure-pipelines-windows.yml b/azure-pipelines-windows.yml
index 5dda910f..4747a997 100644
--- a/azure-pipelines-windows.yml
+++ b/azure-pipelines-windows.yml
@@ -22,6 +22,18 @@ variables:
disable.coverage.autogenerate: 'true'
steps:
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 3.1 SDK'
+ inputs:
+ packageType: sdk
+ version: 3.1.x
+
+- task: UseDotNet@2
+ displayName: 'Install .NET Core 6.0 SDK'
+ inputs:
+ packageType: sdk
+ version: 6.0.x
+
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
@@ -88,9 +100,8 @@ steps:
}
Write-Host 'Copied symbols:'
- Copy-Symbols net5.0 net5.0
+ Copy-Symbols net6.0 net6.0
Copy-Symbols netstandard2.0 netcoreapp3.1
- Copy-Symbols netstandard2.0 netcoreapp2.1
Copy-Symbols netstandard2.0 net48
displayName: 'Copy symbols to extension directories'
@@ -99,9 +110,9 @@ steps:
command: 'test'
projects: 'AudioWorks\tests\AudioWorks.Common.Tests\AudioWorks.Common.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET 5.0'
+ testRunTitle: 'AudioWorks.Common on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Common on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -112,15 +123,6 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Common on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks\tests\AudioWorks.Common.Tests\AudioWorks.Common.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Common on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Common on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
@@ -135,9 +137,9 @@ steps:
command: 'test'
projects: 'AudioWorks\tests\AudioWorks.Extensibility.Tests\AudioWorks.Extensibility.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET 5.0'
+ testRunTitle: 'AudioWorks.Extensibility on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
+ displayName: 'Test AudioWorks.Extensibility on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -148,15 +150,6 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
displayName: 'Test AudioWorks.Extensibility on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks\tests\AudioWorks.Extensibility.Tests\AudioWorks.Extensibility.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Extensibility on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]*'
- displayName: 'Test AudioWorks.Extensibility on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
@@ -171,9 +164,9 @@ steps:
command: 'test'
projects: 'AudioWorks\tests\AudioWorks.Api.Tests\AudioWorks.Api.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\net5.0\*'
- displayName: 'Test AudioWorks.Api on .NET 5.0'
+ testRunTitle: 'AudioWorks.Api on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\net6.0\*'
+ displayName: 'Test AudioWorks.Api on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -184,15 +177,6 @@ steps:
arguments: '--framework netcoreapp3.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\netcoreapp3.1\*'
displayName: 'Test AudioWorks.Api on .NET Core 3.1'
-- task: DotNetCoreCLI@2
- inputs:
- command: 'test'
- projects: 'AudioWorks\tests\AudioWorks.Api.Tests\AudioWorks.Api.Tests.csproj'
- publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Api on .NET Core 2.1'
- arguments: '--framework netcoreapp2.1 --configuration $(buildConfiguration) --filter "FullyQualifiedName!~AudioWorks.Api.Tests.ExtensionInstallerTests" --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(localAppDataDir)\Extensions\netcoreapp2.1\*'
- displayName: 'Test AudioWorks.Api on .NET Core 2.1'
-
- task: DotNetCoreCLI@2
inputs:
command: 'test'
@@ -207,9 +191,9 @@ steps:
command: 'test'
projects: 'AudioWorks\tests\AudioWorks.Commands.Tests\AudioWorks.Commands.Tests.csproj'
publishTestResults: 'true'
- testRunTitle: 'AudioWorks.Commands on .NET 5.0'
- arguments: '--framework net5.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net5.0\AudioWorks.Commands\net5.0'
- displayName: 'Test AudioWorks.Commands on .NET 5.0'
+ testRunTitle: 'AudioWorks.Commands on .NET 6.0'
+ arguments: '--framework net6.0 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net6.0\AudioWorks.Commands\net6.0'
+ displayName: 'Test AudioWorks.Commands on .NET 6.0'
- task: DotNetCoreCLI@2
inputs:
@@ -229,12 +213,12 @@ steps:
arguments: '--framework net462 --configuration $(buildConfiguration) --no-build --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude=[AudioWorks.*.Tests]*,[AudioWorks.TestUtilities]* DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.IncludeDirectory=$(Build.SourcesDirectory)\AudioWorks\tests\AudioWorks.Commands.Tests\bin\$(buildConfiguration)\net462\AudioWorks.Commands\net462'
displayName: 'Test AudioWorks.Commands on .NET Framework 4.8'
-- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
+- task: reportgenerator@5
inputs:
reports: '$(Agent.TempDirectory)\*\coverage.cobertura.xml'
targetdir: 'reports\coverage'
- reporttypes: 'HtmlInline_AzurePipelines;Cobertura'
- displayName: 'Generate code coverage results'
+ reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
+ displayName: 'Generate code coverage report'
- task: PublishCodeCoverageResults@1
inputs: