diff --git a/.azure/pipelines/ci-public.yml b/.azure/pipelines/ci-public.yml index 9bcb4699e93a..6874ec344b77 100644 --- a/.azure/pipelines/ci-public.yml +++ b/.azure/pipelines/ci-public.yml @@ -19,6 +19,15 @@ pr: branches: include: - '*' + paths: + exclude: + - .devcontainer/* + - .github/* + - .vscode/* + - docs/* + - '**/*.md' + - LICENSE.TXT + - THIRD-PARTY-NOTICES.TXT parameters: # Choose whether to skip tests when running pipeline manually. @@ -38,6 +47,8 @@ parameters: variables: - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE value: true +- name: GRADLE_USER_HOME + value: $(Build.SourcesDirectory)/.gradle - name: _TeamName value: AspNetCore - name: _PublishUsingPipelines @@ -65,8 +76,6 @@ variables: value: /bl:artifacts/log/Release/Build.CodeSign.binlog - name: WindowsInstallersLogArgs value: /bl:artifacts/log/Release/Build.Installers.binlog -- name: WindowsArm64InstallersLogArgs - value: /bl:artifacts/log/Release/Build.Installers.Arm64.binlog - name: _SignType value: '' - name: _InternalRuntimeDownloadArgs @@ -79,14 +88,6 @@ variables: value: true - template: /eng/common/templates/variables/pool-providers.yml -resources: - containers: - - container: debpkg - image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg - - - container: rpmpkg - image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm - stages: - stage: build displayName: Build @@ -202,29 +203,14 @@ stages: -sign -buildInstallers -noBuildNative - /p:DotNetSignType=$(_SignType) - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - $(WindowsInstallersLogArgs) - displayName: Build Installers - - # Windows installers bundle and sharedfx msi for arm64 - - script: ./eng/build.cmd - -ci - -prepareMachine - -noBuildRepoTasks - -arch arm64 - -sign - -buildInstallers - -noBuildNative -publish /p:DotNetSignType=$(_SignType) /p:AssetManifestFileName=aspnetcore-win.xml $(_BuildArgs) $(_PublishArgs) $(_InternalRuntimeDownloadArgs) - $(WindowsArm64InstallersLogArgs) - displayName: Build ARM64 Installers + $(WindowsInstallersLogArgs) + displayName: Build Installers artifacts: - name: Windows_Logs_Attempt_$(System.JobAttempt) @@ -313,43 +299,13 @@ stages: --ci --arch x64 --pack + --build-installers --all --no-build-java -p:OnlyPackPlatformSpecificPackages=true $(_BuildArgs) $(_InternalRuntimeDownloadArgs) displayName: Run build.sh - - script: ./eng/build.sh - --ci - --nobl - --arch x64 - --build-installers - --no-build-deps - --no-build-nodejs - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=deb - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build Debian installers - target: debpkg - - script: ./eng/build.sh - --ci - --nobl - --arch x64 - --build-installers - --no-build-deps - --no-build-nodejs - --publish - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=rpm - -p:AssetManifestFileName=aspnetcore-Linux_x64.xml - $(_BuildArgs) - $(_PublishArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build RPM installers - target: rpmpkg artifacts: - name: Linux_x64_Logs_Attempt_$(System.JobAttempt) path: artifacts/log/ @@ -404,29 +360,13 @@ stages: --ci --arch arm64 --pack + --build-installers --all --no-build-java -p:OnlyPackPlatformSpecificPackages=true $(_BuildArgs) $(_InternalRuntimeDownloadArgs) displayName: Run build.sh - - script: ./eng/build.sh - --ci - --nobl - --arch arm64 - --build-installers - --no-build-deps - --no-build-nodejs - --publish - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=rpm - -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml - $(_BuildArgs) - $(_PublishArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build RPM installers - target: rpmpkg artifacts: - name: Linux_arm64_Logs_Attempt_$(System.JobAttempt) path: artifacts/log/ @@ -446,7 +386,7 @@ stages: jobName: Linux_musl_x64_build jobDisplayName: "Build: Linux Musl x64" agentOs: Linux - container: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode + container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64 buildArgs: --arch x64 --os-name linux-musl @@ -480,7 +420,7 @@ stages: jobDisplayName: "Build: Linux Musl ARM" agentOs: Linux useHostedUbuntu: false - container: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine + container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64 buildArgs: --arch arm --os-name linux-musl @@ -513,7 +453,7 @@ stages: jobDisplayName: "Build: Linux Musl ARM64" agentOs: Linux useHostedUbuntu: false - container: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64-alpine + container: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64 buildArgs: --arch arm64 --os-name linux-musl @@ -578,7 +518,7 @@ stages: isAzDOTestingJob: true buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) beforeBuild: - - bash: "./eng/scripts/install-nginx-mac.sh" + - bash: "./eng/scripts/install-nginx.sh" displayName: Installing Nginx artifacts: - name: MacOS_Test_Logs_Attempt_$(System.JobAttempt) @@ -599,7 +539,7 @@ stages: useHostedUbuntu: false buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) beforeBuild: - - bash: "./eng/scripts/install-nginx-linux.sh" + - bash: "./eng/scripts/install-nginx.sh" displayName: Installing Nginx - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p" displayName: Increase inotify limit @@ -613,29 +553,100 @@ stages: publishOnError: true includeForks: true - # Helix x64 + # Helix x64 subset 1 - template: jobs/default-build.yml parameters: - jobName: Helix_x64 - jobDisplayName: 'Tests: Helix x64' + jobName: Helix_x64_Subset_1 + jobDisplayName: 'Tests: Helix x64 Subset 1' agentOs: Windows timeoutInMinutes: 240 steps: # Build the shared framework - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + /p:VsTestUseMSBuildOutput=false displayName: Build shared fx # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. - - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + /p:VsTestUseMSBuildOutput=false /p:RunTemplateTests=false /p:HelixSubset=1 displayName: Run build.cmd helix target env: HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops artifacts: - - name: Helix_Logs_Attempt_$(System.JobAttempt) + - name: Helix_Subset_1_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Helix x64 subset 2 + - template: jobs/default-build.yml + parameters: + jobName: Helix_x64_Subset_2 + jobDisplayName: 'Tests: Helix x64 Subset 2' + agentOs: Windows + timeoutInMinutes: 240 + steps: + # Build the shared framework + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + /p:VsTestUseMSBuildOutput=false + displayName: Build shared fx + # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + /p:VsTestUseMSBuildOutput=false /p:RunTemplateTests=false /p:HelixSubset=2 + displayName: Run build.cmd helix target + env: + HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + + artifacts: + - name: Helix_Subset_2_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Local development validation + - template: jobs/default-build.yml + parameters: + jobName: Local_Windows + jobDisplayName: 'Test: Windows local development validation' + agentOs: Windows + isAzDOTestingJob: true + timeoutInMinutes: 240 + # Temporarily disabled due to https://github.com/dotnet/aspnetcore/issues/63140 + condition: 'false' + steps: + - script: git submodule update --init + displayName: Update submodules + - script: ./restore.cmd + displayName: Run restore.cmd + - powershell: ./eng/build.ps1 -all -noBuildJava -noBuildNodeJS "-WarnAsError:false" + displayName: Build (No NodeJS) + - script: npm run build + displayName: Build JS + - script: ./eng/build.cmd -all -noBuildJava -pack -c Debug + displayName: Build (Debug) + - script: ./eng/build.cmd -all -noBuildJava -pack -c Release + displayName: Build (Release) + - script: ./src/ProjectTemplates/build.cmd + -test + -NoRestore + -NoBuild + -NoBuildDeps + -configuration Release + -bl + displayName: Run project template tests + - powershell: . ./activate.ps1; ./src/ProjectTemplates/scripts/Run-BlazorWeb-Locally.ps1 -Verbose + displayName: Run Blazor web app test script + + artifacts: + - name: Local_Windows_x64_Logs_Attempt_$(System.JobAttempt) path: artifacts/log/ publishOnError: true includeForks: true @@ -645,9 +656,9 @@ stages: parameters: platform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8' - buildScript: './eng/build.sh --publish --no-build-repo-tasks $(_PublishArgs) $(_InternalRuntimeDownloadArgs)' - skipPublishValidation: true + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64' + buildScript: './eng/build.sh' + buildArguments: '--source-build $(_InternalRuntimeDownloadArgs)' jobProperties: timeoutInMinutes: 120 variables: diff --git a/.azure/pipelines/ci-unofficial.yml b/.azure/pipelines/ci-unofficial.yml new file mode 100644 index 000000000000..28dbc0f13365 --- /dev/null +++ b/.azure/pipelines/ci-unofficial.yml @@ -0,0 +1,697 @@ +# +# See https://learn.microsoft.com/azure/devops/pipelines/yaml-schema for details on this file. +# + +# Configure which branches trigger builds +trigger: none + +pr: none + +parameters: +# Choose whether to skip tests when running pipeline manually. +- name: skipTests + default: false + displayName: Skip tests? + type: boolean + +variables: +- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE + value: true +- name: GRADLE_USER_HOME + value: $(Build.SourcesDirectory)/.gradle +- name: _TeamName + value: AspNetCore +- name: _PublishUsingPipelines + value: true +- name: PostBuildSign + value: false +- name: _ArcadePublishNonWindowsArg + value: '' +- name: _UseHelixOpenQueues + value: ${{ ne(variables['System.TeamProject'], 'internal') }} +- ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: + - name: _BuildArgs + value: /p:TeamName=$(_TeamName) + /p:OfficialBuildId=$(Build.BuildNumber) + /p:SkipTestBuild=true + /p:PostBuildSign=$(PostBuildSign) + # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT + - group: Publish-Build-Assets + # The following extra properties are not set when testing. Use with final build.[cmd,sh] of asset-producing jobs. + - name: _PublishArgs + value: /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) +- ${{ if in(variables['Build.Reason'], 'PullRequest') }}: + - name: _BuildArgs + value: '/p:SkipTestBuild=true /p:PostBuildSign=$(PostBuildSign)' + - name: _PublishArgs + value: '' +- name: WindowsArm64LogArgs + value: /bl:artifacts/log/Release/Build.arm64.binlog +- name: Windows64LogArgs + value: /bl:artifacts/log/Release/Build.x64.binlog +- name: Windows86LogArgs + value: -ExcludeCIBinaryLog +- name: WindowsSignLogArgs + value: /bl:artifacts/log/Release/Build.CodeSign.binlog +- name: WindowsInstallersLogArgs + value: /bl:artifacts/log/Release/Build.Installers.binlog +- name: _InternalRuntimeDownloadArgs + value: -RuntimeSourceFeed https://ci.dot.net/internal + -RuntimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64) + /p:DotNetAssetRootAccessTokenSuffix='$(dotnetbuilds-internal-container-read-token-base64)' +# The code signing doesn't use the aspnet build scripts, so the msbuild parameters have to be passed directly. This +# is awkward but necessary because the eng/common/ build scripts don't add the msbuild properties automatically. +- name: _InternalRuntimeDownloadCodeSignArgs + value: $(_InternalRuntimeDownloadArgs) + /p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal + /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) +- group: DotNet-HelixApi-Access +- name: _SignType + value: test +# Exclude artifacts & .packages folders from CodeQL scans +- name: LGTM_INDEX_FILTERS + value: | + exclude:.packages + exclude:artifacts +- template: /eng/common/templates-official/variables/pool-providers.yml@self + +resources: + repositories: + # Repo: 1ESPipelineTemplates/1ESPipelineTemplates + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines + parameters: + sdl: + sourceAnalysisPool: + name: NetCore1ESPool-Svc-Internal + image: windows.vs2022.amd64 + os: windows + spotBugs: + enabled: false + policheck: + enabled: true + tsa: + enabled: true + containers: + azureLinux30Net10BuildAmd64: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64 + stages: + - stage: build + displayName: Build + jobs: + # Code check + - ${{ if in(variables['Build.Reason'], 'PullRequest', 'Manual') }}: + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Code_check + jobDisplayName: Code check + agentOs: Windows + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + steps: + - powershell: ./eng/scripts/CodeCheck.ps1 -ci $(_InternalRuntimeDownloadArgs) + displayName: Run eng/scripts/CodeCheck.ps1 + artifacts: + - name: Code_Check_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Build Windows (x64/x86/arm64) + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + codeSign: true + jobName: Windows_build + jobDisplayName: "Build: Windows x64/x86/arm64" + agentOs: Windows + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + steps: + - ${{ if notIn(variables['Build.Reason'], 'PullRequest') }}: + - script: echo "##vso[build.addbuildtag]daily-build" + displayName: 'Set CI daily-build tag' + + # !!! NOTE !!! Some of these steps have disabled code signing. + # This is intentional to workaround https://github.com/dotnet/arcade/issues/1957 which always re-submits for code-signing, even + # if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing. + # The sign settings have been configured to + - script: ./eng/build.cmd + -ci + -prepareMachine + -nativeToolsOnMachine + -arch x64 + -pack + -all + $(_BuildArgs) + $(_InternalRuntimeDownloadArgs) + $(Windows64LogArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build x64 + + # Build the x86 shared framework + # This is going to actually build x86 native assets. + - script: ./eng/build.cmd + -ci + -prepareMachine + -noBuildRepoTasks + -arch x86 + -pack + -all + -noBuildJava + -noBuildNative + /p:OnlyPackPlatformSpecificPackages=true + $(_BuildArgs) + $(_InternalRuntimeDownloadArgs) + $(Windows86LogArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build x86 + + # Build the arm64 shared framework + - script: ./eng/build.cmd + -ci + -prepareMachine + -noBuildRepoTasks + -arch arm64 + -pack + -noBuildJava + -noBuildNative + /p:OnlyPackPlatformSpecificPackages=true + $(_BuildArgs) + $(_InternalRuntimeDownloadArgs) + $(WindowsArm64LogArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build ARM64 + + - script: .\src\SiteExtensions\build.cmd + -ci + -prepareMachine + -noBuildRepoTasks + -pack + -noBuildDeps + -noBuildNative + $(_BuildArgs) + $(_InternalRuntimeDownloadArgs) + /p:_DevBuild=true + env: + MSBUILDUSESERVER: "1" + displayName: Build SiteExtension + + # Windows installers bundle x86/x64/arm64 assets + - script: ./eng/build.cmd + -ci + -prepareMachine + -noBuildRepoTasks + -sign + -buildInstallers + -noBuildNative + -publish + /p:DotNetSignType=$(_SignType) + /p:AssetManifestFileName=aspnetcore-win.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + $(WindowsInstallersLogArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build Installers + + artifacts: + - name: Windows_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Windows_Packages + path: artifacts/packages/ + - name: Windows_HostingBundle + path: artifacts/bin/WindowsHostingBundle + - name: Windows_ANCM_Msi + path: artifacts/bin/ANCMv2 + - name: Windows_ANCMIISExpress_Msi + path: artifacts/bin/AncmIISExpressV2 + + # Build MacOS arm64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: MacOs_arm64_build + jobDisplayName: "Build: macOS arm64" + agentOs: macOs + timeoutInMinutes: 90 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch arm64 + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: MacOS_arm64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: MacOS_arm64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: MacOS_arm64 + + # Build MacOS x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: MacOs_x64_build + jobDisplayName: "Build: macOS x64" + agentOs: macOs + timeoutInMinutes: 90 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: MacOS_x64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: MacOS_x64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: MacOS_x64 + + # Build Linux x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_x64_build + jobDisplayName: "Build: Linux x64" + agentOs: Linux + useHostedUbuntu: false + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch x64 + --pack + --all + --build-installers + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_x64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: Linux_x64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_x64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_x64 + + # Build Linux ARM + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_arm_build + jobDisplayName: "Build: Linux ARM" + agentOs: Linux + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch arm + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_arm.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: Linux_arm_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_arm_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_arm + + # Build Linux ARM64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_arm64_build + jobDisplayName: "Build: Linux ARM64" + agentOs: Linux + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch arm64 + --pack + --all + --build-installers + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: Linux_arm64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_arm64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_arm64 + + # Build Linux Musl x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_musl_x64_build + jobDisplayName: "Build: Linux Musl x64" + agentOs: Linux + container: azureLinux30Net10BuildAmd64 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch x64 + --os-name linux-musl + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + disableComponentGovernance: true + artifacts: + - name: Linux_musl_x64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_musl_x64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_musl_x64 + + # Build Linux Musl ARM + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_musl_arm_build + jobDisplayName: "Build: Linux Musl ARM" + agentOs: Linux + useHostedUbuntu: false + container: azureLinux30Net10BuildAmd64 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch arm + --os-name linux-musl + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: Linux_musl_arm_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_musl_arm_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_musl_arm + + # Build Linux Musl ARM64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_musl_arm64_build + jobDisplayName: "Build: Linux Musl ARM64" + agentOs: Linux + useHostedUbuntu: false + container: azureLinux30Net10BuildAmd64 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + buildArgs: + --arch arm64 + --os-name linux-musl + --pack + --all + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + artifacts: + - name: Linux_musl_arm64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_musl_arm64_Packages + path: artifacts/packages/ + + - ${{ if ne(variables.PostBuildSign, 'true') }}: + - template: .azure/pipelines/jobs/codesign-xplat.yml@self + parameters: + inputName: Linux_musl_arm64 + + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Windows_Test + jobDisplayName: "Test: Windows Server x64" + agentOs: Windows + isAzDOTestingJob: true + continueOnError: true + # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job. + cancelTimeoutInMinutes: 30 + buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true + /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunBlazorPlaywrightTemplateTests=true /p:DoNotCleanUpTemplates=true + $(_InternalRuntimeDownloadArgs) + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" + displayName: Setup IISExpress test certificates and schema + artifacts: + - name: Windows_Test_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Windows_Test_Results_Attempt_$(System.JobAttempt) + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + + - ${{ if and(ne(parameters.skipTests, 'true'), in(variables['Build.Reason'], 'PullRequest', 'Manual')) }}: + # Test jobs + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: MacOS_Test + jobDisplayName: "Test: macOS" + agentOs: macOS + timeoutInMinutes: 90 + isAzDOTestingJob: true + buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + - bash: "./eng/scripts/install-nginx.sh" + displayName: Installing Nginx + artifacts: + - name: MacOS_Test_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: MacOS_Test_Results_Attempt_$(System.JobAttempt) + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Linux_Test + jobDisplayName: "Test: Ubuntu x64" + agentOs: Linux + isAzDOTestingJob: true + useHostedUbuntu: false + buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + - bash: "./eng/scripts/install-nginx.sh" + displayName: Installing Nginx + - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p" + displayName: Increase inotify limit + artifacts: + - name: Linux_Test_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Linux_Test_Results_Attempt_$(System.JobAttempt) + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + + # Helix x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Helix_x64_Subset_1 + jobDisplayName: 'Tests: Helix x64 Subset 1' + agentOs: Windows + timeoutInMinutes: 240 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + steps: + # Build the shared framework + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build shared fx + # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true /p:HelixSubset=1 + /p:CrossgenOutput=false /p:RunTemplateTests=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + displayName: Run build.cmd helix target + env: + HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + + artifacts: + - name: Helix_Logs_Subset_1_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Helix x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Helix_x64_Subset_2 + jobDisplayName: 'Tests: Helix x64 Subset 2' + agentOs: Windows + timeoutInMinutes: 240 + beforeBuild: + - script: git submodule update --init + displayName: Update submodules + steps: + # Build the shared framework + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build shared fx + # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true /p:HelixSubset=2 + /p:CrossgenOutput=false /p:RunTemplateTests=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + displayName: Run build.cmd helix target + env: + HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + + artifacts: + - name: Helix_Logs_Subset_2_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Local development validation + - ${{ if in(variables['Build.Reason'], 'PullRequest', 'Manual') }}: + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Local_Windows + jobDisplayName: 'Test: Windows local development validation' + agentOs: Windows + isAzDOTestingJob: true + timeoutInMinutes: 240 + steps: + - script: git submodule update --init + displayName: Update submodules + - script: ./restore.cmd + displayName: Run restore.cmd + - script: ./eng/build.cmd -all -noBuildJava -noBuildNodeJS + displayName: Build (No NodeJS) + - script: npm run build + displayName: Build JS + - script: ./eng/build.cmd -all -noBuildJava -pack -c Debug + displayName: Build (Debug) + - script: ./eng/build.cmd -all -noBuildJava -pack -c Release + displayName: Build (Release) + - script: ./src/ProjectTemplates/build.cmd + -test + -NoRestore + -NoBuild + -NoBuildDeps + -configuration Release + displayName: Run project template tests + - powershell: . ./activate.ps1; ./src/ProjectTemplates/scripts/Run-BlazorWeb-Locally.ps1 -Verbose + displayName: Run Blazor web app test script + + artifacts: + - name: Local_Windows_x64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index b0d73169f2b3..ddb60815d107 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -27,16 +27,12 @@ parameters: default: false displayName: Skip tests? type: boolean -# Choose whether to enable binlogs when running pipeline manually. -# Binary logs are enabled by default in public builds and aren't designed to be disabled there. -- name: produceBinlogs - default: false - displayName: Produce binlogs? - type: boolean variables: - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE value: true +- name: GRADLE_USER_HOME + value: $(Build.SourcesDirectory)/.gradle - name: _TeamName value: AspNetCore - name: _PublishUsingPipelines @@ -44,9 +40,13 @@ variables: - ${{ if or(startswith(variables['Build.SourceBranch'], 'refs/heads/release/'), startswith(variables['Build.SourceBranch'], 'refs/heads/internal/release/'), eq(variables['Build.Reason'], 'Manual')) }}: - name: PostBuildSign value: false + - name: _ArcadePublishNonWindowsArg + value: '' - ${{ else }}: - name: PostBuildSign value: true + - name: _ArcadePublishNonWindowsArg + value: --publish - name: _UseHelixOpenQueues value: ${{ ne(variables['System.TeamProject'], 'internal') }} - ${{ if and(notin(variables['Build.Reason'], 'PullRequest'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) }}: @@ -63,48 +63,30 @@ variables: # The following extra properties are not set when testing. Use with final build.[cmd,sh] of asset-producing jobs. - name: _PublishArgs value: /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) - - ${{ if ne(parameters.produceBinlogs, 'true') }}: - # Do not log most Windows steps in official builds; this is the slowest job. Site extensions step always logs. - - name: WindowsArm64LogArgs - value: -ExcludeCIBinaryLog - - name: Windows64LogArgs - value: -ExcludeCIBinaryLog - - name: Windows86LogArgs - value: -ExcludeCIBinaryLog - - name: WindowsSignLogArgs - value: -ExcludeCIBinaryLog - - name: WindowsInstallersLogArgs - value: -ExcludeCIBinaryLog - - name: WindowsArm64InstallersLogArgs - value: -ExcludeCIBinaryLog - ${{ if in(variables['Build.Reason'], 'PullRequest') }}: - name: _BuildArgs value: '/p:SkipTestBuild=true /p:PostBuildSign=$(PostBuildSign)' - name: _PublishArgs value: '' -- ${{ if or(in(variables['Build.Reason'], 'PullRequest'), eq(parameters.produceBinlogs, 'true')) }}: - # Write binary logs for all main Windows build steps except the x86 one in public and PR builds. - - name: WindowsArm64LogArgs - value: /bl:artifacts/log/Release/Build.arm64.binlog - - name: Windows64LogArgs - value: /bl:artifacts/log/Release/Build.x64.binlog - - name: Windows86LogArgs - value: -ExcludeCIBinaryLog - - name: WindowsSignLogArgs - value: /bl:artifacts/log/Release/Build.CodeSign.binlog - - name: WindowsInstallersLogArgs - value: /bl:artifacts/log/Release/Build.Installers.binlog - - name: WindowsArm64InstallersLogArgs - value: /bl:artifacts/log/Release/Build.Installers.Arm64.binlog +- name: WindowsArm64LogArgs + value: /bl:artifacts/log/Release/Build.arm64.binlog +- name: Windows64LogArgs + value: /bl:artifacts/log/Release/Build.x64.binlog +- name: Windows86LogArgs + value: -ExcludeCIBinaryLog +- name: WindowsSignLogArgs + value: /bl:artifacts/log/Release/Build.CodeSign.binlog +- name: WindowsInstallersLogArgs + value: /bl:artifacts/log/Release/Build.Installers.binlog - name: _InternalRuntimeDownloadArgs - value: -RuntimeSourceFeed https://dotnetbuilds.blob.core.windows.net/internal + value: -RuntimeSourceFeed https://ci.dot.net/internal -RuntimeSourceFeedKey $(dotnetbuilds-internal-container-read-token-base64) /p:DotNetAssetRootAccessTokenSuffix='$(dotnetbuilds-internal-container-read-token-base64)' # The code signing doesn't use the aspnet build scripts, so the msbuild parameters have to be passed directly. This # is awkward but necessary because the eng/common/ build scripts don't add the msbuild properties automatically. - name: _InternalRuntimeDownloadCodeSignArgs value: $(_InternalRuntimeDownloadArgs) - /p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal + /p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) - group: DotNet-HelixApi-Access - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: @@ -121,12 +103,6 @@ variables: - template: /eng/common/templates-official/variables/pool-providers.yml@self resources: - containers: - - container: debpkg - image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-debpkg - - - container: rpmpkg - image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-fpm repositories: # Repo: 1ESPipelineTemplates/1ESPipelineTemplates - repository: 1esPipelines @@ -144,13 +120,13 @@ extends: os: windows spotBugs: enabled: false + policheck: + enabled: true + tsa: + enabled: true containers: - alpine319WithNode: - image: mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.19-WithNode - mariner20CrossArmAlpine: - image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm-alpine - mariner20CrossArm64Alpine: - image: mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-cross-arm64-alpine + azureLinux30Net10BuildAmd64: + image: mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-net10.0-build-amd64 stages: - stage: build displayName: Build @@ -197,6 +173,8 @@ extends: $(_BuildArgs) $(_InternalRuntimeDownloadArgs) $(Windows64LogArgs) + env: + MSBUILDUSESERVER: "1" displayName: Build x64 # Build the x86 shared framework @@ -214,6 +192,8 @@ extends: $(_BuildArgs) $(_InternalRuntimeDownloadArgs) $(Windows86LogArgs) + env: + MSBUILDUSESERVER: "1" displayName: Build x86 # Build the arm64 shared framework @@ -222,15 +202,15 @@ extends: -prepareMachine -noBuildRepoTasks -arch arm64 - -sign -pack -noBuildJava -noBuildNative - /p:DotNetSignType=$(_SignType) /p:OnlyPackPlatformSpecificPackages=true $(_BuildArgs) $(_InternalRuntimeDownloadArgs) $(WindowsArm64LogArgs) + env: + MSBUILDUSESERVER: "1" displayName: Build ARM64 - script: .\src\SiteExtensions\build.cmd @@ -242,23 +222,10 @@ extends: -noBuildNative $(_BuildArgs) $(_InternalRuntimeDownloadArgs) + env: + MSBUILDUSESERVER: "1" displayName: Build SiteExtension - # This runs code-signing on all packages, zips, and jar files as defined in build/CodeSign.targets. If - # https://github.com/dotnet/arcade/issues/1957 is resolved, consider running code-signing inline with the other - # previous steps. Sign check is disabled because it is run in a separate step below, after installers are built. - - script: ./eng/build.cmd - -ci - -prepareMachine - -noBuildRepoTasks - -noBuildNative - -noBuild - -sign - /p:DotNetSignType=$(_SignType) - $(_BuildArgs) - $(WindowsSignLogArgs) - displayName: Code sign packages - # Windows installers bundle x86/x64/arm64 assets - script: ./eng/build.cmd -ci @@ -267,29 +234,16 @@ extends: -sign -buildInstallers -noBuildNative - /p:DotNetSignType=$(_SignType) - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - $(WindowsInstallersLogArgs) - displayName: Build Installers - - # Windows installers bundle and sharedfx msi for arm64 - - script: ./eng/build.cmd - -ci - -prepareMachine - -noBuildRepoTasks - -arch arm64 - -sign - -buildInstallers - -noBuildNative -publish /p:DotNetSignType=$(_SignType) /p:AssetManifestFileName=aspnetcore-win.xml $(_BuildArgs) $(_PublishArgs) $(_InternalRuntimeDownloadArgs) - $(WindowsArm64InstallersLogArgs) - displayName: Build ARM64 Installers + $(WindowsInstallersLogArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build Installers artifacts: - name: Windows_Logs_Attempt_$(System.JobAttempt) @@ -317,7 +271,7 @@ extends: --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-MacOS_arm64.xml $(_BuildArgs) @@ -347,7 +301,7 @@ extends: --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-MacOS_x64.xml $(_BuildArgs) @@ -373,48 +327,18 @@ extends: jobDisplayName: "Build: Linux x64" agentOs: Linux useHostedUbuntu: false - steps: - - script: ./eng/build.sh - --ci - --arch x64 - --pack - --all - --no-build-java - -p:OnlyPackPlatformSpecificPackages=true - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Run build.sh - - script: ./eng/build.sh - --ci - --nobl - --arch x64 - --build-installers - --no-build-deps - --no-build-nodejs - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=deb - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build Debian installers - target: debpkg - - script: ./eng/build.sh - --ci - --nobl - --arch x64 - --build-installers - --no-build-deps - --no-build-nodejs - --publish - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=rpm - -p:AssetManifestFileName=aspnetcore-Linux_x64.xml - $(_BuildArgs) - $(_PublishArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build RPM installers - target: rpmpkg + buildArgs: + --arch x64 + --pack + --all + --build-installers + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_x64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) artifacts: - name: Linux_x64_Logs_Attempt_$(System.JobAttempt) path: artifacts/log/ @@ -439,7 +363,7 @@ extends: --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-Linux_arm.xml $(_BuildArgs) @@ -464,34 +388,18 @@ extends: jobName: Linux_arm64_build jobDisplayName: "Build: Linux ARM64" agentOs: Linux - steps: - - script: ./eng/build.sh - --ci - --arch arm64 - --pack - --all - --no-build-java - -p:OnlyPackPlatformSpecificPackages=true - $(_BuildArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Run build.sh - - script: ./eng/build.sh - --ci - --nobl - --arch arm64 - --build-installers - --no-build-deps - --no-build-nodejs - --publish - -p:OnlyPackPlatformSpecificPackages=true - -p:BuildRuntimeArchive=false - -p:LinuxInstallerType=rpm - -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml - $(_BuildArgs) - $(_PublishArgs) - $(_InternalRuntimeDownloadArgs) - displayName: Build RPM installers - target: rpmpkg + buildArgs: + --arch arm64 + --pack + --all + --build-installers + --no-build-java + $(_ArcadePublishNonWindowsArg) + -p:OnlyPackPlatformSpecificPackages=true + -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) artifacts: - name: Linux_arm64_Logs_Attempt_$(System.JobAttempt) path: artifacts/log/ @@ -511,14 +419,14 @@ extends: jobName: Linux_musl_x64_build jobDisplayName: "Build: Linux Musl x64" agentOs: Linux - container: alpine319WithNode + container: azureLinux30Net10BuildAmd64 buildArgs: --arch x64 --os-name linux-musl --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-Linux_musl_x64.xml $(_BuildArgs) @@ -545,14 +453,14 @@ extends: jobDisplayName: "Build: Linux Musl ARM" agentOs: Linux useHostedUbuntu: false - container: mariner20CrossArmAlpine + container: azureLinux30Net10BuildAmd64 buildArgs: --arch arm --os-name linux-musl --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-Linux_musl_arm.xml $(_BuildArgs) @@ -578,14 +486,14 @@ extends: jobDisplayName: "Build: Linux Musl ARM64" agentOs: Linux useHostedUbuntu: false - container: mariner20CrossArm64Alpine + container: azureLinux30Net10BuildAmd64 buildArgs: --arch arm64 --os-name linux-musl --pack --all --no-build-java - --publish + $(_ArcadePublishNonWindowsArg) -p:OnlyPackPlatformSpecificPackages=true -p:AssetManifestFileName=aspnetcore-Linux_musl_arm64.xml $(_BuildArgs) @@ -604,32 +512,33 @@ extends: parameters: inputName: Linux_musl_arm64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Windows_Test + jobDisplayName: "Test: Windows Server x64" + agentOs: Windows + isAzDOTestingJob: true + continueOnError: true + # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job. + cancelTimeoutInMinutes: 30 + buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true + /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunBlazorPlaywrightTemplateTests=true /p:DoNotCleanUpTemplates=true + $(_InternalRuntimeDownloadArgs) + beforeBuild: + - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" + displayName: Setup IISExpress test certificates and schema + artifacts: + - name: Windows_Test_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + - name: Windows_Test_Results_Attempt_$(System.JobAttempt) + path: artifacts/TestResults/ + publishOnError: true + includeForks: true + - ${{ if and(ne(parameters.skipTests, 'true'), in(variables['Build.Reason'], 'PullRequest', 'Manual')) }}: # Test jobs - - template: .azure/pipelines/jobs/default-build.yml@self - parameters: - jobName: Windows_Test - jobDisplayName: "Test: Windows Server x64" - agentOs: Windows - isAzDOTestingJob: true - # Just uploading artifacts/logs/ files can take 15 minutes. Doubling the cancel timeout for this job. - cancelTimeoutInMinutes: 30 - buildArgs: -all -pack -test -binaryLog /p:SkipHelixReadyTests=true /p:SkipIISNewHandlerTests=true /p:SkipIISTests=true - /p:SkipIISExpressTests=true /p:SkipIISNewShimTests=true /p:RunTemplateTests=false /p:RunBlazorPlaywrightTemplateTests=true - $(_InternalRuntimeDownloadArgs) - beforeBuild: - - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1" - displayName: Setup IISExpress test certificates and schema - artifacts: - - name: Windows_Test_Logs_Attempt_$(System.JobAttempt) - path: artifacts/log/ - publishOnError: true - includeForks: true - - name: Windows_Test_Results_Attempt_$(System.JobAttempt) - path: artifacts/TestResults/ - publishOnError: true - includeForks: true - - template: .azure/pipelines/jobs/default-build.yml@self parameters: jobName: MacOS_Test @@ -639,7 +548,7 @@ extends: isAzDOTestingJob: true buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) beforeBuild: - - bash: "./eng/scripts/install-nginx-mac.sh" + - bash: "./eng/scripts/install-nginx.sh" displayName: Installing Nginx artifacts: - name: MacOS_Test_Logs_Attempt_$(System.JobAttempt) @@ -660,7 +569,7 @@ extends: useHostedUbuntu: false buildArgs: --all --test --binaryLog /p:RunTemplateTests=false /p:SkipHelixReadyTests=true $(_InternalRuntimeDownloadArgs) beforeBuild: - - bash: "./eng/scripts/install-nginx-linux.sh" + - bash: "./eng/scripts/install-nginx.sh" displayName: Installing Nginx - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p" displayName: Increase inotify limit @@ -677,39 +586,107 @@ extends: # Helix x64 - template: .azure/pipelines/jobs/default-build.yml@self parameters: - jobName: Helix_x64 - jobDisplayName: 'Tests: Helix x64' + jobName: Helix_x64_Subset_1 + jobDisplayName: 'Tests: Helix x64 Subset 1' agentOs: Windows timeoutInMinutes: 240 steps: # Build the shared framework - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + env: + MSBUILDUSESERVER: "1" displayName: Build shared fx # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. - - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -noBuildRepoTasks -noBuildNative -noBuild -test - -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true /p:HelixSubset=1 + /p:CrossgenOutput=false /p:RunTemplateTests=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + displayName: Run build.cmd helix target + env: + HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + + artifacts: + - name: Helix_Logs_Subset_1_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true + + # Helix x64 + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Helix_x64_Subset_2 + jobDisplayName: 'Tests: Helix x64 Subset 2' + agentOs: Windows + timeoutInMinutes: 240 + steps: + # Build the shared framework + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) + env: + MSBUILDUSESERVER: "1" + displayName: Build shared fx + # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true /p:HelixSubset=2 + /p:CrossgenOutput=false /p:RunTemplateTests=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log $(_InternalRuntimeDownloadArgs) displayName: Run build.cmd helix target env: HelixApiAccessToken: $(HelixApiAccessToken) # Needed for internal queues SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops artifacts: - - name: Helix_Logs_Attempt_$(System.JobAttempt) + - name: Helix_Logs_Subset_2_Attempt_$(System.JobAttempt) path: artifacts/log/ publishOnError: true includeForks: true + # Local development validation + - ${{ if in(variables['Build.Reason'], 'PullRequest', 'Manual') }}: + - template: .azure/pipelines/jobs/default-build.yml@self + parameters: + jobName: Local_Windows + jobDisplayName: 'Test: Windows local development validation' + agentOs: Windows + isAzDOTestingJob: true + timeoutInMinutes: 240 + steps: + - script: git submodule update --init + displayName: Update submodules + - script: ./restore.cmd + displayName: Run restore.cmd + - script: ./eng/build.cmd -all -noBuildJava -noBuildNodeJS + displayName: Build (No NodeJS) + - script: npm run build + displayName: Build JS + - script: ./eng/build.cmd -all -noBuildJava -pack -c Debug + displayName: Build (Debug) + - script: ./eng/build.cmd -all -noBuildJava -pack -c Release + displayName: Build (Release) + - script: ./src/ProjectTemplates/build.cmd + -test + -NoRestore + -NoBuild + -NoBuildDeps + -configuration Release + displayName: Run project template tests + - powershell: . ./activate.ps1; ./src/ProjectTemplates/scripts/Run-BlazorWeb-Locally.ps1 -Verbose + displayName: Run Blazor web app test script + + artifacts: + - name: Local_Windows_x64_Logs_Attempt_$(System.JobAttempt) + path: artifacts/log/ + publishOnError: true + includeForks: true # Source build - template: /eng/common/templates-official/job/source-build.yml@self parameters: enableInternalSources: true platform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream8' - buildScript: './eng/build.sh --publish --no-build-repo-tasks $(_PublishArgs) $(_InternalRuntimeDownloadArgs)' - skipPublishValidation: true + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' + buildScript: './eng/build.sh' + buildArguments: '--source-build $(_InternalRuntimeDownloadArgs)' jobProperties: timeoutInMinutes: 120 variables: @@ -761,7 +738,8 @@ extends: - Windows_Test - MacOS_Test - Linux_Test - - Helix_x64 + - Helix_x64_Subset_1 + - Helix_x64_Subset_2 - ${{ if eq(variables.enableSourceIndex, 'true') }}: - SourceIndexStage1 - Source_Build_Managed diff --git a/.azure/pipelines/components-e2e-tests.yml b/.azure/pipelines/components-e2e-tests.yml index 05812d6e19b6..fc0acb70ba41 100644 --- a/.azure/pipelines/components-e2e-tests.yml +++ b/.azure/pipelines/components-e2e-tests.yml @@ -17,6 +17,25 @@ pr: branches: include: - '*' + paths: + include: + - eng/* + - src/Components/* + - src/Extensions/* + - src/Framework/* + - src/Hosting/* + - src/Http/* + - src/Middleware/HttpLogging/* + - src/Middleware/HttpOverrides/* + - src/Middleware/HttpsPolicy/* + - src/Middleware/Localization/* + - src/Middleware/Session/* + - src/Middleware/StaticFiles/* + - src/Middleware/WebSockets/* + - src/Servers/* + - src/SignalR/* + exclude: + - '**/*.md' variables: - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE @@ -49,11 +68,35 @@ jobs: displayName: Build JS - script: .dotnet/dotnet build ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-restore displayName: Build - - script: .dotnet/dotnet test ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-build --filter 'Quarantined!=true|Quarantined=false' - -p:VsTestUseMSBuildOutput=false - --logger:"trx%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.trx" - --logger:"html%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.html" - --results-directory $(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)/Unquarantined + - script: | + set -eo pipefail + + .dotnet/dotnet test ./src/Components/test/E2ETest \ + -c $(BuildConfiguration) \ + --no-build \ + --filter 'Quarantined!=true|Quarantined=false' \ + -p:VsTestUseMSBuildOutput=false \ + --logger:"trx%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.trx" \ + --logger:"html%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.html" \ + --results-directory $(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)/Unquarantined \ + | tee e2e-test-output.log + + if grep -q "No test matches the given testcase filter" e2e-test-output.log + then + echo "##vso[task.logissue type=error] No tests matched the filter." + + exit 1 + fi + + # Check total tests run to detect abnormalities. In case the number of tests changes significantly, we should adjust the threshold. + # Extract total from the summary line "Failed: xx, Passed: yy, Skipped: zz, Total: NNN, Duration: ..." + total=$(sed -nE 's/.*Failed:[[:space:]]*[0-9]+,[[:space:]]*Passed:[[:space:]]*[0-9]+,[[:space:]]*Skipped:[[:space:]]*[0-9]+,[[:space:]]*Total:[[:space:]]*([0-9]+).*/\1/p' e2e-test-output.log) + min_total=1000 + if [ -z "$total" ] || [ "$total" -lt "$min_total" ] + then + echo "##vso[task.logissue type=error] Insufficient total test count: $total. We expect at least $min_total tests to run." + exit 1 + fi displayName: Run E2E tests - script: .dotnet/dotnet test ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-build --filter 'Quarantined=true' -p:RunQuarantinedTests=true -p:VsTestUseMSBuildOutput=false diff --git a/.azure/pipelines/helix-matrix.yml b/.azure/pipelines/helix-matrix.yml index 4d20b27e700b..4f417e1c83e7 100644 --- a/.azure/pipelines/helix-matrix.yml +++ b/.azure/pipelines/helix-matrix.yml @@ -11,7 +11,6 @@ schedules: - cron: "0 9 * * *" branches: include: - - release/6.0 - release/8.0 - release/9.0 always: false diff --git a/.azure/pipelines/identitymodel-helix-matrix.yml b/.azure/pipelines/identitymodel-helix-matrix.yml index 9159fe350b7e..11e9cf0a37d8 100644 --- a/.azure/pipelines/identitymodel-helix-matrix.yml +++ b/.azure/pipelines/identitymodel-helix-matrix.yml @@ -26,7 +26,7 @@ resources: ref: refs/tags/release extends: - template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines parameters: sdl: sourceAnalysisPool: @@ -37,6 +37,8 @@ extends: compiled: enabled: false justificationForDisabling: 'This is a test-only pipeline. The same product code is already scanned in the main pipeline (aspnetcore-ci)' + featureFlags: + autoEnablePREfastWithNewRuleset: false stages: - stage: build @@ -86,7 +88,7 @@ extends: filePath: $(Build.SourcesDirectory)/eng/scripts/SetupIdentitySources.ps1 arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -IdentityModelPackageSource $(Build.StagingDirectory) # Build the shared framework - - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -pack -arch x64 /p:CrossgenOutput=false /p:IsIdentityModelTestJob=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log displayName: Build shared fx # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. diff --git a/.azure/pipelines/jobs/codesign-xplat.yml b/.azure/pipelines/jobs/codesign-xplat.yml index 800da4f41398..13ff68a3ecd1 100644 --- a/.azure/pipelines/jobs/codesign-xplat.yml +++ b/.azure/pipelines/jobs/codesign-xplat.yml @@ -19,12 +19,20 @@ jobs: inputs: artifactName: ${{ parameters.inputName }}_Packages downloadPath: $(Build.StagingDirectory)/downloaded_packages/ - itemPattern: '**/*.nupkg' + itemPattern: | + **/*.nupkg + **/*.tar.gz + **/*.deb + **/*.rpm - task: CopyFiles@2 displayName: Copy packages to ArtifactsShippingPackagesDir inputs: sourceFolder: $(Build.StagingDirectory)/downloaded_packages/ - contents: '**/*.nupkg' + contents: | + **/*.nupkg + **/*.tar.gz + **/*.deb + **/*.rpm targetFolder: $(Build.SourcesDirectory)/artifacts/packages/$(BuildConfiguration)/shipping/ flattenFolders: true - powershell: .\eng\common\build.ps1 diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml index f328550c60c2..0283be806cf1 100644 --- a/.azure/pipelines/jobs/default-build.yml +++ b/.azure/pipelines/jobs/default-build.yml @@ -62,11 +62,11 @@ parameters: isAzDOTestingJob: false enablePublishTestResults: '' enableSbom: true + continueOnError: false variables: [] configuration: 'Release' container: '' - enableRichCodeNavigation: '' installNodeJs: true timeoutInMinutes: 180 testRunTitle: $(AgentOsName)-$(BuildConfiguration) @@ -86,9 +86,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} ${{ if ne(parameters.condition, '') }}: condition: ${{ parameters.condition }} - ${{ if ne(parameters.enableRichCodeNavigation, '') }}: - enableRichCodeNavigation: true - richCodeNavigationLanguage: 'csharp,typescript,java' timeoutInMinutes: ${{ parameters.timeoutInMinutes }} cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }} ${{ if and(eq(parameters.isAzDOTestingJob, true), ne(parameters.enablePublishTestResults, false)) }}: @@ -106,13 +103,13 @@ jobs: # See https://github.com/dotnet/arcade/blob/master/Documentation/ChoosingAMachinePool.md pool: ${{ if eq(parameters.agentOs, 'macOS') }}: - vmImage: macOS-12 + vmImage: macOS-13 ${{ if eq(parameters.agentOs, 'Linux') }}: ${{ if eq(parameters.useHostedUbuntu, true) }}: - vmImage: ubuntu-20.04 + vmImage: ubuntu-22.04 ${{ else }}: name: $(DncEngPublicBuildPool) - demands: ImageOverride -equals Build.Ubuntu.2004.Amd64.Open + demands: ImageOverride -equals Build.Ubuntu.2204.Amd64.Open ${{ if eq(parameters.agentOs, 'Windows') }}: name: $(DncEngPublicBuildPool) demands: ImageOverride -equals windows.vs2022preview.amd64.open @@ -132,6 +129,8 @@ jobs: - TeamName: AspNetCore - ${{ if ne(parameters.codeSign, true) }}: - _SignType: '' + - ${{ if ne(parameters.isAzDOTestingJob, true) }}: + - MSBUILDUSESERVER: "1" - LC_ALL: 'en_US.UTF-8' - LANG: 'en_US.UTF-8' - LANGUAGE: 'en_US.UTF-8' @@ -164,10 +163,8 @@ jobs: - script: df -h displayName: Disk size - ${{ if eq(parameters.agentOs, 'macOS') }}: - - script: sudo xcode-select -s /Applications/Xcode_14.2.0.app/Contents/Developer - displayName: Use XCode 14.2.0 - - checkout: self - clean: true + - script: sudo xcode-select -s /Applications/Xcode_15.2.0.app/Contents/Developer + displayName: Use XCode 15.2.0 - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}: - powershell: ./eng/scripts/InstallProcDump.ps1 displayName: Install ProcDump @@ -210,16 +207,18 @@ jobs: ${{ step.env }} - ${{ if eq(parameters.steps, '')}}: - ${{ if eq(parameters.agentOs, 'Windows') }}: - - script: $(BuildDirectory)\build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -Configuration $(BuildConfiguration) $(BuildScriptArgs) + - script: $(BuildDirectory)\build.cmd -ci -prepareMachine -nativeToolsOnMachine -Configuration $(BuildConfiguration) $(BuildScriptArgs) /p:DotNetSignType=$(_SignType) displayName: Run build.cmd + continueOnError: ${{ parameters.continueOnError }} env: COMPlus_DbgEnableMiniDump: 1 COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core" DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token) - ${{ if ne(parameters.agentOs, 'Windows') }}: - - script: $(BuildDirectory)/build.sh --ci --nobl --configuration $(BuildConfiguration) $(BuildScriptArgs) + - script: $(BuildDirectory)/build.sh --ci --configuration $(BuildConfiguration) $(BuildScriptArgs) displayName: Run build.sh + continueOnError: ${{ parameters.continueOnError }} env: COMPlus_DbgEnableMiniDump: 1 COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core" @@ -298,9 +297,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} ${{ if ne(parameters.condition, '') }}: condition: ${{ parameters.condition }} - ${{ if ne(parameters.enableRichCodeNavigation, '') }}: - enableRichCodeNavigation: true - richCodeNavigationLanguage: 'csharp,typescript,java' timeoutInMinutes: ${{ parameters.timeoutInMinutes }} cancelTimeoutInMinutes: ${{ parameters.cancelTimeoutInMinutes }} ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}: @@ -323,11 +319,11 @@ jobs: pool: ${{ if eq(parameters.agentOs, 'macOS') }}: name: Azure Pipelines - image: macOS-12 + image: macOS-13 os: macOS ${{ if eq(parameters.agentOs, 'Linux') }}: name: $(DncEngInternalBuildPool) - image: 1es-ubuntu-2004 + image: 1es-ubuntu-2204 os: linux ${{ if eq(parameters.agentOs, 'Windows') }}: name: $(DncEngInternalBuildPool) @@ -354,6 +350,8 @@ jobs: - LANGUAGE: 'en_US.UTF-8' - ${{ if ne(parameters.codeSign, true) }}: - _SignType: '' + - ${{ if ne(parameters.isAzDOTestingJob, true) }}: + - MSBUILDUSESERVER: "1" - ${{ else }}: - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: - _SignType: real @@ -391,10 +389,8 @@ jobs: - script: df -h displayName: Disk size - ${{ if eq(parameters.agentOs, 'macOS') }}: - - script: sudo xcode-select -s /Applications/Xcode_14.2.0.app/Contents/Developer - displayName: Use XCode 14.2.0 - - checkout: self - clean: true + - script: sudo xcode-select -s /Applications/Xcode_15.2.0.app/Contents/Developer + displayName: Use XCode 15.2.0 - ${{ if and(eq(parameters.agentOs, 'Windows'), eq(parameters.isAzDOTestingJob, true)) }}: - powershell: ./eng/scripts/InstallProcDump.ps1 displayName: Install ProcDump @@ -451,16 +447,18 @@ jobs: ${{ step.env }} - ${{ if eq(parameters.steps, '')}}: - ${{ if eq(parameters.agentOs, 'Windows') }}: - - script: $(BuildDirectory)\build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -Configuration $(BuildConfiguration) $(BuildScriptArgs) + - script: $(BuildDirectory)\build.cmd -ci -prepareMachine -nativeToolsOnMachine -Configuration $(BuildConfiguration) $(BuildScriptArgs) /p:DotNetSignType=$(_SignType) displayName: Run build.cmd + continueOnError: ${{ parameters.continueOnError }} env: COMPlus_DbgEnableMiniDump: 1 COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core" DotNetBuildsInternalReadSasToken: $(dotnetbuilds-internal-container-read-token) - ${{ if ne(parameters.agentOs, 'Windows') }}: - - script: $(BuildDirectory)/build.sh --ci --nobl --configuration $(BuildConfiguration) $(BuildScriptArgs) + - script: $(BuildDirectory)/build.sh --ci --configuration $(BuildConfiguration) $(BuildScriptArgs) displayName: Run build.sh + continueOnError: ${{ parameters.continueOnError }} env: COMPlus_DbgEnableMiniDump: 1 COMPlus_DbgMiniDumpName: "$(System.DefaultWorkingDirectory)/dotnet-%d.%t.core" diff --git a/.azure/pipelines/localization.yml b/.azure/pipelines/localization.yml index 65f9c9c3ee2a..e77cdd155891 100644 --- a/.azure/pipelines/localization.yml +++ b/.azure/pipelines/localization.yml @@ -25,13 +25,42 @@ parameters: variables: - name: _TeamName value: AspNetCore -- template: /eng/common/templates/variables/pool-providers.yml - -jobs: -- ${{ if and(ne(variables['System.TeamProject'], 'public'), or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.Reason'], 'Manual'))) }}: - - template: /eng/common/templates/job/onelocbuild.yml - parameters: - CreatePr: ${{ or(ne(variables['Build.Reason'], 'Manual'), eq(parameters.createPr, 'true')) }} - LclPackageId: 'LCL-JUNO-PROD-ASPNETCORE' - LclSource: lclFilesFromPackage - MirrorRepo: aspnetcore +- template: /eng/common/templates-official/variables/pool-providers.yml@self + + +resources: + repositories: + # Repo: 1ESPipelineTemplates/1ESPipelineTemplates + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + parameters: + sdl: + sourceAnalysisPool: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + codeql: + compiled: + enabled: false + justificationForDisabling: "This pipeline doesn't build any code. The product code is already scanned in the main pipeline (aspnetcore-ci)" + pool: + name: $(DncEngInternalBuildPool) + image: 1es-windows-2022 + os: windows + + stages: + - stage: build + displayName: Build + jobs: + - ${{ if and(ne(variables['System.TeamProject'], 'public'), or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.Reason'], 'Manual'))) }}: + - template: /eng/common/templates-official/job/onelocbuild.yml@self + parameters: + CreatePr: ${{ or(ne(variables['Build.Reason'], 'Manual'), eq(parameters.createPr, 'true')) }} + LclPackageId: 'LCL-JUNO-PROD-ASPNETCORE' + LclSource: lclFilesFromPackage + MirrorRepo: aspnetcore diff --git a/.azure/pipelines/quarantined-pr.yml b/.azure/pipelines/quarantined-pr.yml index c5438a2d6af9..3ee1c1a7eb6f 100644 --- a/.azure/pipelines/quarantined-pr.yml +++ b/.azure/pipelines/quarantined-pr.yml @@ -3,7 +3,7 @@ # # Configure which branches trigger builds -# We want to run quarantined tests on release/6.0 and later as well as on PRs +# We want to run quarantined tests on release/8.0 and later as well as on PRs trigger: batch: true branches: diff --git a/.azure/pipelines/report-green.yml b/.azure/pipelines/report-green.yml new file mode 100644 index 000000000000..5037426f3af1 --- /dev/null +++ b/.azure/pipelines/report-green.yml @@ -0,0 +1,37 @@ +# This CI job only runs on PRs where all other jobs are skipped. +# This allows Build Analysis to report green. Without this, no jobs would run, +# causing Build Analysis to hang indefinitely (or until someone commented "ba-g {justification}" on the PR). + +# Only run this on PRs +trigger: none +# Run for all branches, only on paths that no-op other jobs +pr: + autoCancel: true + branches: + include: + - '*' + paths: + include: + - .devcontainer/* + - .github/* + - .vscode/* + - docs/* + - '**/*.md' + - LICENSE.TXT + - THIRD-PARTY-NOTICES.TXT + +# ABG - Always Be Green +jobs: +- template: /eng/common/templates/jobs/jobs.yml + parameters: + enableTelemetry: true + helixRepo: dotnet/aspnetcore + jobs: + - job: Report_Green + enableSBOM: false + pool: + vmImage: ubuntu-22.04 + steps: + - powershell: | + exit 0 + displayName: Exit 0 \ No newline at end of file diff --git a/.azure/pipelines/richnav.yml b/.azure/pipelines/richnav.yml deleted file mode 100644 index bbc0e27de776..000000000000 --- a/.azure/pipelines/richnav.yml +++ /dev/null @@ -1,84 +0,0 @@ -# -# See https://learn.microsoft.com/azure/devops/pipelines/yaml-schema for details on this file. -# - -# Configure which branches trigger builds -trigger: - branches: - include: - - main - - release/* - -# Do not run this pipeline for PR validation. -pr: none - -variables: -- name: _BuildArgs - value: '/p:SkipTestBuild=true' -- name: WindowsNonX64LogArgs - value: -ExcludeCIBinaryLog -- template: /eng/common/templates/variables/pool-providers.yml - -stages: -- stage: build - displayName: Build - jobs: - # Build Windows (x64/x86/arm64) - - template: jobs/default-build.yml - parameters: - jobName: Windows_build - jobDisplayName: "Build: Windows x64/x86/arm64" - enableRichCodeNavigation: true - agentOs: Windows - steps: - - script: ./eng/build.cmd - -ci - -prepareMachine - -nativeToolsOnMachine - -arch x64 - -buildNative - /p:EnableRichCodeNavigation=false - $(_BuildArgs) - displayName: Build x64 native assets - - - script: ./eng/build.cmd - -ci - -prepareMachine - -nativeToolsOnMachine - -arch x64 - -all - -noBuildNative - -noBuildRepoTasks - $(_BuildArgs) - displayName: Build x64 - - # Build the x86 shared framework - # This is going to actually build x86 native assets. - - script: ./eng/build.cmd - -ci - -prepareMachine - -nativeToolsOnMachine - -arch x86 - -all - -noBuildJava - -noBuildNodeJS - -noBuildNative - -noBuildRepoTasks - $(_BuildArgs) - $(WindowsNonX64LogArgs) - displayName: Build x86 - - # Build the arm64 shared framework - - script: ./eng/build.cmd - -ci - -prepareMachine - -nativeToolsOnMachine - -arch arm64 - -noBuildJava - -noBuildNodeJS - -noBuildNative - -noBuildRepoTasks - $(_BuildArgs) - $(WindowsNonX64LogArgs) - displayName: Build ARM64 - diff --git a/.azure/pipelines/template-tests-pr.yml b/.azure/pipelines/template-tests-pr.yml new file mode 100644 index 000000000000..612a7589c99b --- /dev/null +++ b/.azure/pipelines/template-tests-pr.yml @@ -0,0 +1,55 @@ +# Configure which branches trigger builds +# We want to run template tests on release/8.0 and later as well as on certain PRs +trigger: + batch: true + branches: + include: + - main + - release/* + +# Run PR validation on branches that include Helix tests +pr: + autoCancel: true + branches: + include: + - main + - release/* + paths: + include: + - src/ProjectTemplates/* + - src/Components/* + - src/Mvc/* + +variables: +- name: _UseHelixOpenQueues + value: ${{ ne(variables['System.TeamProject'], 'internal') }} +- ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - group: DotNet-HelixApi-Access +- template: /eng/common/templates/variables/pool-providers.yml + +jobs: +- template: jobs/default-build.yml + parameters: + jobName: Helix_templates_x64 + jobDisplayName: 'Tests: Helix template tests x64' + agentOs: Windows + timeoutInMinutes: 180 + steps: + - script: git submodule update --init + displayName: Update submodules + # Build the shared framework + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -nobl -all -pack -arch x64 + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log /p:VsTestUseMSBuildOutput=false + displayName: Build shared fx + # -noBuildRepoTasks -noBuildNative -noBuild to avoid repeating work done in the previous step. + - script: ./eng/build.cmd -ci -prepareMachine -nativeToolsOnMachine -all -noBuildRepoTasks -noBuildNative -noBuild -test + -projects eng\helix\helix.proj /p:IsHelixPRCheck=true /p:IsHelixJob=true + /p:CrossgenOutput=false /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log + /p:VsTestUseMSBuildOutput=false /p:OnlyTestProjectTemplates=true + displayName: Run build.cmd helix target + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + artifacts: + - name: Helix_logs + path: artifacts/log/ + publishOnError: true diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json index e6da50ccc844..8eb47b3ab1f6 100644 --- a/.config/tsaoptions.json +++ b/.config/tsaoptions.json @@ -8,5 +8,6 @@ ], "projectName": "DEVDIV", "repositoryName": "AspNetCore", - "template": "TFSDEVDIV" + "template": "TFSDEVDIV", + "serviceTreeId": "4db45fa9-fb0f-43ce-b523-ad1da773dfbc" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c1dd2960976b..a30ea9f0a474 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,6 +18,7 @@ "dbaeumer.vscode-eslint" ], "settings": { + "dotnet.defaultSolution": "AspNetCore.slnx", // Loading projects on demand is better for larger codebases "omnisharp.enableMsBuildLoadProjectsOnDemand": true, "omnisharp.enableRoslynAnalyzers": true, @@ -31,7 +32,7 @@ "remoteEnv": { "PATH": "${containerWorkspaceFolder}/.dotnet:${containerEnv:PATH}", "DOTNET_MULTILEVEL_LOOKUP": "0", - "TARGET": "net9.0", + "TARGET": "net10.0", "DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER": "true" }, // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. diff --git a/.editorconfig b/.editorconfig index 536c212ea709..bff8c6c606ab 100644 --- a/.editorconfig +++ b/.editorconfig @@ -464,6 +464,7 @@ dotnet_diagnostic.IDE0161.severity = silent # IDE0005: Remove unused usings. Ignore for shared src files since imports for those depend on the projects in which they are included. dotnet_diagnostic.IDE0005.severity = silent + # Verify settings [*.{received,verified}.{txt,xml,json}] charset = "utf-8-bom" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9da9605f0cc3..6afdfa38e076 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,7 +1,6 @@ # Users referenced in this file will automatically be requested as reviewers for PRs that modify the given paths. # See https://help.github.com/articles/about-code-owners/ -/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review /global.json @dotnet/aspnet-build @wtgodbe /.azure/ @dotnet/aspnet-build @wtgodbe /.azuredevops/ @dotnet/aspnet-build @wtgodbe @@ -13,39 +12,26 @@ /.github/workflows/ @dotnet/aspnet-build @wtgodbe /docs/ @captainsafia @mkArtakMSFT /eng/ @dotnet/aspnet-build @wtgodbe -/eng/common/ @dotnet-maestro-bot -/eng/Versions.props @dotnet-maestro-bot @dotnet/aspnet-build @wtgodbe -/eng/Version.Details.xml @dotnet-maestro-bot @dotnet/aspnet-build @wtgodbe -/eng/SourceBuild* @dotnet/source-build-internal +/eng/Versions.props @dotnet/aspnet-build @wtgodbe +/eng/Version.Details.xml @dotnet/aspnet-build @wtgodbe /src/Caching/ @captainsafia @halter73 @mgravell -/src/Caching/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @captainsafia @halter73 @mgravell /src/Components/ @dotnet/aspnet-blazor-eng -/src/Components/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @dotnet/aspnet-blazor-eng /src/DefaultBuilder/ @halter73 -/src/DefaultBuilder/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review /src/Grpc/ @JamesNK @captainsafia @mgravell -/src/Grpc/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @JamesNK @captainsafia @mgravell /src/Hosting/ @halter73 -/src/Hosting/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review /src/Http/ @BrennanConroy @halter73 @captainsafia -/src/Http/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy -/src/Http/Routing/ @javiercn -/src/Http/Routing/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @javiercn +/src/Http/Routing/ @halter73 /src/HttpClientFactory/ @captainsafia @halter73 -/src/HttpClientFactory/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @captainsafia @halter73 /src/Installers/ @dotnet/aspnet-build @wtgodbe /src/JSInterop/ @dotnet/aspnet-blazor-eng /src/Middleware/ @BrennanConroy -/src/Middleware/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy /src/Mvc/ @dotnet/minimal-apis -/src/Mvc/Mvc.ApiExplorer @captainsafia @halter73 @brunolins16 -/src/Mvc/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @dotnet/aspnet-blazor-eng +/src/Mvc/Mvc.ApiExplorer @captainsafia @halter73 /src/OpenApi @captainsafia @dotnet/minimal-apis /src/ProjectTemplates/Web.ProjectTemplates/content/BlazorServerWeb-CSharp/ @dotnet/aspnet-blazor-eng /src/ProjectTemplates/Web.ProjectTemplates/content/ComponentsWebAssembly-CSharp/ @dotnet/aspnet-blazor-eng -/src/Security/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review +/src/Security/ @halter73 /src/Servers/ @halter73 @BrennanConroy @JamesNK @mgravell -/src/Servers/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @halter73 @BrennanConroy @JamesNK @mgravell /src/SignalR/ @BrennanConroy @halter73 -/src/SignalR/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @BrennanConroy @halter73 /src/submodules @dotnet/aspnet-build @wtgodbe +/**/PublicAPI.*Shipped.txt @dotnet/aspnet-api-review @Rick-Anderson @tdykstra diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000000..10bf138a635c --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,14 @@ +# These are supported funding model platforms + +github: [lextm, lextudio] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +polar: # Replace with a single Polar username +buy_me_a_coffee: # Replace with a single Buy Me a Coffee username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/ISSUE_TEMPLATE/10_bug_report.yml b/.github/ISSUE_TEMPLATE/10_bug_report.yml index ad85dbc18e07..bbeb1963e519 100644 --- a/.github/ISSUE_TEMPLATE/10_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/10_bug_report.yml @@ -1,19 +1,21 @@ name: 🐞 Bug Report description: Create a report about something that is not working +labels: [triage] body: - type: markdown attributes: value: | - More information on our issue management policies can be found here: https://aka.ms/aspnet/issue-policies + More information on our issue management policies can be queried from support@lextudio.com. Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests. - If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to secure@microsoft.com. Your report may be eligible for our [bug bounty](https://www.microsoft.com/en-us/msrc/bounty-dot-net-core) but ONLY if it is reported through email. + If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to support@lextudio.com. + For other types of questions, consider using [StackOverflow](https://stackoverflow.com). - type: checkboxes attributes: label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered ([aspnetcore/issues](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue)). More information on our issue management policies is available [here](https://aka.ms/aspnet/issue-policies). + description: Please search to see if an issue already exists for the bug you encountered ([httpbridge/issues](https://github.com/lextudio/httpbridge/issues?q=is%3Aissue)). More information on our issue management policies can be queried from support@lextudio.com. options: - label: I have searched the existing issues required: true @@ -33,8 +35,8 @@ body: attributes: label: Steps To Reproduce description: | - We ❤ code! Point us to a [minimalistic project which reproduces this issue (repro)](https://github.com/dotnet/aspnetcore/blob/main/docs/repro.md) hosted in a public GitHub repo. - + We ❤ code! Point us to a minimalistic project which reproduces this issue (repro) hosted in a public GitHub repo. + We will close this issue if: - The repro project you share with us is complex. We can't investigate custom projects, so don't point us to such, please. - If we will not be able to repro the behavior you're reporting. @@ -46,23 +48,22 @@ body: attributes: label: Exceptions (if any) description: Include the exception you get when facing this issue. - placeholder: + placeholder: validations: required: false - type: input attributes: - label: .NET Version + label: HTTP Bridge Module Version description: | - Run `dotnet --version` + From Windows Control Panel, Programs and Features, find the installed version of HTTP Bridge Module. validations: required: false - type: textarea attributes: label: Anything else? description: | - - ASP.NET Core version: - - The IDE (VS / VS Code/ VS4Mac) you're running on, and its version: - - Include the output of `dotnet --info`: + - Python/Node.js/Go version: + - The IDE (VS / VS Code) you're running on, and its version: Links? References? Anything that will give us more context about the issue you are encountering! diff --git a/.github/ISSUE_TEMPLATE/20_feature_request.yml b/.github/ISSUE_TEMPLATE/20_feature_request.yml index 0806b1713a05..8ab7f3301897 100644 --- a/.github/ISSUE_TEMPLATE/20_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/20_feature_request.yml @@ -1,14 +1,15 @@ name: 💡 Feature request description: Suggest an idea for this project +labels: [triage] body: - type: markdown attributes: value: | - More information on our issue management policies can be found here: https://aka.ms/aspnet/issue-policies + More information on our issue management policies can be queried from support@lextudio.com. - type: checkboxes attributes: label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the feature you are requesting. (https://github.com/dotnet/aspnetcore/issues). + description: Please search to see if an issue already exists for the feature you are requesting. (https://github.com/lextudio/httpbridge/issues). options: - label: I have searched the existing issues required: true diff --git a/.github/ISSUE_TEMPLATE/30_api_proposal.md b/.github/ISSUE_TEMPLATE/30_api_proposal.md deleted file mode 100644 index ef043135073d..000000000000 --- a/.github/ISSUE_TEMPLATE/30_api_proposal.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: API proposal -about: Propose a change to the public API surface -title: '' -labels: api-suggestion -assignees: '' - ---- - -## Background and Motivation - - - -## Proposed API - - - -## Usage Examples - - - -## Alternative Designs - - - -## Risks - - - diff --git a/.github/ISSUE_TEMPLATE/40_design_proposal.md b/.github/ISSUE_TEMPLATE/30_design_proposal.md similarity index 97% rename from .github/ISSUE_TEMPLATE/40_design_proposal.md rename to .github/ISSUE_TEMPLATE/30_design_proposal.md index 729c78e4a2f2..7dd4d24b9e50 100644 --- a/.github/ISSUE_TEMPLATE/40_design_proposal.md +++ b/.github/ISSUE_TEMPLATE/30_design_proposal.md @@ -1,7 +1,7 @@ --- name: 🤔 Design proposal about: Collaborate on a design for a feature/fix or other change -labels: design-proposal +labels: [design-proposal,triage] --- - -## Failing Test(s) - - - -- - -## Error Message - - - -```text - -``` - -## Stacktrace - -
- - -```text - -``` -
- - -## Logs - -
- - -```text - -``` -
- -## Build - - diff --git a/.github/ISSUE_TEMPLATE/60_analyzer_proposal.md b/.github/ISSUE_TEMPLATE/60_analyzer_proposal.md deleted file mode 100644 index cafd30cf0943..000000000000 --- a/.github/ISSUE_TEMPLATE/60_analyzer_proposal.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: Analyzer proposal -about: Propose a new analyzer/codefixer or an update to an existing one -title: '' -labels: api-suggestion, analyzer -assignees: '' ---- - -## Background and Motivation - - - -## Proposed Analyzer - -### Analyzer Behavior and Message - - - - - -### Category - -- [ ] Design -- [ ] Documentation -- [ ] Globalization -- [ ] Interoperability -- [ ] Maintainability -- [ ] Naming -- [ ] Performance -- [ ] Reliability -- [ ] Security -- [ ] Style -- [ ] Usage - -### Severity Level - -- [ ] Error -- [ ] Warning -- [ ] Info -- [ ] Hidden - -## Usage Scenarios - - - -## Risks - - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5bce061f75ba..0086358db1eb 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,20 +1 @@ blank_issues_enabled: true -contact_links: - - name: Issue with Razor - url: https://github.com/dotnet/razor/issues/new/choose - about: Please open issues relating to Razor tooling or the Razor compiler in dotnet/razor. - - name: Issue with .NET runtime or core .NET libraries - url: https://github.com/dotnet/runtime/issues/new/choose - about: Please open issues relating to the .NET runtime or core .NET libraries in dotnet/runtime. - - name: Issue with .NET SDK - url: https://github.com/dotnet/sdk/issues/new/choose - about: Please open issues relating to the .NET SDK itself in dotnet/sdk. - - name: Issue with Entity Framework Core - url: https://github.com/dotnet/efcore/issues/new/choose - about: Please open issues relating to Entity Framework Core in dotnet/efcore. - - name: Issue with Roslyn compiler - url: https://github.com/dotnet/roslyn/issues/new/choose - about: Please open issues relating to the Roslyn .NET compiler in dotnet/roslyn. - - name: Bug report or feature request for Visual Studio for Windows and Mac - url: https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2022 - about: Use Visual Studio's Report a Problem feature for issues and suggestions with Visual Studio tooling diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000000..a0b2a2e577fb --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,42 @@ +## General + +* Make only high confidence suggestions when reviewing code changes. +* Always use the latest version C#, currently C# 13 features. +* Never change global.json unless explicitly asked to. +* Never change package.json or package-lock.json files unless explicitly asked to. +* Never change NuGet.config files unless explicitly asked to. + +## Formatting + +* Apply code-formatting style defined in `.editorconfig`. +* Prefer file-scoped namespace declarations and single-line using directives. +* Insert a newline before the opening curly brace of any code block (e.g., after `if`, `for`, `while`, `foreach`, `using`, `try`, etc.). +* Ensure that the final return statement of a method is on its own line. +* Use pattern matching and switch expressions wherever possible. +* Use `nameof` instead of string literals when referring to member names. +* Ensure that XML doc comments are created for any public APIs. When applicable, include `` and `` documentation in the comments. + +### Nullable Reference Types + +* Declare variables non-nullable, and check for `null` at entry points. +* Always use `is null` or `is not null` instead of `== null` or `!= null`. +* Trust the C# null annotations and don't add null checks when the type system says a value cannot be null. + +### Testing + +* We use xUnit SDK v3 for tests. +* Do not emit "Act", "Arrange" or "Assert" comments. +* Use Moq for mocking in tests. +* Copy existing style in nearby files for test method names and capitalization. + +## Running tests + +* To build and run tests in the repo, use the `build.sh` script that is located in each subdirectory within the `src` folder. For example, to run the build with tests in the `src/Http` directory, run `./src/Http/build.sh -test`. + +## .NET Environment + +* Before running any `dotnet` commands in this repository, always activate the locally installed .NET environment first by running the appropriate activation script from the repository root: + * On Windows: `. ./activate.ps1` (from repository root) + * On Linux/Mac: `source activate.sh` (from repository root) +* If not in the repository root, navigate there first or use the full path to the activation script. +* This ensures that the correct version of .NET SDK is used for the repository. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index aa65a08d99d0..11389fa622f1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,20 +1,13 @@ version: 2 -registries: - dev.azure.com: - token: ${{secrets.DEPENDABOT_NPM_TOKEN}} - type: npm-registry - url: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ updates: - - package-ecosystem: npm + - package-ecosystem: nuget directory: "/" # Perform only security updates of our npm dependencies. open-pull-requests-limit: 0 - registries: - - dev.azure.com # Schedule should be ignored for security updates. schedule: - interval: monthly + interval: weekly - package-ecosystem: "github-actions" directory: "/" @@ -62,18 +55,6 @@ updates: labels: - area-infrastructure target-branch: "release/2.1" - - package-ecosystem: "gitsubmodule" - directory: "/" - schedule: - interval: "monthly" - allow: - - dependency-type: "all" - commit-message: - prefix: "[release/6.0] " - include: scope - labels: - - area-infrastructure - target-branch: "release/6.0" - package-ecosystem: "gitsubmodule" directory: "/" schedule: diff --git a/.github/policies/resourceManagement.yml b/.github/policies/resourceManagement.yml index 273c0bc419d0..4a9c0e892785 100644 --- a/.github/policies/resourceManagement.yml +++ b/.github/policies/resourceManagement.yml @@ -1,3 +1,4 @@ +# Policybot docs live at https://eng.ms/docs/more/github-inside-microsoft/policies/resource-management id: name: GitOps.PullRequestIssueManagement description: GitOps.PullRequestIssueManagement primitive @@ -167,6 +168,45 @@ configuration: To make sure no conflicting changes have occurred, please rerun validation before merging. You can do this by leaving an `/azp run` comment here (requires commit rights), or by simply closing and reopening. - addLabel: label: pending-ci-rerun + - description: '[Idle Issue Management] Tag aspnet-build on dependency PRs (non-weekend)' + frequencies: + - weekday: + day: Tuesday + time: 0:0 + - weekday: + day: Wednesday + time: 0:0 + - weekday: + day: Thursday + time: 0:0 + - weekday: + day: Friday + time: 0:0 + filters: + - isPullRequest + - isOpen + - hasLabel: + label: 'build-ops' + - noActivitySince: + days: 1 + actions: + - addReply: + reply: This dependency PR has had no activity for a full business day - @dotnet/aspnet-build please take a look if you are on build-ops. + - description: '[Idle Issue Management] Tag aspnet-build on dependency PRs (weekend)' + frequencies: + - weekday: + day: Monday + time: 0:0 + filters: + - isPullRequest + - isOpen + - hasLabel: + label: 'build-ops' + - noActivitySince: + days: 3 + actions: + - addReply: + reply: This dependency PR has had no activity for a full business day - @dotnet/aspnet-build please take a look if you are on build-ops. eventResponderTasks: - if: - payloadType: Issue_Comment @@ -231,11 +271,13 @@ configuration: - isActivitySender: user: dotnet-maestro[bot] issueAuthor: False - - titleContains: - pattern: Update dependencies - isRegex: False - - targetsBranch: - branch: main + - or: + - titleContains: + pattern: Update dependencies + isRegex: False + - titleContains: + pattern: Source code updates + isRegex: False then: - addLabel: label: area-infrastructure @@ -244,6 +286,26 @@ configuration: - approvePullRequest: comment: Auto-approving dependency update. description: '[Infrastructure PRs] Add area-infrastructure label to dependency update Pull Requests' + - if: + - payloadType: Pull_Request + - isAction: + action: Opened + - isActivitySender: + user: dotnet-maestro[bot] + issueAuthor: False + - targetsBranch: + branch: main + - or: + - titleContains: + pattern: Update dependencies + isRegex: False + - titleContains: + pattern: Source code updates + isRegex: False + then: + - addLabel: + label: 'build-ops' + description: '[Infrastructure PRs] Add build-ops label to dependency update Pull Requests against main' - if: - payloadType: Pull_Request - isAction: @@ -261,6 +323,8 @@ configuration: label: area-infrastructure - addLabel: label: 'Type: Merge Forward :fast_forward:' + - addLabel: + label: 'build-ops' - approvePullRequest: comment: Auto-approving branch merge. description: '[Infrastructure PRs] Add area-infrastructure label to auto-merge Pull Requests' @@ -293,130 +357,6 @@ configuration: - addLabel: label: 'Attention: Shared Code Modified' description: '[Shared Code PRs] Flag PRs that affect shared code src/Shared/Runtime' - - if: - - payloadType: Pull_Request - then: - - if: - - includesModifiedFiles: - files: - - src/Components/ - - src/ProjectTemplates/BlazorWasm.ProjectTemplates/ - then: - - addLabel: - label: area-blazor - - if: - - includesModifiedFiles: - files: - - src/Tools/ - then: - - addLabel: - label: area-commandlinetools - - if: - - includesModifiedFiles: - files: - - src/DataProtection/ - then: - - addLabel: - label: area-dataprotection - - if: - - includesModifiedFiles: - files: - - src/Identity/ - then: - - addLabel: - label: area-identity - - if: - - includesModifiedFiles: - files: - - global.json - - .azure - - .config - - .github - - eng - - src/Framework/ - - src/Installers/ - then: - - addLabel: - label: area-infrastructure - - if: - - includesModifiedFiles: - files: - - src/ProjectTemplates/ - - src/Razor/ - - src/Mvc/Mvc.Localization/ - - src/Mvc/Mvc.DataAnnotations/ - - src/Mvc/Mvc.Razor.RuntimeCompilation/ - - src/Mvc/Mvc.Razor/ - - src/Mvc/Mvc.RazorPages/ - - src/Mvc/Mvc.TagHelpers/ - - src/Mvc/Mvc.ViewFeatures/ - then: - - addLabel: - label: area-mvc - - if: - - includesModifiedFiles: - files: - - src/Security/ - - src/Azure/AzureAD/ - then: - - addLabel: - label: area-security - - if: - - includesModifiedFiles: - files: - - src/Servers/ - - src/Http/ - - src/Azure/AzureAppServicesIntegration/ - - src/Azure/AzureAppServices.HostingStartup/ - - src/Middleware/ - - src/HttpClientFactory/ - - src/SiteExtensions/ - then: - - addLabel: - label: area-networking - - if: - - includesModifiedFiles: - files: - - src/SignalR/ - then: - - addLabel: - label: area-signalr - - if: - - includesModifiedFiles: - files: - - src/Grpc/ - then: - - addLabel: - label: area-grpc - - if: - - includesModifiedFiles: - files: - - src/Mvc/Mvc.Abstractions/ - - src/Mvc/Mvc.Analyzers/ - - src/Mvc/Mvc.Api.Analyzers/ - - src/Mvc/Mvc.ApiExplorer/ - - src/Mvc/Mvc.Core/ - - src/Mvc/Mvc.Cors/ - - src/Mvc/Mvc.Formatters.Json/ - - src/Mvc/Mvc.Formatters.Xml/ - - src/Mvc/Mvc.NewtonsoftJson/ - - src/Mvc/Mvc.Testing.Tasks/src/ - - src/Mvc/Mvc.Testing/ - - src/Mvc/Mvc/ - - src/OpenApi/ - - src/Mvc/perf/ - then: - - addLabel: - label: area-mvc - - if: - - includesModifiedFiles: - files: - - src/DefaultBuilder/ - - src/Hosting/ - then: - - addLabel: - label: area-hosting - description: '[PR Labelling] Apply `area-` labels to PRs' - if: - payloadType: Pull_Request - labelAdded: @@ -501,30 +441,19 @@ configuration: branch: main then: - addMilestone: - milestone: 10.0-preview1 + milestone: 10.0-rc1 description: '[Milestone Assignments] Assign Milestone to PRs merged to the `main` branch' - if: - payloadType: Pull_Request - isAction: action: Closed - targetsBranch: - branch: release/9.0-rc1 - then: - - removeMilestone - - addMilestone: - milestone: 9.0-rc1 - description: '[Milestone Assignments] Assign Milestone to PRs merged to release/9.0-rc1 branch' - - if: - - payloadType: Pull_Request - - isAction: - action: Closed - - targetsBranch: - branch: release/9.0 + branch: release/10.0-preview7 then: - removeMilestone - addMilestone: - milestone: 9.0-rc2 - description: '[Milestone Assignments] Assign Milestone to PRs merged to release/9.0 branch' + milestone: 10.0-preview7 + description: '[Milestone Assignments] Assign Milestone to PRs merged to release/10.0-preview1 branch' - if: - payloadType: Issues - isAction: @@ -627,31 +556,16 @@ configuration: - isAction: action: Opened - targetsBranch: - branch: release/6.0 - then: - - addMilestone: - milestone: 6.0.x - - addReply: - reply: >- - Hi @${issueAuthor}. If this is not a tell-mode PR, please make sure to follow the instructions laid out in the [servicing process](https://aka.ms/aspnet/servicing) document. - - Otherwise, please add `tell-mode` label. - description: Add release/6.0 targeting PRs to the servicing project - - if: - - payloadType: Pull_Request - - isAction: - action: Opened - - targetsBranch: - branch: release/2.1 + branch: release/2.3 then: - addMilestone: - milestone: 2.1.x + milestone: 2.3.x - addReply: reply: >- Hi @${issueAuthor}. If this is not a tell-mode PR, please make sure to follow the instructions laid out in the [servicing process](https://aka.ms/aspnet/servicing) document. Otherwise, please add `tell-mode` label. - description: Add release/2.1 targeting PRs to the servicing project + description: Add release/2.3 targeting PRs to the servicing project - if: - payloadType: Pull_Request - labelAdded: @@ -696,12 +610,12 @@ configuration: - isAction: action: Closed - targetsBranch: - branch: release/6.0 + branch: release/9.0 then: - removeMilestone - addMilestone: - milestone: 6.0.34 - description: '[Milestone Assignments] Assign Milestone to PRs merged to release/6.0 branch' + milestone: 9.0.9 + description: '[Milestone Assignments] Assign Milestone to PRs merged to release/9.0 branch' - if: - payloadType: Pull_Request - isAction: @@ -711,7 +625,7 @@ configuration: then: - removeMilestone - addMilestone: - milestone: 8.0.9 + milestone: 8.0.20 description: '[Milestone Assignments] Assign Milestone to PRs merged to release/8.0 branch' - if: - payloadType: Issues @@ -791,13 +705,41 @@ configuration: - titleContains: pattern: Update .NET SDK isRegex: False + - targetsBranch: + branch: main then: - addLabel: label: area-infrastructure - addLabel: label: 'Type: Dependency Update :arrow_up_small:' + - addLabel: + label: 'build-ops' - approvePullRequest: comment: Auto-approving SDK update. - description: '[Infrastructure PRs] Add area-infrastructure label to SDK update Pull Requests' + - enableAutoMerge: + mergeMethod: "squash" + description: '[Infrastructure PRs] Add area-infrastructure label to SDK update Pull Requests & enable auto-merge' + - if: + - payloadType: Pull_Request + - isAction: + action: Opened + - isActivitySender: + user: dependabot[bot] + issueAuthor: False + - targetsBranch: + branch: main + then: + - addLabel: + label: area-infrastructure + - addLabel: + label: 'Type: Dependency Update :arrow_up_small:' + - addLabel: + label: 'build-ops' + - approvePullRequest: + comment: Auto-approving dependabot update. + - enableAutoMerge: + mergeMethod: "squash" + description: '[Infrastructure PRs] Add area-infrastructure label to dependabot update Pull Requests & enable auto-merge' onFailure: onSuccess: + diff --git a/.github/prompts/ApiReview.prompt.md b/.github/prompts/ApiReview.prompt.md new file mode 100644 index 000000000000..b215608b4e3d --- /dev/null +++ b/.github/prompts/ApiReview.prompt.md @@ -0,0 +1,215 @@ +--- +mode: edit +--- + +# Instructions for Filling in an API Review Issue + +## Prerequisites + +Before you begin filling out an API review issue, gather the following information: + +* **Original issue** - The GitHub issue or feature request that prompted this API change +* **GitHub commit(s) containing the implementation** (if any) - Links to specific commits where the API was implemented + * **Pay special attention to `PublicAPI.Unshipped.txt` files** - These files contain API changes and are crucial for the review + +**ASK FOR CONFIRMATION**: Make a check-list of all the information (issue and commit). Mark the items that you have gathered. If any item is missing, ask the author to provide it before proceeding. + +## Overview + +The API review process ensures that new APIs follow common patterns and best practices while guiding engineers toward better API design decisions. The goal is to provide enough context for people working outside that feature area to understand what the change is about and give meaningful feedback. + +## Sections + +**DO NOT ADD ANY ADDITIONAL INFORMATION THAT IS NOT PART OF THE ORIGINAL ISSUE OR CODE CHANGES** +**AT THE END OF THE DOCUMENT, FOR ALL CONTENT ON EACH SECTION, YOU MUST JUSTIFY THE SOURCE FOR THAT CONTENT USING A QUOTE FRAGMENT FROM THE ORIGINAL ISSUE OR CODE CHANGES IN THIS FORMAT <>: "<>"** +**ASK FOR ADDITIONAL INFORMATION IF THERE IS NOT ENOUGH CONTEXT IN THE ORIGINAL ISSUE OR CODE CHANGES TO FILL IN A SECTION** +**YOU CAN FILL IN ANY SECTION WITH N/A IF THERE IS NO RELEVANT INFORMATION AVAILABLE** + +Fill out each section following the format and guidelines below: + +### 1. Background and Motivation + +**Purpose**: Explain the purpose and value of the new API to help reviewers understand why this change is needed. + +**Guidelines**: +- Provide a clear, concise description of the problem being solved +- Explain the current limitations or gaps that this API addresses +- Reference the original issue that prompted this change +- Focus on the "why" rather than the "how" + +**Good Example**: +> Previously, users were able to invoke JavaScript functions from .NET code using the `InvokeAsync` method from the `IJSRuntime` and `IJSObjectReference` interfaces. To perform any other JavaScript operation, they had to wrap it into a plain JavaScript function, deploy that function with their application, and invoke it via `InvokeAsync`. To reduce the need for such boilerplate code, we propose adding methods to the interop API to enable performing common operations directly. + +**Bad Example**: +> Adding a string overload for Widget.ConfigureFactory. + +### 2. Proposed API + +**Purpose**: Provide the specific public API signature diff that you are proposing. + +**Requirements**: +- Use **ref-assembly format** (more readable and useful for API review discussions) +- Include the complete namespace and type declarations +- Show additions with `+` prefix in diff format +- If linking to generated ref-assembly code in a PR, that's acceptable +- For areas that don't produce ref-assemblies, write out what it would look like in ref-assembly format + +**Format Example**: +```diff +namespace Microsoft.AspNetCore.Http; + +public static class HttpResponseWritingExtensions +{ ++ public Task WriteAsync(this HttpResponse response, StringBuilder builder); +} +``` + +**Complex API Example**: +```diff +namespace Microsoft.JSInterop +{ + public interface IJSRuntime + { ++ ValueTask GetValueAsync(string identifier); ++ ValueTask GetValueAsync(string identifier, CancellationToken cancellationToken); ++ ValueTask SetValueAsync(string identifier, TValue value); ++ ValueTask SetValueAsync(string identifier, TValue value, CancellationToken cancellationToken); + } +} +``` + +**Key Points**: +- Include all overloads and extension methods +- Show the complete type hierarchy when adding to existing interfaces +- Reference the `PublicAPI.Unshipped.txt` files if available in your implementation commits + +### 3. Usage Examples + +**Purpose**: Demonstrate how the proposed API additions are meant to be consumed to validate that the API has the right shape to be functional, performant, and usable. + +**Guidelines**: +- Provide realistic, practical code examples +- Show both simple and complex usage scenarios +- Include both synchronous and asynchronous variants (if applicable) +- Use proper C# code block formatting + +**Example Format**: +```csharp +@inject IJSRuntime JSRuntime + +// Simple property access +string title = await JSRuntime.GetValueAsync("document.title"); + +// Setting values +await JSRuntime.SetValueAsync("document.title", "Hello there"); + +// Constructor invocation +IJSObjectReference chartRef = await JSRuntime.InvokeNewAsync("Chart", chartParams); + +// Working with object references +var someChartProperty = await chartRef.GetValueAsync("somePropName"); +``` + +### 4. Alternative Designs + +**Purpose**: Show that you've considered other approaches and explain why the proposed design is the best option. + +**Include**: +- Other API shapes you considered +- Comparison to analogous APIs in other ecosystems and libraries +- Trade-offs between different approaches +- Why the proposed approach was chosen over alternatives + +**Example**: +> We considered supporting the additional operations with only the existing `InvokeAsync` method and selecting its behavior according to what JS entity is found based on the `identifier`. However, this approach has obvious UX issues (clarity, predictability). There is also no way to differentiate, in general, between "normal" and "constructor" functions in JavaScript. + +### 5. Risks + +**Purpose**: Identify potential issues or concerns with the proposed API. + +**Consider**: +- Breaking changes to existing code +- Performance implications or regressions +- Security concerns +- Compatibility issues +- Potential for misuse +- Impact on existing patterns or conventions + +**Example**: +> The added interface methods have default implementations (which throw `NotImplementedException`) to avoid breaking builds of their implementors. A possible criticism of the feature is that streamlining interop in this manner might motivate misuse of inefficient interop calls. + +## Quality Checklist + +Before marking your issue as `api-ready-for-review`, ensure: + +- [ ] **Clear description**: Includes a short description that will help reviewers not familiar with this area +- [ ] **Complete API specification**: All API changes are in ref-assembly format +- [ ] **Implementation reference**: Links to commits containing the implementation, especially `PublicAPI.Unshipped.txt` files +- [ ] **Adequate context**: Larger changes have more explanation and context +- [ ] **Usage examples**: Realistic code examples that demonstrate the API's intended use +- [ ] **Risk assessment**: Potential issues and breaking changes are identified +- [ ] **Champion identified**: Someone is assigned to champion this change in the API review meeting + +## Process Notes + +1. **Label progression**: Issues move from `api-suggestion` → `api-ready-for-review` → `api-approved` +2. **Team notification**: Notify @asp-net-api-reviews team when marking as `api-ready-for-review` +3. **Meeting attendance**: If your API is scheduled for review, you must have a representative in the meeting +4. **Implementation changes**: If changes to the original proposal are required during implementation, the review becomes obsolete and the process starts over + +## Reference Resources + +- [API Review Process Documentation](https://github.com/dotnet/aspnetcore/blob/main/docs/APIReviewProcess.md) +- [Framework Design Guidelines](https://github.com/dotnet/runtime/blob/master/docs/coding-guidelines/framework-design-guidelines-digest.md) +- [API Review Principles](https://github.com/dotnet/aspnetcore/blob/main/docs/APIReviewPrinciples.md) +- [Pending API Reviews](https://aka.ms/aspnet/apireviews) + +## Template Structure + +```markdown +## Background and Motivation + + + +## Proposed API + + + +## Usage Examples + + + +## Alternative Designs + + + +## Risks + + +``` \ No newline at end of file diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 7581f56ee981..8404f90ae630 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -14,7 +14,7 @@ permissions: jobs: backport: - uses: dotnet/arcade/.github/workflows/backport-base.yml@main + uses: dotnet/arcade/.github/workflows/backport-base.yml@fac534d85b77789bd4daf2b4c916117f1ca381e7 # 2025-01-13 with: pr_description_template: | Backport of #%source_pr_number% to %target_branch% diff --git a/.github/workflows/browsertesting-issue-body.md b/.github/workflows/browsertesting-issue-body.md new file mode 100644 index 000000000000..6555c38eb7db --- /dev/null +++ b/.github/workflows/browsertesting-issue-body.md @@ -0,0 +1,24 @@ +## Description + +Selenium is used in the aspnetcore repo for automated E2E integration testing. +Playwright is used in the aspnetcore repo for some benchmarking apps. We need to ensure the docker file and the package version match. + +## Instructions + +To update the Selenium and Playwright versions, these files need to be updated: + +### Packages + - [ ] [Selenium in `Versions.props`](eng/Versions.props) from NuGet: + - [ ] [Selenium.WebDriver](https://www.nuget.org/packages/Selenium.WebDriver/) (Config variable `SeleniumWebDriverVersion`) + - [ ] [Selenium.Support](https://www.nuget.org/packages/Selenium.Support/) (Config variable `SeleniumSupportVersion`) + - [ ] Ensure Playwright versions match + - [ ] [Blazor Wasm benchmarks in `src/Components/benchmarkapps/Wasm.Performance/dockerfile`](src/Components/benchmarkapps/Wasm.Performance/dockerfile) (image starts with `mcr.microsoft.com`) + - [ ] [Playwright package version](eng/Versions.props) (Config variable `PlaywrightVersion`) + +## Actions + +Please, open the PR against `main` branch and include changes to the files listed above. + +Also: +- mention @dotnet/aspnet-build in the opened Pull Request - this will be a responsible engineer for changes validation. +- add the `build-ops` label to the opened Pull Request diff --git a/.github/workflows/browsertesting-open-issue.yml b/.github/workflows/browsertesting-open-issue.yml new file mode 100644 index 000000000000..b50c3a56c9ee --- /dev/null +++ b/.github/workflows/browsertesting-open-issue.yml @@ -0,0 +1,29 @@ +name: "[Monthly] Schedule Browser-Testing Dependencies Update Issue" + +on: + schedule: + # Runs on the first day of every month at midnight UTC + - cron: '0 0 1 * *' + workflow_dispatch: # for manual triggering + +jobs: + create-issue: + runs-on: ubuntu-latest + permissions: + contents: read + issues: write + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + # copilot can be assigned to the issue + # https://cli.github.com/manual/gh_issue_create + - name: Create Issue From Template + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + run: | + gh issue create \ + --title "Request Browser-Testing Dependencies Update" \ + --body-file ".github/workflows/browsertesting-issue-body.md" \ + --assignee "@copilot" diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml new file mode 100644 index 000000000000..2714754f2c09 --- /dev/null +++ b/.github/workflows/copilot-setup-steps.yml @@ -0,0 +1,24 @@ +name: "Copilot Setup Steps" + +# Allow testing of the setup steps from your repository's "Actions" tab. +on: workflow_dispatch + +jobs: + # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot. + copilot-setup-steps: + runs-on: 8-core-ubuntu-latest + + permissions: + contents: read + + # You can define any steps you want, and they will run before the agent starts. + # If you do not check out your code, Copilot will do this for you. + steps: + - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 + + # Include PrepareForHelix to maximise what is downloaded here + - name: Build solution + env: + # prevent GitInfo errors + CI: false + run: ./restore.sh diff --git a/.github/workflows/inter-branch-merge-flow.yml b/.github/workflows/inter-branch-merge-flow.yml index 20246c14fc58..135609265f53 100644 --- a/.github/workflows/inter-branch-merge-flow.yml +++ b/.github/workflows/inter-branch-merge-flow.yml @@ -10,4 +10,4 @@ permissions: jobs: Merge: - uses: dotnet/arcade/.github/workflows/inter-branch-merge-base.yml@main \ No newline at end of file + uses: dotnet/arcade/.github/workflows/inter-branch-merge-base.yml@fac534d85b77789bd4daf2b4c916117f1ca381e7 # 2024-06-24 diff --git a/.github/workflows/labeler-cache-retention.yml b/.github/workflows/labeler-cache-retention.yml new file mode 100644 index 000000000000..151ff1c9d09d --- /dev/null +++ b/.github/workflows/labeler-cache-retention.yml @@ -0,0 +1,40 @@ +# Workflow template imported and updated from: +# https://github.com/dotnet/issue-labeler/wiki/Onboarding +# +# See labeler.md for more information +# +# Regularly restore the prediction models from cache to prevent cache eviction +name: "Labeler: Cache Retention" + +# For more information about GitHub's action cache limits and eviction policy, see: +# https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy + +on: + schedule: + - cron: "32 16 * * *" # 16:32 every day (arbitrary time daily) + + workflow_dispatch: + inputs: + cache_key: + description: "The cache key suffix to use for restoring the model from cache. Defaults to 'ACTIVE'." + required: true + default: "ACTIVE" + +env: + CACHE_KEY: ${{ inputs.cache_key || 'ACTIVE' }} + +jobs: + restore-cache: + # Do not automatically run the workflow on forks outside the 'dotnet' org + if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'dotnet' }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + type: ["issues", "pulls"] + steps: + - uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: ${{ matrix.type }} + cache_key: ${{ env.CACHE_KEY }} + fail-on-cache-miss: true diff --git a/.github/workflows/labeler-predict-issues.yml b/.github/workflows/labeler-predict-issues.yml new file mode 100644 index 000000000000..a12efc1512af --- /dev/null +++ b/.github/workflows/labeler-predict-issues.yml @@ -0,0 +1,60 @@ +# Workflow template imported and updated from: +# https://github.com/dotnet/issue-labeler/wiki/Onboarding +# +# See labeler.md for more information +# +# Predict labels for Issues using a trained model +name: "Labeler: Predict (Issues)" + +on: + # Only automatically predict area labels when issues are first opened + issues: + types: opened + + # Allow dispatching the workflow via the Actions UI, specifying ranges of numbers + workflow_dispatch: + inputs: + issues: + description: "Issue Numbers (comma-separated list of ranges)." + required: true + cache_key: + description: "The cache key suffix to use for restoring the model. Defaults to 'ACTIVE'." + required: true + default: "ACTIVE" + +env: + # Do not allow failure for jobs triggered automatically (as this causes red noise on the workflows list) + ALLOW_FAILURE: ${{ github.event_name == 'workflow_dispatch' }} + + LABEL_PREFIX: "area-" + THRESHOLD: 0.40 + DEFAULT_LABEL: "needs-area-label" + +jobs: + predict-issue-label: + # Do not automatically run the workflow on forks outside the 'dotnet' org + if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'dotnet' }} + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: "Restore issues model from cache" + id: restore-model + uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: issues + fail-on-cache-miss: ${{ env.ALLOW_FAILURE }} + quiet: true + + - name: "Predict issue labels" + id: prediction + if: ${{ steps.restore-model.outputs.cache-hit == 'true' }} + uses: dotnet/issue-labeler/predict@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + issues: ${{ inputs.issues || github.event.issue.number }} + label_prefix: ${{ env.LABEL_PREFIX }} + threshold: ${{ env.THRESHOLD }} + default_label: ${{ env.DEFAULT_LABEL }} + env: + GITHUB_TOKEN: ${{ github.token }} + continue-on-error: ${{ !env.ALLOW_FAILURE }} diff --git a/.github/workflows/labeler-predict-pulls.yml b/.github/workflows/labeler-predict-pulls.yml new file mode 100644 index 000000000000..7a89fa03f679 --- /dev/null +++ b/.github/workflows/labeler-predict-pulls.yml @@ -0,0 +1,73 @@ +# Workflow template imported and updated from: +# https://github.com/dotnet/issue-labeler/wiki/Onboarding +# +# See labeler.md for more information +# +# Predict labels for Pull Requests using a trained model +name: "Labeler: Predict (Pulls)" + +on: + # Per to the following documentation: + # https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request_target + # + # The `pull_request_target` event runs in the context of the base of the pull request, rather + # than in the context of the merge commit, as the `pull_request` event does. This prevents + # execution of unsafe code from the head of the pull request that could alter the repository + # or steal any secrets you use in your workflow. This event allows your workflow to do things + # like label or comment on pull requests from forks. + # + # Only automatically predict area labels when pull requests are first opened + pull_request_target: + types: opened + + # Configure the branches that need to have PRs labeled + branches: + - main + + # Allow dispatching the workflow via the Actions UI, specifying ranges of numbers + workflow_dispatch: + inputs: + pulls: + description: "Pull Request Numbers (comma-separated list of ranges)." + required: true + cache_key: + description: "The cache key suffix to use for restoring the model. Defaults to 'ACTIVE'." + required: true + default: "ACTIVE" + +env: + # Do not allow failure for jobs triggered automatically (this can block PR merge) + ALLOW_FAILURE: ${{ github.event_name == 'workflow_dispatch' }} + + LABEL_PREFIX: "area-" + THRESHOLD: 0.40 + DEFAULT_LABEL: "needs-area-label" + +jobs: + predict-pull-label: + # Do not automatically run the workflow on forks outside the 'dotnet' org + if: ${{ github.event_name == 'workflow_dispatch' || github.repository_owner == 'dotnet' }} + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - name: "Restore pulls model from cache" + id: restore-model + uses: dotnet/issue-labeler/restore@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: pulls + fail-on-cache-miss: ${{ env.ALLOW_FAILURE }} + quiet: true + + - name: "Predict pull labels" + id: prediction + if: ${{ steps.restore-model.outputs.cache-hit == 'true' }} + uses: dotnet/issue-labeler/predict@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + pulls: ${{ inputs.pulls || github.event.number }} + label_prefix: ${{ env.LABEL_PREFIX }} + threshold: ${{ env.THRESHOLD }} + default_label: ${{ env.DEFAULT_LABEL }} + env: + GITHUB_TOKEN: ${{ github.token }} + continue-on-error: ${{ !env.ALLOW_FAILURE }} diff --git a/.github/workflows/labeler-promote.yml b/.github/workflows/labeler-promote.yml new file mode 100644 index 000000000000..c01086c51779 --- /dev/null +++ b/.github/workflows/labeler-promote.yml @@ -0,0 +1,54 @@ +# Workflow template imported and updated from: +# https://github.com/dotnet/issue-labeler/wiki/Onboarding +# +# See labeler.md for more information +# +# Promote a model from staging to 'ACTIVE', backing up the currently 'ACTIVE' model +name: "Labeler: Promotion" + +on: + # Dispatched via the Actions UI, promotes the staged models from + # a staged slot into the prediction environment + workflow_dispatch: + inputs: + issues: + description: "Issues: Promote Model" + type: boolean + required: true + pulls: + description: "Pulls: Promote Model" + type: boolean + required: true + staged_key: + description: "The cache key suffix to use for promoting a staged model to 'ACTIVE'. Defaults to 'staged'." + required: true + default: "staged" + backup_key: + description: "The cache key suffix to use for backing up the currently active model. Defaults to 'backup'." + default: "backup" + +permissions: + actions: write + +jobs: + promote-issues: + if: ${{ inputs.issues }} + runs-on: ubuntu-latest + steps: + - name: "Promote Model for Issues" + uses: dotnet/issue-labeler/promote@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "issues" + staged_key: ${{ inputs.staged_key }} + backup_key: ${{ inputs.backup_key }} + + promote-pulls: + if: ${{ inputs.pulls }} + runs-on: ubuntu-latest + steps: + - name: "Promote Model for Pull Requests" + uses: dotnet/issue-labeler/promote@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "pulls" + staged_key: ${{ inputs.staged_key }} + backup_key: ${{ inputs.backup_key }} diff --git a/.github/workflows/labeler-train.yml b/.github/workflows/labeler-train.yml new file mode 100644 index 000000000000..79ad2db0cced --- /dev/null +++ b/.github/workflows/labeler-train.yml @@ -0,0 +1,161 @@ +# Workflow template imported and updated from: +# https://github.com/dotnet/issue-labeler/wiki/Onboarding +# +# See labeler.md for more information +# +# Train the Issues and Pull Requests models for label prediction +name: "Labeler: Training" + +on: + workflow_dispatch: + inputs: + type: + description: "Issues or Pull Requests" + type: choice + required: true + default: "Both" + options: + - "Both" + - "Issues" + - "Pull Requests" + + steps: + description: "Training Steps" + type: choice + required: true + default: "All" + options: + - "All" + - "Download Data" + - "Train Model" + - "Test Model" + + limit: + description: "Max number of items to download for training/testing the model (newest items are used). Defaults to the max number of pages times the page size." + type: number + page_size: + description: "Number of items per page in GitHub API requests. Defaults to 100 for issues, 25 for pull requests." + type: number + page_limit: + description: "Maximum number of pages to download for training/testing the model. Defaults to 1000 for issues, 4000 for pull requests." + type: number + cache_key_suffix: + description: "The cache key suffix to use for staged data/models (use 'ACTIVE' to bypass staging). Defaults to 'staged'." + required: true + default: "staged" + +env: + CACHE_KEY: ${{ inputs.cache_key_suffix }} + REPOSITORY: ${{ github.repository }} + LABEL_PREFIX: "area-" + THRESHOLD: "0.40" + LIMIT: ${{ inputs.limit }} + PAGE_SIZE: ${{ inputs.page_size }} + PAGE_LIMIT: ${{ inputs.page_limit }} + +jobs: + download-issues: + if: ${{ contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Download Data"]'), inputs.steps) }} + runs-on: ubuntu-latest + permissions: + issues: read + steps: + - name: "Download Issues" + uses: dotnet/issue-labeler/download@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "issues" + cache_key: ${{ env.CACHE_KEY }} + repository: ${{ env.REPOSITORY }} + label_prefix: ${{ env.LABEL_PREFIX }} + limit: ${{ env.LIMIT }} + page_size: ${{ env.PAGE_SIZE }} + page_limit: ${{ env.PAGE_LIMIT }} + env: + GITHUB_TOKEN: ${{ github.token }} + + download-pulls: + if: ${{ contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Download Data"]'), inputs.steps) }} + runs-on: ubuntu-latest + permissions: + pull-requests: read + steps: + - name: "Download Pull Requests" + uses: dotnet/issue-labeler/download@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "pulls" + cache_key: ${{ env.CACHE_KEY }} + repository: ${{ env.REPOSITORY }} + label_prefix: ${{ env.LABEL_PREFIX }} + limit: ${{ env.LIMIT }} + page_size: ${{ env.PAGE_SIZE }} + page_limit: ${{ env.PAGE_LIMIT }} + env: + GITHUB_TOKEN: ${{ github.token }} + + train-issues: + if: ${{ always() && contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Train Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.download-issues.result) }} + runs-on: ubuntu-latest + permissions: {} + needs: download-issues + steps: + - name: "Train Model for Issues" + uses: dotnet/issue-labeler/train@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "issues" + data_cache_key: ${{ env.CACHE_KEY }} + model_cache_key: ${{ env.CACHE_KEY }} + + train-pulls: + if: ${{ always() && contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Train Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.download-pulls.result) }} + runs-on: ubuntu-latest + permissions: {} + needs: download-pulls + steps: + - name: "Train Model for Pull Requests" + uses: dotnet/issue-labeler/train@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "pulls" + data_cache_key: ${{ env.CACHE_KEY }} + model_cache_key: ${{ env.CACHE_KEY }} + + test-issues: + if: ${{ always() && contains(fromJSON('["Both", "Issues"]'), inputs.type) && contains(fromJSON('["All", "Test Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.train-issues.result) }} + runs-on: ubuntu-latest + permissions: + issues: read + needs: train-issues + steps: + - name: "Test Model for Issues" + uses: dotnet/issue-labeler/test@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "issues" + cache_key: ${{ env.CACHE_KEY }} + repository: ${{ env.REPOSITORY }} + label_prefix: ${{ env.LABEL_PREFIX }} + threshold: ${{ env.THRESHOLD }} + limit: ${{ env.LIMIT }} + page_size: ${{ env.PAGE_SIZE }} + page_limit: ${{ env.PAGE_LIMIT }} + env: + GITHUB_TOKEN: ${{ github.token }} + + test-pulls: + if: ${{ always() && contains(fromJSON('["Both", "Pull Requests"]'), inputs.type) && contains(fromJSON('["All", "Test Model"]'), inputs.steps) && contains(fromJSON('["success", "skipped"]'), needs.train-pulls.result) }} + runs-on: ubuntu-latest + permissions: + pull-requests: read + needs: train-pulls + steps: + - name: "Test Model for Pull Requests" + uses: dotnet/issue-labeler/test@46125e85e6a568dc712f358c39f35317366f5eed # v2.0.0 + with: + type: "pulls" + cache_key: ${{ env.CACHE_KEY }} + repository: ${{ env.REPOSITORY }} + label_prefix: ${{ env.LABEL_PREFIX }} + threshold: ${{ env.THRESHOLD }} + limit: ${{ env.LIMIT }} + page_size: ${{ env.PAGE_SIZE }} + page_limit: ${{ env.PAGE_LIMIT }} + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/labeler.md b/.github/workflows/labeler.md new file mode 100644 index 000000000000..502ebb98a8d0 --- /dev/null +++ b/.github/workflows/labeler.md @@ -0,0 +1,32 @@ +# Issue-Labeler Workflows + +This repository uses actions from [dotnet/issue-labeler](https://github.com/dotnet/issue-labeler) to predict area labels for issues and pull requests. + +The following workflow templates were imported and updated from [dotnet/issue-labeler/wiki/Onboarding](https://github.com/dotnet/issue-labeler/wiki/Onboarding): + +1. `labeler-cache-retention.yml` +2. `labeler-predict-issues.yml` +3. `labeler-predict-pulls.yml` +4. `labeler-promote.yml` +5. `labeler-train.yml` + +## Repository Configuration + +Across these workflows, the following changes were made to configure the issue labeler for this repository: + +1. Set `LABEL_PREFIX` to `"area-"`: + - `labeler-predict-issues.yml` + - `labeler-predict-pulls.yml` + - `labeler-train.yml` +2. Set `DEFAULT_LABEL` to `"needs-area-label"`: + - `labeler-predict-issues.yml` + - `labeler-predict-pulls.yml` +3. Remove the `EXCLUDED_AUTHORS` value as we do not bypass labeling for any authors' issues/pulls in this repository: + - `labeler-predict-issues.yml` + - `labeler-predict-pulls.yml` +4. Update the pull request labeling branches to include `main` and `release/*`: + - `labeler-predict-pulls.yml` +5. Remove the `repository` input for training the models against another repository: + - `labeler-train.yml` +6. Update the cache retention cron schedule to an arbitrary time of day: + - `labeler-cache-retention.yml` diff --git a/.github/workflows/locker.yml b/.github/workflows/locker.yml index 592b01424740..c7248ea716e4 100644 --- a/.github/workflows/locker.yml +++ b/.github/workflows/locker.yml @@ -1,7 +1,7 @@ name: Locker - Lock stale issues on: schedule: - - cron: '34 8 * * *' # Once per day, overnight PT, uncommon minute of hour + - cron: '34 12 * * 1-5' # Once per weekday, overnight PT, uncommon minute of hour workflow_dispatch: # Manual triggering through the GitHub UI, API, or CLI @@ -23,7 +23,7 @@ jobs: if: ${{ github.repository_owner == 'dotnet' }} steps: - name: Checkout Actions - uses: actions/checkout@v4 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 with: repository: "microsoft/vscode-github-triage-actions" path: ./actions diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml index 41149467e7a6..1b50d0b4d6cd 100644 --- a/.github/workflows/markdownlint.yml +++ b/.github/workflows/markdownlint.yml @@ -16,13 +16,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 16.x - name: Run Markdownlint run: | echo "::add-matcher::.github/workflows/markdownlint-problem-matcher.json" - npm i -g markdownlint-cli + npm i -g markdownlint-cli@0.45.0 markdownlint "docs/**/*.md" diff --git a/.github/workflows/runtime-sync.yml b/.github/workflows/runtime-sync.yml index 7dd10fa99595..23be75e0b7c7 100644 --- a/.github/workflows/runtime-sync.yml +++ b/.github/workflows/runtime-sync.yml @@ -21,14 +21,14 @@ jobs: runs-on: windows-latest steps: - name: Checkout aspnetcore - uses: actions/checkout@v4 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 with: # Test this script using changes in a fork repository: 'dotnet/aspnetcore' path: aspnetcore ref: main - name: Checkout runtime - uses: actions/checkout@v4 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 with: # Test this script using changes in a fork repository: 'dotnet/runtime' @@ -47,7 +47,7 @@ jobs: mkdir ..\artifacts git status > ..\artifacts\status.txt git diff > ..\artifacts\diff.txt - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: results path: artifacts @@ -64,7 +64,7 @@ jobs: - name: Send PR if: steps.check.outputs.sendpr == 'true' # https://github.com/marketplace/actions/create-pull-request - uses: dotnet/actions-create-pull-request@v4 + uses: dotnet/actions-create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4.2.3 with: token: ${{ secrets.GITHUB_TOKEN }} path: .\aspnetcore diff --git a/.github/workflows/update-jquery-validate.yml b/.github/workflows/update-jquery-validate.yml index d30b0dcc49ab..acd3fc13f179 100644 --- a/.github/workflows/update-jquery-validate.yml +++ b/.github/workflows/update-jquery-validate.yml @@ -16,10 +16,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: '20.x' @@ -39,7 +39,7 @@ jobs: run: node update-jquery-validate.mjs - name: Create Pull Request - uses: dotnet/actions-create-pull-request@v4 + uses: dotnet/actions-create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4.2.3 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: Update jquery.validate to ${{ env.JQUERY_VALIDATE_VERSION }} diff --git a/.github/workflows/update-sdk.yml b/.github/workflows/update-sdk.yml index c96f6b550c5c..042dd33eac28 100644 --- a/.github/workflows/update-sdk.yml +++ b/.github/workflows/update-sdk.yml @@ -19,8 +19,8 @@ jobs: name: Update .NET SDK runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: martincostello/update-dotnet-sdk@67d6e2b14939c06978a7f80444157296c3defe14 # v3.2.3 + - uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 + - uses: martincostello/update-dotnet-sdk@76e2c0df2303d4f6a404228105ebb7d60ace0556 # v3.4.0 with: quality: 'daily' repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-selenium-and-playwright-dependencies.yml b/.github/workflows/update-selenium-and-playwright-dependencies.yml new file mode 100644 index 000000000000..15b720fcfe2e --- /dev/null +++ b/.github/workflows/update-selenium-and-playwright-dependencies.yml @@ -0,0 +1,24 @@ +name: Update Selenium and Playwright dependencies + +on: + schedule: + - cron: '0 0 1-7 * 1' # Run on the first monday of the month + workflow_dispatch: # Allow manual runs + +permissions: + contents: write + issues: write + pull-requests: write + +jobs: + update-selenium-and-playwright: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 + + - name: Update dependencies + run: pwsh eng/scripts/update-selenium-and-playwright-versions.ps1 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/validate-npm-package-lock-json.yml b/.github/workflows/validate-npm-package-lock-json.yml index 74517b153788..288566e8d04e 100644 --- a/.github/workflows/validate-npm-package-lock-json.yml +++ b/.github/workflows/validate-npm-package-lock-json.yml @@ -14,13 +14,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.2.2 with: fetch-depth: 0 submodules: false - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20.x diff --git a/.gitignore b/.gitignore index 5f426a1c8a8f..ac1192650b58 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ artifacts/ bin/ obj/ .dotnet/ +.gradle/ .nuget/ .packages/ .tools/ @@ -13,6 +14,7 @@ BenchmarkDotNet.Artifacts/ src/SignalR/clients/**/dist/ modules/ .ionide/ +TestResults/ # File extensions *.aps @@ -33,9 +35,11 @@ modules/ *.suo *.svclog *.tlog +*.trx *.user *.userprefs *.vspx +*.json.bak # Specific files, typically generated by tools .config/dotnet-tools.json diff --git a/.globalconfig b/.globalconfig index 202ab97159d2..d1455dda013d 100644 --- a/.globalconfig +++ b/.globalconfig @@ -12,3 +12,20 @@ dotnet_diagnostic.CA1310.severity = error # TODO: remove this - https://github.com/dotnet/aspnetcore/issues/47912 dotnet_diagnostic.EnableGenerateDocumentationFile.severity = none + +# Referencing types that are defined in M.CA.Workspaces is not appropriate +# for analyzers or source generators that might be invoked from a command +# line build because editor-specific types in M.CA.Workspaces are not +# available in the command line. By default, Roslyn enables RS1038 +# which does a strict check and throws if a reference to M.CA.Workspaces +# is included in the assembly. Here, we opt for a more relaxed check that +# validates if M.CA.Workspace type references are included in the specific +# Roslyn components that might be loaded in command line builds. We do this +# because we ship editor-specific components, like the routing completion +# providers, in the shared framework and want to avoid the analyzers warning +# on the M.CA.Workspaces reference required for their components even though +# they are never loaded in command line builds. Note: the "relaxed" check that is +# enabled here will actually examine the types loaded by each individually analyzer +# to see if they are from a Workspaces assembly so it will take longer than the +# greedier (and stricter) check for references overall. +roslyn_correctness.assembly_reference_validation = relaxed diff --git a/ANCM.slnx b/ANCM.slnx new file mode 100644 index 000000000000..06e0cfaad0e3 --- /dev/null +++ b/ANCM.slnx @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/AspNetCore.sln b/AspNetCore.sln deleted file mode 100644 index 5a54800dae83..000000000000 --- a/AspNetCore.sln +++ /dev/null @@ -1,11862 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31606.5 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{C28A32F6-8314-412E-9F3B-CBD31C23E878}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{0F84F170-57D0-496B-8E2C-7984178EF69F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaselineGenerator", "eng\tools\BaselineGenerator\BaselineGenerator.csproj", "{03C2290A-1C48-489A-81DB-F3447B0DA595}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RepoTasks", "eng\tools\RepoTasks\RepoTasks.csproj", "{2B94628A-CFFB-447E-8026-A126C33B0917}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{017429CC-C5FB-48B4-9C46-034E29EE2F06}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc", "Mvc", "{1A0EFF9F-E699-4303-AE50-BFAF9804EEB6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc", "Mvc", "{819B136D-B8B6-46AE-8C4F-5469BBBFC46B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc", "src\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj", "{D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SignalR", "SignalR", "{5BC5A805-DCA0-41DF-91B8-520B5DAD57DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{2C022280-340C-43DC-B63D-5A644F0ECBF2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SignalR", "SignalR", "{B6081DA9-738E-4088-92DD-7FFA200523C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR", "src\SignalR\server\SignalR\src\Microsoft.AspNetCore.SignalR.csproj", "{BE70E100-E6C4-4686-8592-73E2A04E877F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Components", "Components", "{60D51C98-2CC0-40DF-B338-44154EFEE2FF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{6DE916F5-E78F-446C-89CB-9240AED2A2E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Server", "src\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj", "{7546E2DD-2CF4-4240-8045-2533DF539458}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Antiforgery", "Antiforgery", "{B55A5DE1-5AF3-4B18-AF04-C1735B071DA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery", "src\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj", "{210B7FF8-ADD2-4E11-831A-41B28F423E44}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http", "Http", "{627BE8B3-59E6-4F1D-8C9C-76B804D41724}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.Abstractions", "Authentication.Abstractions", "{AB0ED518-C27C-42D9-8D66-5F974033F855}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Abstractions", "src\Http\Authentication.Abstractions\src\Microsoft.AspNetCore.Authentication.Abstractions.csproj", "{18E65289-27FC-4EC6-BFE8-9FA852381319}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.Core", "Authentication.Core", "{5CF8E05A-C8DD-4551-8542-844A217B39F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core", "src\Http\Authentication.Core\src\Microsoft.AspNetCore.Authentication.Core.csproj", "{74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Security", "Security", "{A39335E5-7A26-4CFD-BF3B-2CFE75113498}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authorization", "Authorization", "{EB593520-0853-4642-A404-675FC318D181}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{EA034D9C-3281-426B-A363-FF1C05D12483}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization", "src\Security\Authorization\Core\src\Microsoft.AspNetCore.Authorization.csproj", "{C2751270-6970-4CC8-8D8C-81A4B8D26446}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Policy", "Policy", "{C63C5E92-1511-45A5-A160-0FCC9B3E3CDB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Policy", "src\Security\Authorization\Policy\src\Microsoft.AspNetCore.Authorization.Policy.csproj", "{E2083951-98E7-4C1C-AB3A-935EA6311018}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Components", "Components", "{B59D558B-AC58-4BA4-B5AF-AE51C8531B28}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components", "src\Components\Components\src\Microsoft.AspNetCore.Components.csproj", "{A345753F-B4FA-43E4-8275-151FA5B70728}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web", "Web", "{08B240FC-AE5D-478A-963D-890ADE70B0B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web", "src\Components\Web\src\Microsoft.AspNetCore.Components.Web.csproj", "{34A797ED-AC07-476D-BEB1-E86DBBF2395A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Servers", "Servers", "{0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Connections.Abstractions", "Connections.Abstractions", "{78DD1AC3-0981-4109-861B-C3E2F1FC3281}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Connections.Abstractions", "src\Servers\Connections.Abstractions\src\Microsoft.AspNetCore.Connections.Abstractions.csproj", "{D5D2C620-42B7-4ECF-A892-295BB124A833}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Middleware", "Middleware", "{E5963C9F-20A6-4385-B364-814D2581FADF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CORS", "CORS", "{27223011-E8E9-4178-9377-44A7B3CBCC21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors", "src\Middleware\CORS\src\Microsoft.AspNetCore.Cors.csproj", "{8CDA0BDC-05C2-451F-9990-2BEF471684BF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataProtection", "DataProtection", "{380430A1-C02F-4943-8A52-FDFA9F7735F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cryptography.Internal", "Cryptography.Internal", "{5B27FAB7-E5FE-4FF2-8F39-900E177D5E39}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal", "src\DataProtection\Cryptography.Internal\src\Microsoft.AspNetCore.Cryptography.Internal.csproj", "{392701C6-0BDB-4505-ADB8-1475770A2421}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataProtection", "DataProtection", "{682157DB-17F2-40D6-B0ED-11B6C6CB064B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection", "src\DataProtection\DataProtection\src\Microsoft.AspNetCore.DataProtection.csproj", "{DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abstractions", "Abstractions", "{64D54BBB-13D1-4655-A149-CFB754820BD2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions", "src\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "{5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Diagnostics.Abstractions", "Diagnostics.Abstractions", "{ECB76EBA-0512-4449-95AA-7258F543BA2E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Abstractions", "src\Middleware\Diagnostics.Abstractions\src\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj", "{1D6348B5-0616-41A6-90ED-09D34C452926}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{2DB7E3C7-D213-4609-95DD-72561F23AB58}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abstractions", "Abstractions", "{83C6944F-8F6C-4698-A09A-25DB92BA1AD2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Abstractions", "src\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj", "{456056B5-3888-47AB-AFD7-4F16A8A1454F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server.Abstractions", "Server.Abstractions", "{44663691-023E-48D0-9757-A106974E8AAE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Server.Abstractions", "src\Hosting\Server.Abstractions\src\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", "{4DE12851-6ABC-4675-84B8-0E0EFA142F79}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Html", "Html", "{13E7C397-F40B-4791-B853-F7430AF88D00}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abstractions", "Abstractions", "{412D4C15-F48F-4DB1-940A-131D1AA87088}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Html.Abstractions", "src\Html.Abstractions\src\Microsoft.AspNetCore.Html.Abstractions.csproj", "{A400C938-46E2-4B84-B06E-487B13D22E1B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http", "Http", "{3D330C1E-D773-4BA8-9E91-123544B0D672}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "src\Http\Http\src\Microsoft.AspNetCore.Http.csproj", "{563714CA-0022-4A95-BDBB-0953541193CA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Abstractions", "Http.Abstractions", "{DCBBDB52-4A49-4141-8F4D-81C0FFFB7BD5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions", "src\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj", "{E55659A7-5489-4E86-B11C-2E41697555F7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{1A304CA0-7795-4684-88E5-E66402966927}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Connections", "Http.Connections", "{A0FFAF00-D628-4BDB-BE68-8DBA21FBBEA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections", "src\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj", "{627F94BE-AD74-4188-9F61-12E5096DA826}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Connections.Common", "Http.Connections.Common", "{BC0E5F62-06EE-407D-83C6-490785E9A011}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Common", "src\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj", "{F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Extensions", "Http.Extensions", "{225AEDCF-7162-4A86-AC74-06B84660B379}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions", "src\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj", "{606C2615-3E08-4A08-993F-FBD90F4CD021}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Features", "Http.Features", "{BFDD5ACE-A1F0-4C33-8DA1-06CB5CA53177}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features", "src\Http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj", "{62043A86-BC6F-432E-9AFD-F3B616192D8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization", "Localization", "{9934060B-1957-40FF-83E1-5C15344E7A33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization", "src\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj", "{EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Abstractions", "Mvc.Abstractions", "{D685AF51-2CE2-4CD8-86AA-FB0EDD47533F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions", "src\Mvc\Mvc.Abstractions\src\Microsoft.AspNetCore.Mvc.Abstractions.csproj", "{600CB408-C94D-4F69-83DB-D99EF6DAE0E1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.ApiExplorer", "Mvc.ApiExplorer", "{0322CF4A-9701-4E7E-9827-BC7DFFA78842}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer", "src\Mvc\Mvc.ApiExplorer\src\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj", "{3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Core", "Mvc.Core", "{5F51EB21-20E2-4793-A137-2E18D50696C5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core", "src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj", "{9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Cors", "Mvc.Cors", "{7ACD11D4-4682-4936-AFF6-DAC64C636612}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors", "src\Mvc\Mvc.Cors\src\Microsoft.AspNetCore.Mvc.Cors.csproj", "{E071FB7E-E650-44B0-9529-D5D1685AEA62}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.DataAnnotations", "Mvc.DataAnnotations", "{79C7F0D4-7B1A-46BF-8932-5C2E971C5925}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations", "src\Mvc\Mvc.DataAnnotations\src\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj", "{6A31248F-5F64-4A73-856C-8DC6492E6AC7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Formatters.Json", "Mvc.Formatters.Json", "{644AAC18-8E13-4392-8891-3814E355C819}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "src\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{928C9877-6BF3-447D-9E33-ACF833151D77}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Localization", "Mvc.Localization", "{70AD2DB0-47D7-492F-817A-34BCAFD861C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization", "src\Mvc\Mvc.Localization\src\Microsoft.AspNetCore.Mvc.Localization.csproj", "{51D0FA50-6970-4C19-B31B-3D6CCDF6C028}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Razor", "Mvc.Razor", "{D21F1804-4690-4B00-BC6A-2147C14BF1B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor", "src\Mvc\Mvc.Razor\src\Microsoft.AspNetCore.Mvc.Razor.csproj", "{451C6023-83D5-4809-9F71-6A23ED725A03}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.RazorPages", "Mvc.RazorPages", "{9578BB4F-D805-4581-9AAE-A66002BFDA1F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages", "src\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj", "{A47371F8-F47E-4AF3-9F2E-068F28CE6587}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.TagHelpers", "Mvc.TagHelpers", "{3691F0FE-6A8D-4F99-95EB-2D3AD3F9B712}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers", "src\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj", "{4C056678-59A0-4D37-BE70-B98D764C7EA4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.ViewFeatures", "Mvc.ViewFeatures", "{DA5E4C5A-E62C-47CD-9557-65F747638BAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures", "src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj", "{81A35CF9-214F-4351-9561-334F32B41C3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor", "Razor", "{B27FBAC2-ADA3-4A05-B232-64011B6B2DA3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor", "Razor", "{66A0F71A-FFB5-4763-913E-FB4A4F17EAA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor", "src\Razor\Razor\src\Microsoft.AspNetCore.Razor.csproj", "{50D97D17-79CF-4917-AD70-F79146FE8808}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Razor.Runtime", "Razor.Runtime", "{AB316CF4-D9C3-427E-8460-7C5235BED45E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime", "src\Razor\Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj", "{135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCaching.Abstractions", "ResponseCaching.Abstractions", "{0408482E-7934-49CA-A590-7E21AF4BE1BF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Abstractions", "src\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj", "{A9027A02-135B-4149-947A-79F5B73A7F28}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing", "Routing", "{54C42F57-5447-4C21-9812-4AF665567566}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "src\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj", "{352D08E0-782E-4AE3-99B2-7BC5B2C3F227}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Routing.Abstractions", "Routing.Abstractions", "{3ACCF669-89AB-4B02-809E-E94C81271BFF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Abstractions", "src\Http\Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{DEED8B59-B811-471F-936A-D8D71AA97CE1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SignalR.Common", "SignalR.Common", "{DF5E3AC1-94B3-4B8A-B534-9D30924A8E6B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common", "src\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj", "{B2660D8F-8990-46C7-9B41-F3F94C6402F6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{4F99BF26-E900-487C-828F-145166926DE2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Core", "src\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj", "{31E763AD-996E-44EF-A70E-1B8187922C98}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Protocols.Json", "Protocols.Json", "{989F2C7A-807F-41DA-AA5F-08147E8FF433}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.Json", "src\SignalR\common\Protocols.Json\src\Microsoft.AspNetCore.SignalR.Protocols.Json.csproj", "{3974EB1C-077A-4A79-B295-87B62446C266}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StaticFiles", "StaticFiles", "{9AA5D0E4-B341-4570-B3E4-081E6653471D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "src\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{CE49768E-1D4C-4724-9D35-1D0F73E49C9D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSockets", "WebSockets", "{B7ED4805-AD3E-4D76-BC5B-700A31488493}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets", "src\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj", "{AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebUtilities", "WebUtilities", "{BF4B36D6-D1FA-41A3-9CB3-2E1D2894E2AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities", "src\Http\WebUtilities\src\Microsoft.AspNetCore.WebUtilities.csproj", "{06492CD6-4C51-41F3-9D1A-0A95F914F871}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Headers", "Headers", "{C59FBB3C-3A7F-4744-A823-1EB92C5B23A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "src\Http\Headers\src\Microsoft.Net.Http.Headers.csproj", "{62BE5BF4-24BB-4013-ACE8-3D76521FA77C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{7321E95C-0A37-45BD-B458-1BA4412A14AC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{021E9BF3-2D3D-4169-834E-718ABE0E5B68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers", "src\Analyzers\Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj", "{E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzers.Test", "src\Analyzers\Analyzers\test\Microsoft.AspNetCore.Analyzers.Test.csproj", "{C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery.Test", "src\Antiforgery\test\Microsoft.AspNetCore.Antiforgery.Test.csproj", "{78C5ACC3-6718-4682-B350-737EDA1E4F35}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Azure", "Azure", "{DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kestrel", "Kestrel", "{4FDDC525-4E60-4CAF-83A3-261C5B43721F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kestrel", "Kestrel", "{89472057-8BB2-44A8-B0FC-D9F3ADB1181C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "src\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj", "{D40C86C9-0E5D-4974-84D8-A835B58B2A8F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{D69B5668-86EF-4CC5-814B-113BAF740DD0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Core", "src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj", "{0674F69B-FAC8-43E5-8711-A476936F459F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpsPolicy", "HttpsPolicy", "{D9403AE4-77D1-44DE-8785-280C342D215A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy", "src\Middleware\HttpsPolicy\src\Microsoft.AspNetCore.HttpsPolicy.csproj", "{5DEF52C0-B440-4DAC-8A2D-920C7016C580}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IIS", "IIS", "{D67E977E-75DF-41EE-8315-6DBF5C2B7357}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IISIntegration", "IISIntegration", "{EE74FCEC-542A-4B66-B0A9-49B28049C203}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "src\Servers\IIS\IISIntegration\src\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{737D2BC0-092E-404B-BB73-EACAEDBF0E65}" - ProjectSection(ProjectDependencies) = postProject - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {55494E58-E061-4C4C-A0A8-837008E72F85} - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} - {1533E271-F61B-441B-8B74-59FB61DF0552} = {1533E271-F61B-441B-8B74-59FB61DF0552} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {09D9D1D6-2951-4E14-BC35-76A23CF9391A} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{7004082D-53E9-45C2-B2DE-EB3CE448B64F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Extensions", "src\DataProtection\Extensions\src\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "{478D4BE2-F4AC-45EF-BEE4-35399DECCABF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Testing", "Mvc.Testing", "{ADAC3089-7247-4137-A8CB-8114D58C9B93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Testing", "src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.csproj", "{183F99F9-0C0B-4790-8152-637B4AE68622}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAppServices.HostingStartup", "AzureAppServices.HostingStartup", "{EA2941E6-5868-47CD-97AB-2DB1D5F18D97}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.HostingStartup", "src\Azure\AzureAppServices.HostingStartup\src\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj", "{F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureAppServicesIntegration", "AzureAppServicesIntegration", "{AE3F1191-648A-4813-81C5-E8527E716BB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServicesIntegration", "src\Azure\AzureAppServicesIntegration\src\Microsoft.AspNetCore.AzureAppServicesIntegration.csproj", "{32FE10AE-CC85-407A-8720-624CDD3EB890}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServicesIntegration.Tests", "src\Azure\AzureAppServicesIntegration\test\Microsoft.AspNetCore.AzureAppServicesIntegration.Tests.csproj", "{425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2E944A89-5614-425E-A87A-5F455EDB78D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureAppServicesHostingStartupSample", "src\Azure\samples\AzureAppServicesHostingStartupSample\AzureAppServicesHostingStartupSample.csproj", "{FE930950-64DC-45A3-8128-2D68F97EBB19}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureAppServicesSample", "src\Azure\samples\AzureAppServicesSample\AzureAppServicesSample.csproj", "{81410464-9C9E-4DDE-824C-BCD0DA8E6523}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{68C2D913-06D4-4EAC-9283-78465BF214E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting", "src\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj", "{D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server.IntegrationTesting", "Server.IntegrationTesting", "{F4B3C10B-F713-45D1-84EF-DD503BA09D20}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "src\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{7AA8771B-F1F3-409E-960A-EEF00B94135A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestHost", "TestHost", "{E6639EAB-40B0-4BB6-A56B-25ECC4B6D3D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost", "src\Hosting\TestHost\src\Microsoft.AspNetCore.TestHost.csproj", "{0B490CDE-C350-41A0-9DEA-CDA5FB72205D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication", "Authentication", "{822D1519-77F0-484A-B9AB-F694C2CC25F1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenIdConnect", "OpenIdConnect", "{99F9BBC5-46AE-40DC-A675-5E56ACA3C5C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.OpenIdConnect", "src\Security\Authentication\OpenIdConnect\src\Microsoft.AspNetCore.Authentication.OpenIdConnect.csproj", "{AB39F04A-A96E-4BE1-99F2-54B804104BA1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OAuth", "OAuth", "{9121A7EA-5751-4811-9FE3-E183BB8709FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.OAuth", "src\Security\Authentication\OAuth\src\Microsoft.AspNetCore.Authentication.OAuth.csproj", "{EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{03CD847C-2230-4092-BF1C-DE54634805AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication", "src\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj", "{D47B73A3-740E-4B9A-B123-A42299F1F266}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cookies", "Cookies", "{14A4E3F5-04BB-4062-84AE-1A887C307B17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Cookies", "src\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj", "{6906D7DE-CE06-4A6A-81BB-D783C605A184}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JwtBearer", "JwtBearer", "{2AB4FE8F-94FF-4C6E-B12F-9E40A9FAF9AB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.JwtBearer", "src\Security\Authentication\JwtBearer\src\Microsoft.AspNetCore.Authentication.JwtBearer.csproj", "{F90D4383-89FC-4215-B2AB-BBB242CC5E45}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analyzers", "Analyzers", "{A274799D-3D1F-4AE5-A154-4BF6C80A8D94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Analyzers", "src\Components\Analyzers\src\Microsoft.AspNetCore.Components.Analyzers.csproj", "{D5DF181B-E759-4797-ABAF-0BFDEC2A883D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Analyzers.Tests", "src\Components\Analyzers\test\Microsoft.AspNetCore.Components.Analyzers.Tests.csproj", "{7B382EC7-57B6-4C0C-8B27-5F63B5184193}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebAssembly", "WebAssembly", "{562D5067-8CD8-4F19-BCBB-873204932C61}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebAssembly", "WebAssembly", "{58FFC6CE-5958-460C-A520-32CF3FD0BE61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly", "src\Components\WebAssembly\WebAssembly\src\Microsoft.AspNetCore.Components.WebAssembly.csproj", "{DE6F167E-F41C-414D-923E-8E51E992A830}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.Tests", "src\Components\WebAssembly\WebAssembly\test\Microsoft.AspNetCore.Components.WebAssembly.Tests.csproj", "{839C479D-64DC-4A59-85E4-04E5A2CC9631}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DevServer", "DevServer", "{26196065-4F78-435E-B500-2967A63D277D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.DevServer", "src\Components\WebAssembly\DevServer\src\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj", "{ADB4912C-BCD5-400F-BD20-37410BA76EF8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Server", "Server", "{13683DEB-FB7E-4F20-ACB2-015381943541}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.Server", "src\Components\WebAssembly\Server\src\Microsoft.AspNetCore.Components.WebAssembly.Server.csproj", "{1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Performance", "src\Components\Components\perf\Microsoft.AspNetCore.Components.Performance.csproj", "{4510DA15-69F3-411E-86F2-7AD04FFB9823}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Tests", "src\Components\Components\test\Microsoft.AspNetCore.Components.Tests.csproj", "{B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Server.Tests", "src\Components\Server\test\Microsoft.AspNetCore.Components.Server.Tests.csproj", "{6CBF1AA9-1073-4A97-B867-FB534C6829C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0508E463-0269-40C9-B5C2-3B600FB2A28B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.E2ETests", "src\Components\test\E2ETest\Microsoft.AspNetCore.Components.E2ETests.csproj", "{A71B95EE-1BFF-49BA-BA5F-121EFAE41667}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DefaultBuilder", "DefaultBuilder", "{881FE4C3-1553-4CA1-B430-DDD37B3493AB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore", "src\DefaultBuilder\src\Microsoft.AspNetCore.csproj", "{DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Diagnostics", "Diagnostics", "{DE5C0805-1C4A-4C70-B613-89EE2EA0B757}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics", "src\Middleware\Diagnostics\src\Microsoft.AspNetCore.Diagnostics.csproj", "{FB86B2B2-60B2-477A-9D78-2530A0089660}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HostFiltering", "HostFiltering", "{58915BB2-CEF5-4CA3-8886-A61156564505}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering", "src\Middleware\HostFiltering\src\Microsoft.AspNetCore.HostFiltering.csproj", "{7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpOverrides", "HttpOverrides", "{39086512-EBC8-4061-BE34-DCCA5D1BA585}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides", "src\Middleware\HttpOverrides\src\Microsoft.AspNetCore.HttpOverrides.csproj", "{34F24889-22D2-40A1-A2AB-A43B9061FE0D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCompression", "ResponseCompression", "{512EFCA7-1590-492A-8D06-84744F79DA91}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression", "src\Middleware\ResponseCompression\src\Microsoft.AspNetCore.ResponseCompression.csproj", "{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Analyzers", "Mvc.Analyzers", "{515282B6-6EF9-46E0-8EF1-DBD1CD948D9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Analyzers", "src\Mvc\Mvc.Analyzers\src\Microsoft.AspNetCore.Mvc.Analyzers.csproj", "{02A85F31-A092-4322-A3D9-91E894D9ECD2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IIS", "IIS", "{33CAD745-5912-47D3-BAF3-5AE580FED275}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IIS", "src\Servers\IIS\IIS\src\Microsoft.AspNetCore.Server.IIS.csproj", "{9E01AF6A-F748-4490-B45B-8558D1E701B4}" - ProjectSection(ProjectDependencies) = postProject - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {55494E58-E061-4C4C-A0A8-837008E72F85} - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {7F87406C-A3C8-4139-A68D-E4C344294A67} - {1533E271-F61B-441B-8B74-59FB61DF0552} = {1533E271-F61B-441B-8B74-59FB61DF0552} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {09D9D1D6-2951-4E14-BC35-76A23CF9391A} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transport.Sockets", "Transport.Sockets", "{94174359-D57E-467E-8AC7-167A10260F34}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets", "src\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj", "{94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Protocols.MessagePack", "Protocols.MessagePack", "{B4B39C18-70F5-4C07-9871-4E124F63F1F7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.MessagePack", "src\SignalR\common\Protocols.MessagePack\src\Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj", "{B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Protocols.NewtonsoftJson", "Protocols.NewtonsoftJson", "{01EED30B-3DC5-4591-A4C2-B17C6D36B1DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson", "src\SignalR\common\Protocols.NewtonsoftJson\src\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj", "{EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.NewtonsoftJson", "Mvc.NewtonsoftJson", "{4B6BA2CC-8DE7-4070-A912-D51375998553}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.NewtonsoftJson", "src\Mvc\Mvc.NewtonsoftJson\src\Microsoft.AspNetCore.Mvc.NewtonsoftJson.csproj", "{18FCF9CD-8545-41FC-9E4B-0F18B593863D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Features", "Features", "{F94AF7F5-7DB1-4716-B4B5-A7DAB066AF2F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JsonPatch", "JsonPatch", "{5FF36127-063D-4D3E-9429-3BFD32713FEE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch", "src\Features\JsonPatch\src\Microsoft.AspNetCore.JsonPatch.csproj", "{5BFA4A13-895A-4680-BCC6-3BDA8F048A29}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{0338EC37-E5AD-47DA-9502-24A5F7433ADE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "csharp", "csharp", "{2637A22F-182F-4659-A394-C9BC1514B321}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client", "Client", "{A6D39EEA-CC08-4ECF-BD2E-134D845876FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client", "src\SignalR\clients\csharp\Client\src\Microsoft.AspNetCore.SignalR.Client.csproj", "{95F132DA-D9B6-4181-8D1B-A58D935B1827}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client.Core", "Client.Core", "{85EFA9E2-A041-438B-BAF9-928C74571141}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.Core", "src\SignalR\clients\csharp\Client.Core\src\Microsoft.AspNetCore.SignalR.Client.Core.csproj", "{9443F095-DA20-4EED-BC97-5BF92470D972}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Connections.Client", "Http.Connections.Client", "{EA798F59-BCF8-4013-AF6B-9611FDC9919C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Client", "src\SignalR\clients\csharp\Http.Connections.Client\src\Microsoft.AspNetCore.Http.Connections.Client.csproj", "{C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Tests", "src\Components\Web\test\Microsoft.AspNetCore.Components.Web.Tests.csproj", "{9EA5219C-3C11-45D4-BD43-8BE05FB2812A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authorization", "Authorization", "{9DF052F3-D239-4BB5-B41E-DA93A086B4F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Authorization", "src\Components\Authorization\src\Microsoft.AspNetCore.Components.Authorization.csproj", "{CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Authorization.Tests", "src\Components\Authorization\test\Microsoft.AspNetCore.Components.Authorization.Tests.csproj", "{418848BA-83AE-49E4-9EEC-7AFB5591D8E8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{59ECEDFE-72E7-495D-BECB-784B0018544E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Forms", "src\Components\Forms\src\Microsoft.AspNetCore.Components.Forms.csproj", "{61F6B56C-0764-4585-9C3F-63A0CF05E56E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Forms.Tests", "src\Components\Forms\test\Microsoft.AspNetCore.Components.Forms.Tests.csproj", "{60B11F05-CA3B-4AD1-BAC1-912C19D37395}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{5FE1FBC1-8CE3-4355-9866-44FE1307C5F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorServerApp", "src\Components\Samples\BlazorServerApp\BlazorServerApp.csproj", "{8DE6625B-C9E4-4949-A75C-89E3FF556724}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarkapps", "benchmarkapps", "{0CE1CC26-98CE-4022-A81C-E32AAFC9B819}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wasm.Performance", "Wasm.Performance", "{6276A9A0-791B-49C1-AD8F-50AC47CDC196}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Performance.Driver", "src\Components\benchmarkapps\Wasm.Performance\Driver\Wasm.Performance.Driver.csproj", "{B81C7FA1-870F-4F21-A928-A5BE18754E6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Performance.TestApp", "src\Components\benchmarkapps\Wasm.Performance\TestApp\Wasm.Performance.TestApp.csproj", "{2AEACF69-7F68-414A-B49D-2C627D37D0F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.Server.Tests", "src\Components\WebAssembly\Server\test\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj", "{0C610220-E00C-4752-98A0-44A3D4B96A21}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.Msal", "Authentication.Msal", "{1FD5F261-6384-4AE1-A6DA-4D08A0BCE1CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Authentication.WebAssembly.Msal", "src\Components\WebAssembly\Authentication.Msal\src\Microsoft.Authentication.WebAssembly.Msal.csproj", "{09F72EF0-2BDE-4B73-B116-A87E38C432FE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JSInterop", "JSInterop", "{44161B20-CC30-403A-AC94-247592ED7590}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.WebAssembly", "src\Components\WebAssembly\JSInterop\src\Microsoft.JSInterop.WebAssembly.csproj", "{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebAssembly.Authentication", "WebAssembly.Authentication", "{E33C36A1-481C-4A93-BCBE-22CCBA53349B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.Authentication", "src\Components\WebAssembly\WebAssembly.Authentication\src\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj", "{E167A806-EEFA-4BCF-A14D-D985BAEA9387}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.Authentication.Tests", "src\Components\WebAssembly\WebAssembly.Authentication\test\Microsoft.AspNetCore.Components.WebAssembly.Authentication.Tests.csproj", "{15A90CE7-886D-4005-8C14-CF29123344E1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JSInterop", "JSInterop", "{E50C2015-42A4-4E71-94B9-62773D369FEE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.JSInterop", "Microsoft.JSInterop", "{16898702-3E33-41C1-B8D8-4CE3F1D46BD9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop", "src\JSInterop\Microsoft.JSInterop\src\Microsoft.JSInterop.csproj", "{70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions.Tests", "src\DataProtection\Abstractions\test\Microsoft.AspNetCore.DataProtection.Abstractions.Tests.csproj", "{552EB148-0518-41A6-905D-4696A6438E80}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal.Tests", "src\DataProtection\Cryptography.Internal\test\Microsoft.AspNetCore.Cryptography.Internal.Tests.csproj", "{789E23FE-E8F4-4935-AF43-4A84D25AD130}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Cryptography.KeyDerivation", "Cryptography.KeyDerivation", "{9546F4D5-9625-480F-B5BB-5D6FF9369885}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation", "src\DataProtection\Cryptography.KeyDerivation\src\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj", "{DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests", "src\DataProtection\Cryptography.KeyDerivation\test\Microsoft.AspNetCore.Cryptography.KeyDerivation.Tests.csproj", "{F421D0C4-6EF7-48B7-9213-AFD21322E08B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Tests", "src\DataProtection\DataProtection\test\Microsoft.AspNetCore.DataProtection.Tests\Microsoft.AspNetCore.DataProtection.Tests.csproj", "{696BE515-B3AB-4925-969C-350F1BDA5C30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Extensions.Tests", "src\DataProtection\Extensions\test\Microsoft.AspNetCore.DataProtection.Extensions.Tests.csproj", "{3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StackExchangeRedis", "StackExchangeRedis", "{FE22EB98-C12E-4FAE-A7C2-DF65890F3084}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis", "src\DataProtection\StackExchangeRedis\src\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.csproj", "{87181A18-6A53-43E6-A6B1-1F867C9D3E45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests", "src\DataProtection\StackExchangeRedis\test\Microsoft.AspNetCore.DataProtection.StackExchangeRedis.Tests.csproj", "{3B85171E-9A55-4605-B9B1-56F77E47137B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{8275510E-0E6C-45A8-99DF-4F106BC7F075}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomEncryptorSample", "src\DataProtection\samples\CustomEncryptorSample\CustomEncryptorSample.csproj", "{DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KeyManagementSample", "src\DataProtection\samples\KeyManagementSample\KeyManagementSample.csproj", "{58C5FE49-3060-4D9E-B76C-352790FCD1D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonDISample", "src\DataProtection\samples\NonDISample\NonDISample.csproj", "{4F39F27E-0E21-4093-8818-D974D4716C14}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Redis", "src\DataProtection\samples\Redis\Redis.csproj", "{BC0CC534-0285-4471-B99E-584BEFEC94DB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EntityFrameworkCore", "EntityFrameworkCore", "{97F5B320-B18E-4275-B0E9-BB5FABDA952F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore", "src\DataProtection\EntityFrameworkCore\src\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.csproj", "{E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test", "src\DataProtection\EntityFrameworkCore\test\Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.Test.csproj", "{28B6FDEF-3DC0-42E0-8913-C7D33CE93368}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameworkCoreSample", "src\DataProtection\samples\EntityFrameworkCoreSample\EntityFrameworkCoreSample.csproj", "{22F70908-5E62-4185-B76B-F0C5B952F8AE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2F08930D-5646-4D74-AAA2-9E51C93D1192}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DefaultBuilder.SampleApp", "src\DefaultBuilder\samples\SampleApp\DefaultBuilder.SampleApp.csproj", "{0CD27C71-4A3C-4AA0-8258-F7430F875984}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BCD032DD-D088-4F72-B80F-48D0EA845F87}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Tests", "src\DefaultBuilder\test\Microsoft.AspNetCore.Tests\Microsoft.AspNetCore.Tests.csproj", "{58955E85-0D55-45FF-97EE-BDD096522954}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.FunctionalTests", "src\DefaultBuilder\test\Microsoft.AspNetCore.FunctionalTests\Microsoft.AspNetCore.FunctionalTests.csproj", "{D708256C-4A68-4B15-AAE5-6EFA41223A70}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Grpc", "Grpc", "{8DAC59BE-CB96-4F04-909C-56C22E7665EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{E763DA15-8F4E-446C-99B8-309053C75598}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropTests", "src\Grpc\Interop\test\InteropTests\InteropTests.csproj", "{3ADC50B9-2EBB-422A-8424-F9FC67841CA1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Testing", "Testing", "{05A169C7-4F20-4516-B10A-B13C5649D346}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Tests", "src\Hosting\Hosting\test\Microsoft.AspNetCore.Hosting.Tests.csproj", "{ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C8415333-2A64-4FF0-8FC9-652694A11A77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenericWebHost", "src\Hosting\samples\GenericWebHost\GenericWebHost.csproj", "{9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleStartups", "src\Hosting\samples\SampleStartups\SampleStartups.csproj", "{7391E144-5087-4E64-94D8-E0700D57739C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.TestHost.Tests", "src\Hosting\TestHost\test\Microsoft.AspNetCore.TestHost.Tests.csproj", "{ED6E6F06-D620-41BC-8F12-01480BF49381}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WindowsServices", "WindowsServices", "{3DC5D8DB-5DA3-4793-B090-9CB89A158B51}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.WindowsServices", "src\Hosting\WindowsServices\src\Microsoft.AspNetCore.Hosting.WindowsServices.csproj", "{F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.WindowsServices.Tests", "src\Hosting\WindowsServices\test\Microsoft.AspNetCore.Hosting.WindowsServices.Tests.csproj", "{31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C1409A8F-555A-4A88-B803-C6D3E8B6C3B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.FunctionalTests", "src\Hosting\test\FunctionalTests\Microsoft.AspNetCore.Hosting.FunctionalTests.csproj", "{72AA2B1F-1FE7-48B5-968D-89E492F2139D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Owin", "Owin", "{AA465A56-D9D0-4684-95B0-192F4436C582}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Owin", "src\Http\Owin\src\Microsoft.AspNetCore.Owin.csproj", "{670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core.Test", "src\Http\Authentication.Core\test\Microsoft.AspNetCore.Authentication.Core.Test.csproj", "{F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers.Tests", "src\Http\Headers\test\Microsoft.Net.Http.Headers.Tests.csproj", "{8CB43443-E02C-4D04-9E96-A4916E5C83C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Tests", "src\Http\Http\test\Microsoft.AspNetCore.Http.Tests.csproj", "{3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions.Tests", "src\Http\Http.Abstractions\test\Microsoft.AspNetCore.Http.Abstractions.Tests.csproj", "{529AB96D-853D-41B4-ABE6-D0DED4A50DFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions.Tests", "src\Http\Http.Extensions\test\Microsoft.AspNetCore.Http.Extensions.Tests.csproj", "{402C3AC9-1B1D-4523-AB80-A992CEA85F57}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Owin.Tests", "src\Http\Owin\test\Microsoft.AspNetCore.Owin.Tests.csproj", "{66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpAbstractions.SampleApp", "src\Http\samples\SampleApp\HttpAbstractions.SampleApp.csproj", "{4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities.Tests", "src\Http\WebUtilities\test\Microsoft.AspNetCore.WebUtilities.Tests.csproj", "{F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Microbenchmarks", "src\Http\Http\perf\Microbenchmarks\Microsoft.AspNetCore.Http.Microbenchmarks.csproj", "{C713DCA1-B36D-44BD-ACFA-F562782AD40E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Microbenchmarks", "src\Http\Routing\perf\Microbenchmarks\Microsoft.AspNetCore.Routing.Microbenchmarks.csproj", "{A2701184-BD48-4B72-AA6E-8DD1DE2F217F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{17DD5861-0635-46D0-84BA-6B163150AA4F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.FunctionalTests", "src\Http\Routing\test\FunctionalTests\Microsoft.AspNetCore.Routing.FunctionalTests.csproj", "{2DF639CC-DFF2-44D2-9585-D1E925B5A117}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Tests", "src\Http\Routing\test\UnitTests\Microsoft.AspNetCore.Routing.Tests.csproj", "{C71CF302-0FFA-4610-9197-033B277F3065}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests", "src\Http\Routing.Abstractions\test\Microsoft.AspNetCore.Mvc.Routing.Abstractions.Tests.csproj", "{09D2D765-A792-415E-B19A-18948A1C8969}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{E7CADFE4-CDD0-4DE3-90ED-7184A969F47B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities.Microbenchmarks", "src\Http\WebUtilities\perf\Microbenchmarks\Microsoft.AspNetCore.WebUtilities.Microbenchmarks.csproj", "{822FF16C-A4E0-40A0-AE65-530752575261}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Metadata", "Metadata", "{71DE18B5-87F9-4D03-89BB-C3E243576F92}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Metadata", "src\Http\Metadata\src\Microsoft.AspNetCore.Metadata.csproj", "{3A554C0B-2956-4152-BF31-2C8CAE5D2717}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Identity", "Identity", "{9F21A235-436E-4020-A076-1DF4F89D0CA0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{9E0B9A09-167E-4DF7-8AA4-F9323A306F90}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity", "src\Identity\Core\src\Microsoft.AspNetCore.Identity.csproj", "{F1B75625-567A-4AF3-BB68-75A4CF93F2B8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EntityFrameworkCore", "EntityFrameworkCore", "{0F5F1299-7303-49B8-BEBF-9FF3B522CE0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore", "src\Identity\EntityFrameworkCore\src\Microsoft.AspNetCore.Identity.EntityFrameworkCore.csproj", "{473C0171-0AD1-473B-B1A0-93636FD77BA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F910B1B0-3641-4F3B-8336-5230FAB8FAD5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test", "src\Identity\EntityFrameworkCore\test\EF.InMemory.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test.csproj", "{D15A9C48-00F1-423B-B14D-6EACE976E2F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test", "src\Identity\EntityFrameworkCore\test\EF.Test\Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test.csproj", "{39B8B1ED-790E-4FF5-8D68-B1153655F87B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.Core", "Extensions.Core", "{7A3BDEED-70A7-4F2A-82D8-6A8752CE2859}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Core", "src\Identity\Extensions.Core\src\Microsoft.Extensions.Identity.Core.csproj", "{886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.Stores", "Extensions.Stores", "{83E043A0-50FF-48AB-AA1D-EE88B64A1E4F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Stores", "src\Identity\Extensions.Stores\src\Microsoft.Extensions.Identity.Stores.csproj", "{30BB8038-D162-4171-9404-4041FC7A5BA7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentitySample.DefaultUI", "src\Identity\samples\IdentitySample.DefaultUI\IdentitySample.DefaultUI.csproj", "{5750A285-B528-4A6C-953F-7838824E5F81}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentitySample.Mvc", "src\Identity\samples\IdentitySample.Mvc\IdentitySample.Mvc.csproj", "{C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Specification.Tests", "Specification.Tests", "{85179BD4-F1B1-4FDB-ABA9-3FDB0F5FF1B3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.Specification.Tests", "src\Identity\Specification.Tests\src\Microsoft.AspNetCore.Identity.Specification.Tests.csproj", "{5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{BCF3D807-5368-4201-8313-34493E60020B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.FunctionalTests", "src\Identity\test\Identity.FunctionalTests\Microsoft.AspNetCore.Identity.FunctionalTests.csproj", "{5EBE548A-E450-466B-B448-D6662E659E58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.Test", "src\Identity\test\Identity.Test\Microsoft.AspNetCore.Identity.Test.csproj", "{58C3FE63-C364-4AF8-B575-2F65A7565B1F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.InMemory.Test", "src\Identity\test\InMemory.Test\Microsoft.AspNetCore.Identity.InMemory.Test.csproj", "{8B6F219F-CE89-4704-8586-F9953F5FF4AB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI", "UI", "{2AFCDBA1-0697-4134-BF22-17C145EB2710}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity.UI", "src\Identity\UI\src\Microsoft.AspNetCore.Identity.UI.csproj", "{8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CookiePolicy", "CookiePolicy", "{62F3EF13-4A89-4912-A22C-31981278B074}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.CookiePolicy", "src\Security\CookiePolicy\src\Microsoft.AspNetCore.CookiePolicy.csproj", "{CE8BC4CA-0068-439A-A012-6B1E764CD5D7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Diagnostics.EntityFrameworkCore", "Diagnostics.EntityFrameworkCore", "{3D551023-1D98-479D-A41E-EBD0C05A06FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore", "src\Middleware\Diagnostics.EntityFrameworkCore\src\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj", "{861CA437-6402-4E45-9E1F-35A509E61568}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rewrite", "Rewrite", "{049030CA-4D78-4B24-A112-28C61AB2509C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite", "src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj", "{5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Facebook", "Facebook", "{B714B9AB-0A8F-4FB0-902E-6B73CA60DAB8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Facebook", "src\Security\Authentication\Facebook\src\Microsoft.AspNetCore.Authentication.Facebook.csproj", "{805264B9-36C9-49D6-BA34-63D0050C9D6E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Google", "Google", "{2654DB24-E7E6-45B0-B350-3226D2D0FDC7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Google", "src\Security\Authentication\Google\src\Microsoft.AspNetCore.Authentication.Google.csproj", "{C2645178-0B55-47D4-B9CA-A6FFA14E616E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Twitter", "Twitter", "{D38C4227-7692-4C66-B8C2-8A411B46DCE3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Twitter", "src\Security\Authentication\Twitter\src\Microsoft.AspNetCore.Authentication.Twitter.csproj", "{8192DC13-6878-43C1-B657-96420C3BA9F8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A127217D-26AF-43C4-96A0-7080EB6F1D65}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EchoApp", "src\Middleware\WebSockets\samples\EchoApp\EchoApp.csproj", "{19BE6DF6-24F5-4F58-86C8-A9D8368427A7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSockets.TestServer", "src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj", "{68E93233-6FF3-41FE-8161-3B7F457473C8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8AAFAD2A-B273-4DB5-8DC9-3CA832248A82}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.ConformanceTests", "src\Middleware\WebSockets\test\ConformanceTests\Microsoft.AspNetCore.WebSockets.ConformanceTests.csproj", "{897EECDD-628F-4233-B1BF-A13F687057BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.Tests", "src\Middleware\WebSockets\test\UnitTests\Microsoft.AspNetCore.WebSockets.Tests.csproj", "{E7F7B6E9-3374-4C37-8FDA-CB3682442D51}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{41B519F7-CF19-4FB4-B96C-E38A7EF45F70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diagnostics.FunctionalTests", "src\Middleware\Diagnostics\test\FunctionalTests\Diagnostics.FunctionalTests.csproj", "{122907A1-AD5F-40B3-9D61-05A3F8CF859D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Tests", "src\Middleware\Diagnostics\test\UnitTests\Microsoft.AspNetCore.Diagnostics.Tests.csproj", "{5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{364376C6-E886-482E-B79C-366E5DAB8A5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Diagnostics.EFCore.FunctionalTests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\FunctionalTests\Diagnostics.EFCore.FunctionalTests.csproj", "{BDC1141A-DA5D-48D4-B0A7-61612D4F8024}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests", "src\Middleware\Diagnostics.EntityFrameworkCore\test\UnitTests\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.Tests.csproj", "{4D08EC2C-A488-414E-8739-341E197773DB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MiddlewareAnalysis", "MiddlewareAnalysis", "{07AAFECB-4C42-4533-80D5-0452989FA0F7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{81143573-811E-4F61-9331-6B7173DBA67C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiddlewareAnalysisSample", "src\Middleware\MiddlewareAnalysis\samples\MiddlewareAnalysisSample\MiddlewareAnalysisSample.csproj", "{F4160B93-03F2-4C0F-BEBA-C89F02CACD17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.MiddlewareAnalysis", "src\Middleware\MiddlewareAnalysis\src\Microsoft.AspNetCore.MiddlewareAnalysis.csproj", "{35AA4E31-D157-4AD2-B04F-EE3956795420}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.MiddlewareAnalysis.Tests", "src\Middleware\MiddlewareAnalysis\test\Microsoft.AspNetCore.MiddlewareAnalysis.Tests.csproj", "{21F89E50-DF06-435E-872B-7639BCE695DF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks", "HealthChecks", "{DF86A07D-A370-4CBD-97DD-DCB09466545F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks", "src\Middleware\HealthChecks\src\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj", "{8C828211-F2EC-4BFD-B922-98F73D9DAB5E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{8EFA9CC7-D03D-4535-898C-F3B80BB19F21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests", "src\Middleware\HealthChecks\test\UnitTests\Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests.csproj", "{2E690E42-B20F-4702-9478-1707EEC7C02F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks.EntityFrameworkCore", "HealthChecks.EntityFrameworkCore", "{9C7F31F8-B782-4016-9B0E-72C8CB42334C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore", "src\Middleware\HealthChecks.EntityFrameworkCore\src\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.csproj", "{6DEB6C24-3A35-4E72-BCA8-33344EEE0119}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests", "src\Middleware\HealthChecks.EntityFrameworkCore\test\Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore.Tests.csproj", "{922869D9-B9FF-4828-8C6F-FCA7963DB011}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostFilteringSample", "src\Middleware\HostFiltering\sample\HostFilteringSample.csproj", "{ECF7A440-D5FC-473F-958C-FE27643844D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering.Tests", "src\Middleware\HostFiltering\test\Microsoft.AspNetCore.HostFiltering.Tests.csproj", "{92820F5C-4018-4F10-A14B-0AEE619202EE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpOverridesSample", "src\Middleware\HttpOverrides\sample\HttpOverridesSample.csproj", "{2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides.Tests", "src\Middleware\HttpOverrides\test\Microsoft.AspNetCore.HttpOverrides.Tests.csproj", "{C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpsPolicySample", "src\Middleware\HttpsPolicy\sample\HttpsPolicySample.csproj", "{91DD8440-7A66-4880-A0CE-BC6009D2DCFF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy.Tests", "src\Middleware\HttpsPolicy\test\Microsoft.AspNetCore.HttpsPolicy.Tests.csproj", "{A837D64D-435A-473F-8828-8E1DD95D8E4B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseCompressionSample", "src\Middleware\ResponseCompression\sample\ResponseCompressionSample.csproj", "{4BA8A846-5B24-4F46-90B9-FFEFB889C028}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression.Tests", "src\Middleware\ResponseCompression\test\Microsoft.AspNetCore.ResponseCompression.Tests.csproj", "{3CCE49CA-4145-401F-8963-AC28F0908678}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RewriteSample", "src\Middleware\Rewrite\sample\RewriteSample.csproj", "{A1628BC4-134A-4854-9F98-B841520F1497}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite.Tests", "src\Middleware\Rewrite\test\Microsoft.AspNetCore.Rewrite.Tests.csproj", "{C69E36EC-3972-4CDF-A467-94CBD7C691A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalizationSample", "src\Middleware\Localization\sample\LocalizationSample.csproj", "{B4FCACA3-FD16-4B89-9D3D-E19C141CE926}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C9E481E5-F77D-4462-8E85-1F7FF2DCAA97}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.FunctionalTests", "src\Middleware\Localization\test\FunctionalTests\Microsoft.AspNetCore.Localization.FunctionalTests.csproj", "{5930AA76-C824-45F0-9D30-7EE4CB231E7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Tests", "src\Middleware\Localization\test\UnitTests\Microsoft.AspNetCore.Localization.Tests.csproj", "{5BE39E84-020F-405D-99AF-5D46928785AF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization.Routing", "Localization.Routing", "{8C289D6B-712F-442F-A010-218784BFA4D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing", "src\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj", "{D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing.Tests", "src\Middleware\Localization.Routing\test\Microsoft.AspNetCore.Localization.Routing.Tests.csproj", "{99CB7560-3B6F-447B-880A-C5A53F1E56F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression.Microbenchmarks", "src\Middleware\ResponseCompression\perf\Microbenchmarks\Microsoft.AspNetCore.ResponseCompression.Microbenchmarks.csproj", "{605D0C19-6E99-4A73-B336-1AD700AE93C0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConformanceTests", "ConformanceTests", "{73BC406B-4D98-4BE0-A756-19F0F3D2B587}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutobahnTestApp", "src\Middleware\WebSockets\test\ConformanceTests\AutobahnTestApp\AutobahnTestApp.csproj", "{2292C14D-151C-4AB7-AA91-7F0165E2073E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{45211BB8-4F51-427D-ADA2-7478E3398A60}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors.Test", "src\Middleware\CORS\test\UnitTests\Microsoft.AspNetCore.Cors.Test.csproj", "{F8410622-2764-4B05-BEC4-8D25CABBC45A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{2E4D61F1-F504-450E-B4C2-11C5214E7200}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticFileSample", "src\Middleware\StaticFiles\samples\StaticFileSample\StaticFileSample.csproj", "{5EC5F788-458B-4957-8E33-ADD82DB6E420}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{491D5D41-4424-4642-AF7C-A7DD186CD282}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.FunctionalTests", "src\Middleware\StaticFiles\test\FunctionalTests\Microsoft.AspNetCore.StaticFiles.FunctionalTests.csproj", "{7135BA54-DE2E-42CD-8261-1A88907843FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles.Tests", "src\Middleware\StaticFiles\test\UnitTests\Microsoft.AspNetCore.StaticFiles.Tests.csproj", "{A72BB350-8903-4914-9583-A156B66419EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCaching", "ResponseCaching", "{7CBB1320-BF86-4B32-9D2B-273A45057727}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching", "src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj", "{186AF4F9-9AFF-4395-9340-006F78D85DFB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F6BC5402-310D-4B1F-A018-99FD1D6C183A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResponseCachingSample", "src\Middleware\ResponseCaching\samples\ResponseCachingSample\ResponseCachingSample.csproj", "{6BB8474D-B8E1-4B77-AA44-253ACA5E686D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Tests", "src\Middleware\ResponseCaching\test\Microsoft.AspNetCore.ResponseCaching.Tests.csproj", "{8E5588B6-0557-41CF-9A0B-1A0B412754E1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Session", "Session", "{48BEABD3-2446-466C-8694-D34EF0949369}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionSample", "src\Middleware\Session\samples\SessionSample.csproj", "{F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session", "src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj", "{609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session.Tests", "src\Middleware\Session\test\Microsoft.AspNetCore.Session.Tests.csproj", "{A01B523B-35CA-4C14-B792-3887F8741E99}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpSys", "HttpSys", "{166E48ED-9738-4E13-8618-0D805F6F0F65}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeaderPropagation", "HeaderPropagation", "{5527E368-FD50-4E8C-B8D8-C3D1374BE4F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HeaderPropagation", "src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj", "{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HeaderPropagation.Tests", "src\Middleware\HeaderPropagation\test\Microsoft.AspNetCore.HeaderPropagation.Tests.csproj", "{399AC9FB-7DCA-4868-B299-2EE4C88D41AD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C2FDF6AA-A8BD-40A6-81AD-14687927E9FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeaderPropagationSample", "src\Middleware\HeaderPropagation\samples\HeaderPropagationSample\HeaderPropagationSample.csproj", "{91BD5675-6674-4053-AD04-19F28DD3BAE5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ConcurrencyLimiter", "ConcurrencyLimiter", "{4F8ED87D-E4D9-4941-94D7-D529D83DDBA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConcurrencyLimiterSample", "src\Middleware\ConcurrencyLimiter\sample\ConcurrencyLimiterSample.csproj", "{56BA4AB2-B915-46DC-AE67-234D60BFEDBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter", "src\Middleware\ConcurrencyLimiter\src\Microsoft.AspNetCore.ConcurrencyLimiter.csproj", "{532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Tests", "src\Middleware\ConcurrencyLimiter\test\Microsoft.AspNetCore.ConcurrencyLimiter.Tests.csproj", "{2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{9ECF118E-D7A5-4805-B698-DE9013BB91C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks", "src\Middleware\ConcurrencyLimiter\perf\Microbenchmarks\Microsoft.AspNetCore.ConcurrencyLimiter.Microbenchmarks.csproj", "{5BF572A5-24AF-4815-BF0C-F57DA650207D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IntegrationTesting.IIS", "IntegrationTesting.IIS", "{036FB9FC-7F26-4982-B94E-2C32B4C836E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting.IIS", "src\Servers\IIS\IntegrationTesting.IIS\src\Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj", "{559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}" - ProjectSection(ProjectDependencies) = postProject - {9E01AF6A-F748-4490-B45B-8558D1E701B4} = {9E01AF6A-F748-4490-B45B-8558D1E701B4} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{EE65018D-FA12-461D-B2C5-44CA6E385530}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.Microbenchmarks", "src\Middleware\perf\Microbenchmarks\Microsoft.AspNetCore.WebSockets.Microbenchmarks.csproj", "{A8E1962B-688E-44B3-81F3-BBB9891534CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Microbenchmarks", "src\Middleware\perf\ResponseCaching.Microbenchmarks\Microsoft.AspNetCore.ResponseCaching.Microbenchmarks.csproj", "{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicrosoftAccount", "MicrosoftAccount", "{8C4006DF-FF48-46B6-A124-10B1EEAA266E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.MicrosoftAccount", "src\Security\Authentication\MicrosoftAccount\src\Microsoft.AspNetCore.Authentication.MicrosoftAccount.csproj", "{F5C54062-B19C-4291-A816-F1B5A167369A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{056535BC-3E30-49E2-BE3B-630C62E641A5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{088C37A5-30D2-40FB-B031-D163CFBED006}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicWebSite", "src\Mvc\test\WebSites\BasicWebSite\BasicWebSite.csproj", "{B5F938FB-37DF-4201-9537-E043513701D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.RoutingWebSite", "src\Mvc\test\WebSites\RoutingWebSite\Mvc.RoutingWebSite.csproj", "{2C155AA6-B549-4FCA-A9A0-34F28A9A4160}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorWebSite", "src\Mvc\test\WebSites\RazorWebSite\RazorWebSite.csproj", "{1CF04156-B477-4B88-A25B-15D4E6F587D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FormatterWebSite", "src\Mvc\test\WebSites\FormatterWebSite\FormatterWebSite.csproj", "{AC688973-3FAD-4A04-99C9-414782E5AE42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiExplorerWebSite", "src\Mvc\test\WebSites\ApiExplorerWebSite\ApiExplorerWebSite.csproj", "{58BAA9A7-4A2A-459A-BD41-086E8F83022D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VersioningWebSite", "src\Mvc\test\WebSites\VersioningWebSite\VersioningWebSite.csproj", "{F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TagHelpersWebSite", "src\Mvc\test\WebSites\TagHelpersWebSite\TagHelpersWebSite.csproj", "{185D4D67-FFE4-4673-8F3A-AD77EA2D3931}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FilesWebSite", "src\Mvc\test\WebSites\FilesWebSite\FilesWebSite.csproj", "{D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApplicationModelWebSite", "src\Mvc\test\WebSites\ApplicationModelWebSite\ApplicationModelWebSite.csproj", "{975E7F46-8044-463E-89E1-56EB0F7913B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HtmlGenerationWebSite", "src\Mvc\test\WebSites\HtmlGenerationWebSite\HtmlGenerationWebSite.csproj", "{BAD5E853-2C9D-41D5-844D-470BC33B43E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ErrorPageMiddlewareWebSite", "src\Mvc\test\WebSites\ErrorPageMiddlewareWebSite\ErrorPageMiddlewareWebSite.csproj", "{9C2BD6C2-803D-4D19-BD40-860F1B340DC7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlFormattersWebSite", "src\Mvc\test\WebSites\XmlFormattersWebSite\XmlFormattersWebSite.csproj", "{A8096362-6304-4DAF-A091-978BE764FF30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControllersFromServicesWebSite", "src\Mvc\test\WebSites\ControllersFromServicesWebSite\ControllersFromServicesWebSite.csproj", "{0FD49F5F-2950-43B8-8467-78596A4421AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ControllersFromServicesClassLibrary", "src\Mvc\test\WebSites\ControllersFromServicesClassLibrary\ControllersFromServicesClassLibrary.csproj", "{773877FC-7C04-48F9-BC1D-9B4231D9B6D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CorsWebSite", "src\Mvc\test\WebSites\CorsWebSite\CorsWebSite.csproj", "{7DFECECC-E30C-4217-9746-86A8D652E110}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B8825E86-B8EA-4666-B681-C443D027C95D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MvcSandbox", "src\Mvc\samples\MvcSandbox\MvcSandbox.csproj", "{3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleWebSite", "src\Mvc\test\WebSites\SimpleWebSite\SimpleWebSite.csproj", "{70F83D54-91BF-4BED-8A82-F310D640C9F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SecurityWebSite", "src\Mvc\test\WebSites\SecurityWebSite\SecurityWebSite.csproj", "{4BCC89AB-3429-4C38-AFF9-DBBD605075F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorPagesWebSite", "src\Mvc\test\WebSites\RazorPagesWebSite\RazorPagesWebSite.csproj", "{12EFA8EE-25FC-4CAD-98AC-B2B97368579A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{CA6DD42B-2DBC-4061-91E8-C91FA8F4C410}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Microbenchmarks", "src\Mvc\perf\Microbenchmarks\Microsoft.AspNetCore.Mvc\Microsoft.AspNetCore.Mvc.Microbenchmarks.csproj", "{199639E9-0FAA-49C4-A75F-95EE71F32CC0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite", "src\Mvc\test\WebSites\RazorBuildWebSite\RazorBuildWebSite.csproj", "{F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite.Views", "src\Mvc\test\WebSites\RazorBuildWebSite.Views\RazorBuildWebSite.Views.csproj", "{039266E2-5F43-4B94-86DA-8BDD7BE8885F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.Analyzers.Test", "src\Mvc\Mvc.Analyzers\test\Mvc.Analyzers.Test.csproj", "{EA846E30-4F38-4315-844F-D5BC20F74B07}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorPagesClassLibrary", "src\Mvc\test\WebSites\RazorPagesClassLibrary\RazorPagesClassLibrary.csproj", "{3BEA35BC-784F-4892-AF1F-90177B8362A1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Views.TestCommon", "src\Mvc\shared\Mvc.Views.TestCommon\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj", "{9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Api.Analyzers", "Mvc.Api.Analyzers", "{2A92D94B-9825-42D3-AB33-52E3010D74E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mvc.Api.Analyzers.Test", "src\Mvc\Mvc.Api.Analyzers\test\Mvc.Api.Analyzers.Test.csproj", "{E27910E1-6CCE-41B2-97DD-AE874007B592}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Api.Analyzers", "src\Mvc\Mvc.Api.Analyzers\src\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj", "{72879779-4CAC-4CB0-A052-FF60EB386B7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Views.Microbenchmarks", "src\Mvc\perf\Microbenchmarks\Microsoft.AspNetCore.Mvc.Views\Microsoft.AspNetCore.Mvc.Views.Microbenchmarks.csproj", "{5BD69C96-623F-427B-9AAF-67C0817A9A9A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GenericHostWebSite", "src\Mvc\test\WebSites\GenericHostWebSite\GenericHostWebSite.csproj", "{D10BA44E-219B-4528-98F5-0CB0FCF17017}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Test", "src\Mvc\Mvc\test\Microsoft.AspNetCore.Mvc.Test.csproj", "{EAF56BE6-683A-4C34-AC2D-22770EC13915}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions.Test", "src\Mvc\Mvc.Abstractions\test\Microsoft.AspNetCore.Mvc.Abstractions.Test.csproj", "{6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer.Test", "src\Mvc\Mvc.ApiExplorer\test\Microsoft.AspNetCore.Mvc.ApiExplorer.Test.csproj", "{332A8F84-FC5B-44A5-95A2-379B69C6E755}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core.Test", "src\Mvc\Mvc.Core\test\Microsoft.AspNetCore.Mvc.Core.Test.csproj", "{A28B3D43-619F-44A9-9463-78F0E2474351}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors.Test", "src\Mvc\Mvc.Cors\test\Microsoft.AspNetCore.Mvc.Cors.Test.csproj", "{926D431D-D95F-42BA-817B-DFEAF697E007}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations.Test", "src\Mvc\Mvc.DataAnnotations\test\Microsoft.AspNetCore.Mvc.DataAnnotations.Test.csproj", "{00D4573D-B61D-48C2-BCB4-027A19EB3247}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Formatters.Xml", "Mvc.Formatters.Xml", "{46AB5306-4FF5-4A4B-8009-DFCFAB178442}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml", "src\Mvc\Mvc.Formatters.Xml\src\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj", "{EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml.Test", "src\Mvc\Mvc.Formatters.Xml\test\Microsoft.AspNetCore.Mvc.Formatters.Xml.Test.csproj", "{5500EB93-4F36-4929-9730-E593DBC2B7F5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization.Test", "src\Mvc\Mvc.Localization\test\Microsoft.AspNetCore.Mvc.Localization.Test.csproj", "{0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Test", "src\Mvc\Mvc.Razor\test\Microsoft.AspNetCore.Mvc.Razor.Test.csproj", "{19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages.Test", "src\Mvc\Mvc.RazorPages\test\Microsoft.AspNetCore.Mvc.RazorPages.Test.csproj", "{FFA69E3E-1168-49F1-AF95-D16C08E34BC5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers.Test", "src\Mvc\Mvc.TagHelpers\test\Microsoft.AspNetCore.Mvc.TagHelpers.Test.csproj", "{DE9982E8-CBC6-4CD7-B322-AC0D792F7136}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures.Test", "src\Mvc\Mvc.ViewFeatures\test\Microsoft.AspNetCore.Mvc.ViewFeatures.Test.csproj", "{687BD42C-54CD-4E80-A877-6E278AE21105}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.FunctionalTests", "src\Mvc\test\Mvc.FunctionalTests\Microsoft.AspNetCore.Mvc.FunctionalTests.csproj", "{F0A4EEF4-EBD5-4F01-96D0-183478ECC797}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.IntegrationTests", "src\Mvc\test\Mvc.IntegrationTests\Microsoft.AspNetCore.Mvc.IntegrationTests.csproj", "{BD57D455-9B11-4BA6-9F1D-6B289284642D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TestDiagnosticListener", "src\Mvc\shared\Mvc.TestDiagnosticListener\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj", "{0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core.TestCommon", "src\Mvc\shared\Mvc.Core.TestCommon\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj", "{16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test", "src\Mvc\Mvc.NewtonsoftJson\test\Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test.csproj", "{6D9C0B4C-A902-4F37-921F-1A5B14405463}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Razor.RuntimeCompilation", "Mvc.Razor.RuntimeCompilation", "{59BDE9D7-C177-4A40-B1EF-267FB260A59C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation", "src\Mvc\Mvc.Razor.RuntimeCompilation\src\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj", "{9FF8728F-B953-4481-9B9F-11351CA0BFE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test", "src\Mvc\Mvc.Razor.RuntimeCompilation\test\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test.csproj", "{586ECE45-FD14-4520-9823-0A9B043FCC6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorBuildWebSite.PrecompiledViews", "src\Mvc\test\WebSites\RazorBuildWebSite.PrecompiledViews\RazorBuildWebSite.PrecompiledViews.csproj", "{6BDD94A4-91DF-40F5-A1CE-88D46F26084F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProjectTemplates", "ProjectTemplates", "{08D53E58-4AAE-40C4-8497-63EC8664F304}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ProjectTemplates", "src\ProjectTemplates\Web.ProjectTemplates\Microsoft.DotNet.Web.ProjectTemplates.csproj", "{5D3C520F-0CA7-4759-A563-40496545FA48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.Client.ItemTemplates", "src\ProjectTemplates\Web.Client.ItemTemplates\Microsoft.DotNet.Web.Client.ItemTemplates.csproj", "{4F2C221D-7D0B-46B3-9362-2D68F92ECF29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ItemTemplates", "src\ProjectTemplates\Web.ItemTemplates\Microsoft.DotNet.Web.ItemTemplates.csproj", "{D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Tests", "src\ProjectTemplates\test\Templates.Tests\Templates.Tests.csproj", "{6DE03095-7EAC-41DF-8AE4-3018ED29BC61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Blazor.Tests", "src\ProjectTemplates\test\Templates.Blazor.Tests\Templates.Blazor.Tests.csproj", "{18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Framework", "Framework", "{A4C26078-B6D8-4FD8-87A6-7C15A3482038}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "App.Runtime", "App.Runtime", "{F1A6BA04-853E-43B5-B27E-54558603837B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Runtime", "src\Framework\App.Runtime\src\Microsoft.AspNetCore.App.Runtime.csproj", "{3163C56E-99BC-4BD1-8880-4F94A2407741}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test", "src\Razor\Razor\test\Microsoft.AspNetCore.Razor.Test.csproj", "{776BFCDC-8591-4E3D-BD0D-858A188A033D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime.Test", "src\Razor\Razor.Runtime\test\Microsoft.AspNetCore.Razor.Runtime.Test.csproj", "{ED34C082-619E-4CCB-9D26-4E2375633FA2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CF9D35EC-CA9B-481D-BAAC-5D4654732AB9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthSamples.FunctionalTests", "src\Security\test\AuthSamples.FunctionalTests\AuthSamples.FunctionalTests.csproj", "{31B7D2B1-47AF-432B-BF07-73916EF238EE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C75B1FB3-6BB7-411A-B76C-06E5E0C3D957}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cookies", "src\Security\samples\Cookies\Cookies.csproj", "{A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClaimsTransformation", "src\Security\samples\ClaimsTransformation\ClaimsTransformation.csproj", "{1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamicSchemes", "src\Security\samples\DynamicSchemes\DynamicSchemes.csproj", "{256DCEBC-1E1D-46B2-9031-E358E850F3C5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Identity.ExternalClaims", "src\Security\samples\Identity.ExternalClaims\Identity.ExternalClaims.csproj", "{1D1E165C-435A-4716-8769-31A51632D7C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PathSchemeSelection", "src\Security\samples\PathSchemeSelection\PathSchemeSelection.csproj", "{AD25BD40-D6D6-4D82-A700-FE2376EE27A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomPolicyProvider", "src\Security\samples\CustomPolicyProvider\CustomPolicyProvider.csproj", "{817D138C-19D8-4264-8FAF-660B05AC030D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticFilesAuth", "src\Security\samples\StaticFilesAuth\StaticFilesAuth.csproj", "{1FE68FDC-F122-4605-B49D-FDC8C17324A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomAuthorizationFailureResponse", "src\Security\samples\CustomAuthorizationFailureResponse\CustomAuthorizationFailureResponse.csproj", "{C4CE88C8-1E48-49FC-A344-D6EE92FC9894}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.CookiePolicy.Test", "src\Security\CookiePolicy\test\Microsoft.AspNetCore.CookiePolicy.Test.csproj", "{45A7FB48-3811-4DAF-989C-141EE4AEFB03}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A75C9764-FC22-4AE1-9704-5519CB556FC3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookiePolicySample", "src\Security\CookiePolicy\samples\CookiePolicySample\CookiePolicySample.csproj", "{86741306-CF87-4AEA-9015-188A3CECBFBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Test", "src\Security\Authorization\test\Microsoft.AspNetCore.Authorization.Test.csproj", "{2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Test", "src\Security\Authentication\test\Microsoft.AspNetCore.Authentication.Test.csproj", "{6592343C-B7B7-4687-8942-1C2241414A02}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{618D85A4-F111-41AB-A9B6-BBBB8A395209}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SocialSample", "src\Security\Authentication\samples\SocialSample\SocialSample.csproj", "{DA64A7BF-F869-414C-A096-076723E55C61}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{974EA46A-4658-4767-A9AA-A0FF143CF725}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookieSample", "src\Security\Authentication\Cookies\samples\CookieSample\CookieSample.csproj", "{06C034BE-0079-4AC3-815B-D71AC44DF3A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CookieSessionSample", "src\Security\Authentication\Cookies\samples\CookieSessionSample\CookieSessionSample.csproj", "{9DD484F7-062B-43D4-AC70-0E226BA168FF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{7FD32066-C831-4E29-978C-9A2215E85C67}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtBearerSample", "src\Security\Authentication\JwtBearer\samples\JwtBearerSample\JwtBearerSample.csproj", "{88C2C45B-ED16-4B85-8498-E3F13679629D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{E19E55A2-1562-47A7-8EA6-B51F2CA0CC4C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenIdConnectSample", "src\Security\Authentication\OpenIdConnect\samples\OpenIdConnectSample\OpenIdConnectSample.csproj", "{F6B80862-7D74-4362-B5E2-AEBF116F2B19}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WsFederation", "WsFederation", "{602CE06C-E973-401D-8877-90957E613646}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{BECDA951-C285-485D-BFE6-F770BC8C9EB2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WsFedSample", "src\Security\Authentication\WsFederation\samples\WsFedSample\WsFedSample.csproj", "{E1CE011A-47BD-496D-B9EB-2766C198A619}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.WsFederation", "src\Security\Authentication\WsFederation\src\Microsoft.AspNetCore.Authentication.WsFederation.csproj", "{3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{966E6A8A-4D9C-4B9E-92DB-06F5144F5DC8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Security.Microbenchmarks", "src\Security\perf\Microbenchmarks\Microsoft.AspNetCore.Security.Microbenchmarks.csproj", "{9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Negotiate", "Negotiate", "{3FE077EF-DD37-4652-B71C-3174D4C485E2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{A641BE9F-113E-4F2F-8DC0-995E97C5BD27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NegotiateAuthSample", "src\Security\Authentication\Negotiate\samples\NegotiateAuthSample\NegotiateAuthSample.csproj", "{7F67C1C2-7352-414F-9149-1F16D53C7435}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate", "src\Security\Authentication\Negotiate\src\Microsoft.AspNetCore.Authentication.Negotiate.csproj", "{046AFDDE-B31B-4205-B059-0E8E194E954D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0AEE12FF-FDFF-4A75-A77E-93B1E24E5587}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate.Test", "src\Security\Authentication\Negotiate\test\Negotiate.Test\Microsoft.AspNetCore.Authentication.Negotiate.Test.csproj", "{3FBD8F55-38A8-4263-A98D-AD723C6D9C44}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest", "src\Security\Authentication\Negotiate\test\Negotiate.FunctionalTest\Microsoft.AspNetCore.Authentication.Negotiate.FunctionalTest.csproj", "{7E4C524F-94E1-4F7F-9498-FD503BC97CEF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Certificate", "Certificate", "{8A241C1B-18FA-4237-A354-29D7010C1067}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Certificate", "src\Security\Authentication\Certificate\src\Microsoft.AspNetCore.Authentication.Certificate.csproj", "{119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{148D77C2-C6DA-45FA-90A6-761EE01066D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certificate.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Sample\Certificate.Sample.csproj", "{A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Certificate.Optional.Sample", "src\Security\Authentication\Certificate\samples\Certificate.Optional.Sample\Certificate.Optional.Sample.csproj", "{451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{5F0044F2-4C66-46A8-BD79-075F001AA034}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7BAE6185-D148-4388-B65F-34FD22CCD824}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Shared.Tests", "src\Shared\test\Shared.Tests\Microsoft.AspNetCore.Shared.Tests.csproj", "{197EB396-53AA-4C29-8A59-3FEACD3703B6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{3E3F7422-36C0-47E4-8B4E-052C2E8EB439}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignalRSamples", "src\SignalR\samples\SignalRSamples\SignalRSamples.csproj", "{7A88CF78-413B-4EC7-A2E5-853C7E8075A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SocialWeather", "src\SignalR\samples\SocialWeather\SocialWeather.csproj", "{0D162D66-86E8-40AA-84EA-AA1EDA2482BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientSample", "src\SignalR\samples\ClientSample\ClientSample.csproj", "{294EC05D-B818-4CD5-AF6E-95B3F23607FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSocketSample", "src\SignalR\samples\WebSocketSample\WebSocketSample.csproj", "{892333B9-689B-4E51-82FF-CC5376961A36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtClientSample", "src\SignalR\samples\JwtClientSample\JwtClientSample.csproj", "{4D4CB590-9F66-4D75-B439-D3B445975A55}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ts", "ts", "{3D423A77-84D4-4214-8F6F-CD532A56A126}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignalR.Client.FunctionalTestApp", "src\SignalR\clients\ts\FunctionalTests\SignalR.Client.FunctionalTestApp.csproj", "{4C8F04E9-24EC-496B-88FA-62DE096F1C3D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JwtSample", "src\SignalR\samples\JwtSample\JwtSample.csproj", "{257A6551-7987-4C5C-BE6F-376094477371}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{350A2B0C-246F-4CC1-A194-32DF8C4427A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.FunctionalTests", "src\SignalR\clients\csharp\Client\test\FunctionalTests\Microsoft.AspNetCore.SignalR.Client.FunctionalTests.csproj", "{5236B5B7-E2CD-4D20-A65C-D5803E78885F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.Tests", "src\SignalR\clients\csharp\Client\test\UnitTests\Microsoft.AspNetCore.SignalR.Client.Tests.csproj", "{CACBB755-08B6-4176-9390-CAD3F9962E80}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Tests", "src\SignalR\common\Http.Connections\test\Microsoft.AspNetCore.Http.Connections.Tests.csproj", "{B84D149A-3DD6-47EA-B78E-D36EF2379D6B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common.Tests", "src\SignalR\common\SignalR.Common\test\Microsoft.AspNetCore.SignalR.Common.Tests.csproj", "{75F3739D-9404-44B0-8F1F-1BDE4542047A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{5095E70C-6DEE-486E-A9D0-E8849214EE4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Microbenchmarks", "src\SignalR\perf\Microbenchmarks\Microsoft.AspNetCore.SignalR.Microbenchmarks.csproj", "{A6A95BEF-7E21-4D3D-921B-F77267219D27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Tests", "src\SignalR\server\SignalR\test\Microsoft.AspNetCore.SignalR.Tests\Microsoft.AspNetCore.SignalR.Tests.csproj", "{4DC9C494-9867-4319-937E-5FBC0E5F5A51}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Specification.Tests", "Specification.Tests", "{245939DA-D68D-4B5C-A95E-D3B6923614FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Specification.Tests", "src\SignalR\server\Specification.Tests\src\Microsoft.AspNetCore.SignalR.Specification.Tests.csproj", "{39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StackExchangeRedis", "StackExchangeRedis", "{CD9041EE-8C47-4C6F-8A21-6EDCBC0D409E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis", "src\SignalR\server\StackExchangeRedis\src\Microsoft.AspNetCore.SignalR.StackExchangeRedis.csproj", "{DEA32B7F-E9B4-4E87-8B47-30555D286D93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests", "src\SignalR\server\StackExchangeRedis\test\Microsoft.AspNetCore.SignalR.StackExchangeRedis.Tests.csproj", "{6248B017-2912-4989-9994-2685C4D88E9A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebEncoders", "WebEncoders", "{4C93CC04-1EE4-48EA-8FAE-DC2283528BEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.WebEncoders", "src\WebEncoders\src\Microsoft.Extensions.WebEncoders.csproj", "{AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FileProviders", "FileProviders", "{FED63417-432B-49CD-AB4B-44ADA837C2E7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Embedded", "Embedded", "{898F7E0B-1671-42CB-9DFB-689AFF212ED3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded", "src\FileProviders\Embedded\src\Microsoft.Extensions.FileProviders.Embedded.csproj", "{65EE0531-4533-407F-A9CA-2EBCDC444397}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{0B200A66-B809-4ED3-A790-CB1C2E80975E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-dev-certs", "dotnet-dev-certs", "{A4EECF29-6E66-4E7F-B781-A169B0C2AB29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-dev-certs", "src\Tools\dotnet-dev-certs\src\dotnet-dev-certs.csproj", "{52433D20-35EA-48CC-BB4A-4DFE3023670B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-sql-cache", "dotnet-sql-cache", "{8562A154-B802-411B-897C-89621C4B05CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-sql-cache", "src\Tools\dotnet-sql-cache\src\dotnet-sql-cache.csproj", "{C911DC19-9556-4DCC-9794-AD907137348F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-user-secrets", "dotnet-user-secrets", "{F31AC68C-2D71-492C-BA4B-41FE503FFD56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-secrets", "src\Tools\dotnet-user-secrets\src\dotnet-user-secrets.csproj", "{4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-secrets.Tests", "src\Tools\dotnet-user-secrets\test\dotnet-user-secrets.Tests.csproj", "{4FB3DFA0-3124-474B-A908-694DF4FC1ABB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.dotnet-openapi", "Microsoft.dotnet-openapi", "{192363C9-2D7B-47BD-A1A3-C6FEC6DF5D9D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.dotnet-openapi", "src\Tools\Microsoft.dotnet-openapi\src\Microsoft.dotnet-openapi.csproj", "{4655E193-E5F4-449B-B1A3-6358AC8D3A27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-microsoft.openapi.Tests", "src\Tools\Microsoft.dotnet-openapi\test\dotnet-microsoft.openapi.Tests.csproj", "{7A29AAAB-2B4B-4D47-A315-23A0E830E214}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.ApiDescription.Client", "Extensions.ApiDescription.Client", "{755D9C6A-F036-4122-8334-96F0CC70F370}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client", "src\Tools\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj", "{AB8C9BF4-3134-449B-BA3F-BAFDE9394491}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-getdocument", "dotnet-getdocument", "{3CE23673-047A-47AA-A028-7F2942805870}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-getdocument", "src\Tools\dotnet-getdocument\src\dotnet-getdocument.csproj", "{7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions.ApiDescription.Server", "Extensions.ApiDescription.Server", "{BE2C2FE4-7BC7-4A4B-A8B8-19FF0648DEFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Server", "src\Tools\Extensions.ApiDescription.Server\src\Microsoft.Extensions.ApiDescription.Server.csproj", "{EBE144DD-577E-4E98-BFEB-94E479753927}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GetDocumentInsider", "GetDocumentInsider", "{A1B75FC7-A777-4412-A635-D0C9ED8FE7A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocument.Insider", "src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client.Tests", "src\Tools\Extensions.ApiDescription.Client\test\Microsoft.Extensions.ApiDescription.Client.Tests.csproj", "{34E40892-48C1-4D3D-AB49-FAC3C4C00B42}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "FirstRunCertGenerator", "FirstRunCertGenerator", "{E5BE8CB1-57A8-48FD-9904-76A8C6B540BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests", "src\Tools\FirstRunCertGenerator\test\Microsoft.AspNetCore.DeveloperCertificates.XPlat.Tests.csproj", "{A8A42FB4-1B51-4290-9291-445D3A489758}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DeveloperCertificates.XPlat", "src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj", "{3C8D5C14-F27B-4657-93C2-AC0E94EE683F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch.Tests", "src\Features\JsonPatch\test\Microsoft.AspNetCore.JsonPatch.Tests.csproj", "{9883418F-C427-426E-9021-E3F1BAF33E6B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{49016328-4D32-46E4-A4D2-94686ED38EA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestClient", "src\Servers\HttpSys\samples\TestClient\TestClient.csproj", "{A34041A8-20B9-4DE8-B336-8A900BDAD4EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SelfHostServer", "src\Servers\HttpSys\samples\SelfHostServer\SelfHostServer.csproj", "{31405D54-645D-490B-9041-88119D8B1B47}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotAddSample", "src\Servers\HttpSys\samples\HotAddSample\HotAddSample.csproj", "{689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C3722C5D-E159-4AB3-AF60-769185B31B47}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.FunctionalTests", "src\Servers\HttpSys\test\FunctionalTests\Microsoft.AspNetCore.Server.HttpSys.FunctionalTests.csproj", "{10959BB7-197C-4DE1-A2F2-CA9445E3591F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.Tests", "src\Servers\HttpSys\test\Tests\Microsoft.AspNetCore.Server.HttpSys.Tests.csproj", "{3297D10B-B32A-4F70-8200-2B727C759C8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QueueSharing", "src\Servers\HttpSys\samples\QueueSharing\QueueSharing.csproj", "{8EAE1C36-4A33-4A96-BACD-3FDC35844249}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{41BB7BA4-AC08-4E9A-83EA-6D587A5B951C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISExpress.FunctionalTests", "src\Servers\IIS\IIS\test\IISExpress.FunctionalTests\IISExpress.FunctionalTests.csproj", "{C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B49E037F-1F0A-46CA-9977-1987465C306C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "src\Servers\IIS\IIS\samples\NativeIISSample\NativeIISSample.csproj", "{D07B2752-8919-4CFE-8438-DFAFE91A4AB0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{ABC4EF1D-3525-41A9-929D-0FF7CEED4DDB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Microbenchmarks", "src\Servers\IIS\IIS\perf\Microbenchmarks\IIS.Microbenchmarks.csproj", "{65EC29AD-91CA-49BA-B1FC-D3DF127BE887}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.FunctionalTests\IIS.FunctionalTests.csproj", "{45A023F9-C7E7-42CA-968B-5FCE9EC626BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Tests", "src\Servers\IIS\IIS\test\IIS.Tests\IIS.Tests.csproj", "{8A6992D5-478C-49E4-936F-EA97E5850A7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewHandler.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewHandler.FunctionalTests\IIS.NewHandler.FunctionalTests.csproj", "{7107FC61-E540-4946-A090-A0E0D8357505}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.NewShim.FunctionalTests", "src\Servers\IIS\IIS\test\IIS.NewShim.FunctionalTests\IIS.NewShim.FunctionalTests.csproj", "{514D41F9-8D97-49A6-8C7A-74545358E2CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{1B635E97-715B-4F8D-AE58-4553C7B07016}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "src\Servers\IIS\IISIntegration\test\Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{F8AB0D33-1082-4F41-90E7-77C06EDD983D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{4BBD404C-5588-49C4-A320-C5B1D3532B18}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "src\Servers\IIS\IISIntegration\samples\IISSample\IISSample.csproj", "{647F0202-165F-4E98-A798-B2B3113050EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Core.Tests", "src\Servers\Kestrel\Core\test\Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj", "{0C3C1602-BE06-4DDE-835F-A0DE1563808B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Tests", "src\Servers\Kestrel\Kestrel\test\Microsoft.AspNetCore.Server.Kestrel.Tests.csproj", "{1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{C69630AA-7BCC-401E-B0EE-AACFCF55F6A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks", "src\Servers\Kestrel\perf\Microbenchmarks\Microsoft.AspNetCore.Server.Kestrel.Microbenchmarks.csproj", "{51A02E3E-6932-479C-A287-CC6C3611B715}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Http2SampleApp", "src\Servers\Kestrel\samples\Http2SampleApp\Http2SampleApp.csproj", "{7542D11F-2401-457C-992B-0473ADBD7842}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LargeResponseApp", "src\Servers\Kestrel\samples\LargeResponseApp\LargeResponseApp.csproj", "{ADFCDE19-5A3D-482D-8133-B7F419D96668}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlaintextApp", "src\Servers\Kestrel\samples\PlaintextApp\PlaintextApp.csproj", "{B43F63FE-0957-42A1-8431-B2D6E4F2958E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kestrel.SampleApp", "src\Servers\Kestrel\samples\SampleApp\Kestrel.SampleApp.csproj", "{F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemdTestApp", "src\Servers\Kestrel\samples\SystemdTestApp\SystemdTestApp.csproj", "{73788491-F1D6-41C7-838B-F9E8060E7FB9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sockets.FunctionalTests", "src\Servers\Kestrel\test\Sockets.FunctionalTests\Sockets.FunctionalTests.csproj", "{6E3A74C9-EF79-45A0-AA3A-76411AA06A05}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{2C7F02B9-2994-4B5B-BB97-0896BCB64101}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CodeGenerator", "src\Servers\Kestrel\tools\CodeGenerator\CodeGenerator.csproj", "{AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InMemory.FunctionalTests", "src\Servers\Kestrel\test\InMemory.FunctionalTests\InMemory.FunctionalTests.csproj", "{3EE7F5FE-4376-442D-BA77-82AD531DBFBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Interop.FunctionalTests", "src\Servers\Kestrel\test\Interop.FunctionalTests\Interop.FunctionalTests.csproj", "{71568623-71F9-4110-ACE2-093CD0DA911C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sockets.BindTests", "src\Servers\Kestrel\test\Sockets.BindTests\Sockets.BindTests.csproj", "{EDE77D0C-321A-49FD-95D7-56ED41242A93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "http2cat", "src\Servers\Kestrel\samples\http2cat\http2cat.csproj", "{8BDEC645-73BD-453B-8A5C-D616BC4EA08D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transport.Quic", "Transport.Quic", "{EE9D0952-6060-4723-B329-94A2950A6762}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic", "src\Servers\Kestrel\Transport.Quic\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.csproj", "{132D43A2-067A-4E24-A520-45B9F14DCB8E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Http3SampleApp", "src\Servers\Kestrel\samples\Http3SampleApp\Http3SampleApp.csproj", "{2EC4E939-513F-44CD-A956-498966EAC929}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpStress", "src\Servers\Kestrel\stress\HttpStress.csproj", "{987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerComparison.FunctionalTests", "src\Servers\test\FunctionalTests\ServerComparison.FunctionalTests.csproj", "{48E64014-B249-4644-8AEB-CDEE8ABA0DC2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{6126DCE4-9692-4EE2-B240-C65743572995}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicTestApp", "src\Components\test\testassets\BasicTestApp\BasicTestApp.csproj", "{46FB7E93-1294-4068-B80A-D4864F78277A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.App", "src\Components\test\testassets\ComponentsApp.App\ComponentsApp.App.csproj", "{25FA84DB-EEA7-4068-8E2D-F3D48B281C16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComponentsApp.Server", "src\Components\test\testassets\ComponentsApp.Server\ComponentsApp.Server.csproj", "{19974360-4A63-425A-94DB-C2C940A3A97A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LazyTestContentPackage", "src\Components\test\testassets\LazyTestContentPackage\LazyTestContentPackage.csproj", "{ADF9C126-F322-4E34-AFD3-E626A4487206}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestContentPackage", "src\Components\test\testassets\TestContentPackage\TestContentPackage.csproj", "{3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.TestServer", "src\Components\test\testassets\Components.TestServer\Components.TestServer.csproj", "{8A59AF88-4A82-46ED-977D-D909001F8107}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ObjectPool", "ObjectPool", "{E235DAAD-FE73-469E-B16F-F2B8E872E217}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ObjectPool", "src\ObjectPool\src\Microsoft.Extensions.ObjectPool.csproj", "{CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{00B2DD87-7E2A-4460-BE1B-5E18B1062B7F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropClient", "src\Grpc\Interop\test\testassets\InteropClient\InteropClient.csproj", "{C3A0F425-669F-46A8-893F-CF449A6DAE56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InteropWebsite", "src\Grpc\Interop\test\testassets\InteropWebsite\InteropWebsite.csproj", "{19189670-E206-471D-94F8-7D3D545E5020}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Performance.ConsoleHost", "src\Components\benchmarkapps\Wasm.Performance\ConsoleHost\Wasm.Performance.ConsoleHost.csproj", "{E9408723-E6A9-4715-B906-3B25B0238ABA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "src\Servers\IIS\IIS\test\testassets\InProcessWebSite\InProcessWebSite.csproj", "{8DA61885-B95E-4BA1-A752-C79B6597FC44}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ANCM", "ANCM", "{D62AF49B-F9FE-4794-AC39-A473FF13CA81}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj", "{EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\Servers\IIS\AspNetCoreModuleV2\CommonLib\CommonLib.vcxproj", "{55494E58-E061-4C4C-A0A8-837008E72F85}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLibTests", "src\Servers\IIS\AspNetCoreModuleV2\CommonLibTests\CommonLibTests.vcxproj", "{1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "src\Servers\IIS\AspNetCoreModuleV2\gtest\gtest.vcxproj", "{CAC1267B-8778-4257-AAC6-CAF481723B01}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\Servers\IIS\AspNetCoreModuleV2\IISLib\IISLib.vcxproj", "{09D9D1D6-2951-4E14-BC35-76A23CF9391A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InProcessRequestHandler", "src\Servers\IIS\AspNetCoreModuleV2\InProcessRequestHandler\InProcessRequestHandler.vcxproj", "{D57EA297-6DC2-4BC0-8C91-334863327863}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OutOfProcessRequestHandler", "src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj", "{7F87406C-A3C8-4139-A68D-E4C344294A67}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandlerLib", "src\Servers\IIS\AspNetCoreModuleV2\RequestHandlerLib\RequestHandlerLib.vcxproj", "{1533E271-F61B-441B-8B74-59FB61DF0552}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ANCMSymbols", "src\Servers\IIS\AspNetCoreModuleV2\Symbols\Microsoft.AspNetCore.ANCMSymbols.csproj", "{7E268085-1046-4362-80CB-2977FF826DCA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{7D2B0799-A634-42AC-AE77-5D167BA51389}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedInAspNet.Client", "src\Components\WebAssembly\testassets\HostedInAspNet.Client\HostedInAspNet.Client.csproj", "{9788C76F-658B-4441-88F8-22C6B86FAD27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedInAspNet.Server", "src\Components\WebAssembly\testassets\HostedInAspNet.Server\HostedInAspNet.Server.csproj", "{1970D5CD-D9A4-4673-A297-179BB04199F4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StandaloneApp", "src\Components\WebAssembly\testassets\StandaloneApp\StandaloneApp.csproj", "{A40350FE-4334-4007-B1C3-6BEB1B070309}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ThreadingApp", "src\Components\WebAssembly\testassets\ThreadingApp\ThreadingApp.csproj", "{A40350FE-4334-4007-B1C3-6BEB1B070308}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ThreadingApp.Server", "src\Components\WebAssembly\testassets\ThreadingApp.Server\ThreadingApp.Server.csproj", "{F1792637-28B9-4F2A-B318-FA923C365049}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks", "HealthChecks", "{C1E7F837-6988-43E2-9E1C-7302DB484F99}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2A91479A-4ABE-4BB7-9A5E-CA3B9CCFC69E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{7CB09412-C9B0-47E8-A8C3-311AA4CFDE04}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abstractions", "Abstractions", "{22D7D74B-565D-4047-97B4-F149B1A13350}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions", "src\HealthChecks\Abstractions\src\Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.csproj", "{B06040BC-DA28-4923-8CAC-20EB517D471B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks", "src\HealthChecks\HealthChecks\src\Microsoft.Extensions.Diagnostics.HealthChecks.csproj", "{55CACC1F-FE96-47C8-8073-91F4CAA55C75}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagnostics.HealthChecks.Tests", "src\HealthChecks\HealthChecks\test\Microsoft.Extensions.Diagnostics.HealthChecks.Tests.csproj", "{7509AA1E-3093-4BEE-984F-E11579E98A11}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.Tests", "src\JSInterop\Microsoft.JSInterop\test\Microsoft.JSInterop.Tests.csproj", "{DAAB6B35-CBD2-4573-B633-CDD42F583A0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile", "src\Configuration.KeyPerFile\src\Microsoft.Extensions.Configuration.KeyPerFile.csproj", "{498A4F54-F11A-46C5-A58D-09DE56C6A034}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration.KeyPerFile", "Configuration.KeyPerFile", "{AEB1933E-9369-4305-B20E-F186F888158F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile.Tests", "src\Configuration.KeyPerFile\test\Microsoft.Extensions.Configuration.KeyPerFile.Tests.csproj", "{B9D37BCF-80D1-489D-9FC6-55191FDBB033}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Manifest.MSBuildTask", "Manifest.MSBuildTask", "{8C15FD04-7F90-43FC-B488-023432FE3CE1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task", "src\FileProviders\Manifest.MSBuildTask\src\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.csproj", "{37329855-01B8-4B03-9765-1A941B06E43C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests", "src\FileProviders\Manifest.MSBuildTask\test\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests.csproj", "{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Tests", "src\FileProviders\Embedded\test\Microsoft.Extensions.FileProviders.Embedded.Tests.csproj", "{B06ADD57-E855-4D8C-85DC-B323509AE540}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Ref", "src\Framework\App.Ref\src\Microsoft.AspNetCore.App.Ref.csproj", "{BAD47859-95DF-4C8F-9AF7-C48B68F478A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.UnitTests", "src\Framework\test\Microsoft.AspNetCore.App.UnitTests.csproj", "{010A9638-F20E-4FE6-A186-85732BFC9CB0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization", "Localization", "{3D34C81F-2CB5-459E-87E9-0CC04757A2A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GlobalizationWasmApp", "src\Components\test\testassets\GlobalizationWasmApp\GlobalizationWasmApp.csproj", "{04CFE286-6D32-41EF-8887-4B5F8086A365}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.Abstractions", "src\Localization\Abstractions\src\Microsoft.Extensions.Localization.Abstractions.csproj", "{FEF97646-9BC9-4D1B-A939-784D915C18A4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization", "src\Localization\Localization\src\Microsoft.Extensions.Localization.csproj", "{839CE175-E0D9-43B9-9FA8-F32C47E7F56B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.RootNamespace.Tests", "src\Localization\Localization\test\Microsoft.Extensions.Localization.RootNamespace.Tests\Microsoft.Extensions.Localization.RootNamespace.Tests.csproj", "{50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Localization.Tests", "src\Localization\Localization\test\Microsoft.Extensions.Localization.Tests\Microsoft.Extensions.Localization.Tests.csproj", "{16B899B4-A4F4-4EF7-93BB-355861977A12}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Logging.AzureAppServices", "Logging.AzureAppServices", "{3EAB9890-2C01-444C-ACA0-D77B29CDE08B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices", "src\Logging.AzureAppServices\src\Microsoft.Extensions.Logging.AzureAppServices.csproj", "{3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices.Tests", "src\Logging.AzureAppServices\test\Microsoft.Extensions.Logging.AzureAppServices.Tests.csproj", "{43E3B132-2486-44A3-92C6-39E39724FAFD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{7B739F28-21DE-435D-9EA6-579064932350}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoutingWebSite", "src\Http\Routing\test\testassets\RoutingWebSite\RoutingWebSite.csproj", "{F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RoutingSandbox", "src\Http\Routing\test\testassets\RoutingSandbox\RoutingSandbox.csproj", "{0EBEE047-CBAD-4A69-8095-E3961B863446}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmarks", "src\Http\Routing\test\testassets\Benchmarks\Benchmarks.csproj", "{B4F76DF0-1638-42DA-B46A-30DC16AECEAB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SiteExtensions", "SiteExtensions", "{DFC4F588-B4B4-484B-AB93-B36721374AD3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LoggingAggregate", "LoggingAggregate", "{48FF1D87-5066-4294-B802-2D1B478C6EB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.SiteExtension", "src\SiteExtensions\LoggingAggregate\src\Microsoft.AspNetCore.AzureAppServices.SiteExtension\Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj", "{563A3FFA-32DA-4ADA-891C-E00897BD919E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests", "src\SiteExtensions\LoggingAggregate\test\Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests\Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj", "{DC5DE087-5C93-4441-9D62-1743A50E5086}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LB", "src\SiteExtensions\LoggingBranch\LB.csproj", "{F00CE8C1-5715-4683-A8E5-C467B712AD46}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.Web.Xdt.Extensions", "Microsoft.Web.Xdt.Extensions", "{56B45580-B089-424E-A847-A6115D591950}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Web.Xdt.Extensions", "src\SiteExtensions\Microsoft.Web.Xdt.Extensions\src\Microsoft.Web.Xdt.Extensions.csproj", "{4382555A-E4CD-4DFC-B59B-408FD4E93530}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Web.Xdt.Extensions.Tests", "src\SiteExtensions\Microsoft.Web.Xdt.Extensions\tests\Microsoft.Web.Xdt.Extensions.Tests.csproj", "{545751D5-71FC-4889-A3A0-BBD731DBA18A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostingStartup", "src\SiteExtensions\Sdk\HostingStartup\HostingStartup.csproj", "{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomBasePathApp", "src\Components\WebAssembly\testassets\CustomBasePathApp\CustomBasePathApp.csproj", "{E2461809-D2EA-436D-B5C3-8A9EE0A283B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Tests.Utils", "src\SignalR\common\testassets\Tests.Utils\Microsoft.AspNetCore.SignalR.Tests.Utils.csproj", "{C1CDD339-B51B-42BE-99F2-F39A4EC0D404}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{BB3D6EDD-AE71-4D25-B61B-7EBF7A1BA1D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Analyzer.Testing", "src\Analyzers\Microsoft.AspNetCore.Analyzer.Testing\src\Microsoft.AspNetCore.Analyzer.Testing.csproj", "{399EF81E-C3B5-4D86-8BF1-DC7926252A63}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching", "Caching", "{0F39820F-F4A5-41C6-9809-D79B68F032EF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpClientFactory", "HttpClientFactory", "{8DFA596B-BD00-404E-9445-BCFAC65BDC34}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Http.Polly", "src\HttpClientFactory\Polly\src\Microsoft.Extensions.Http.Polly.csproj", "{4FB95E16-918B-49C1-9F65-49D07CDE072C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Http.Polly.Tests", "src\HttpClientFactory\Polly\test\Microsoft.Extensions.Http.Polly.Tests.csproj", "{8001580F-B702-404B-A0FD-13538DDB9672}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SqlServer", "SqlServer", "{43ED0D49-E29A-4B12-8D10-531E006038E5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StackExchangeRedis", "StackExchangeRedis", "{A7B8F295-AD6E-42C1-A215-17337033EBE9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Caching.SqlServer", "src\Caching\SqlServer\src\Microsoft.Extensions.Caching.SqlServer.csproj", "{A19F94D3-0C6A-429D-811A-7A750AAD122A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Caching.SqlServer.Tests", "src\Caching\SqlServer\test\Microsoft.Extensions.Caching.SqlServer.Tests.csproj", "{20CA28CC-FCDB-49F3-8452-5036E0BADCA7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Caching.StackExchangeRedis", "src\Caching\StackExchangeRedis\src\Microsoft.Extensions.Caching.StackExchangeRedis.csproj", "{3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Caching.StackExchangeRedis.Tests", "src\Caching\StackExchangeRedis\test\Microsoft.Extensions.Caching.StackExchangeRedis.Tests.csproj", "{14DBB385-A1B1-49B2-A737-4DF90E127E5A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStartupInjectionAssemblyName", "src\Hosting\test\testassets\IStartupInjectionAssemblyName\IStartupInjectionAssemblyName.csproj", "{5FD94164-7D13-4618-93AD-7346B0EA0CDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Testing.Tasks", "src\Mvc\Mvc.Testing.Tasks\src\Microsoft.AspNetCore.Mvc.Testing.Tasks.csproj", "{5C50FA92-5488-4470-B42E-48EFEBA51D5A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Testing.Tasks", "Mvc.Testing.Tasks", "{34465A80-3BAF-4059-81B3-9090C0DB598F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestTasks", "src\Servers\IIS\IIS\test\testassets\TestTasks\TestTasks.csproj", "{9B8F871E-ED33-4D2F-AA49-E39D9299EC85}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.Common.TestLib", "src\Servers\IIS\IIS\test\testassets\IIS.Common.TestLib\IIS.Common.TestLib.csproj", "{7F295396-DBBD-40A5-A645-10004D1324DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessNewShimWebSite", "src\Servers\IIS\IIS\test\testassets\InProcessNewShimWebSite\InProcessNewShimWebSite.csproj", "{22EA0993-8DFC-40C2-8481-8E85E21EFB56}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BrowserTesting", "BrowserTesting", "{8F33439F-5532-45D6-8A44-20EF9104AA9D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.BrowserTesting", "src\Shared\BrowserTesting\src\Microsoft.AspNetCore.BrowserTesting.csproj", "{B739074E-6652-4F5B-B37E-775DC2245FEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WasmLinkerTest", "src\Components\WebAssembly\testassets\WasmLinkerTest\WasmLinkerTest.csproj", "{3B375FFC-1E38-453E-A26D-A510CCD3339E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{71287382-95EF-490D-A285-87196E29E88A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HostedBlazorWebassemblyApp", "HostedBlazorWebassemblyApp", "{B4226BE2-DCB7-40C5-93F2-94C9BD6F4394}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedBlazorWebassemblyApp.Client", "src\Components\WebAssembly\Samples\HostedBlazorWebassemblyApp\Client\HostedBlazorWebassemblyApp.Client.csproj", "{8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedBlazorWebassemblyApp.Server", "src\Components\WebAssembly\Samples\HostedBlazorWebassemblyApp\Server\HostedBlazorWebassemblyApp.Server.csproj", "{1A5582DD-06F4-4427-BFDC-B021A84A01BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostedBlazorWebassemblyApp.Shared", "src\Components\WebAssembly\Samples\HostedBlazorWebassemblyApp\Shared\HostedBlazorWebassemblyApp.Shared.csproj", "{E18EF144-9C2C-4366-B54C-09ACF7692A4F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebView", "WebView", "{C445B129-0A4D-41F5-8347-6534B6B12303}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions.Microbenchmarks", "src\Http\Http.Abstractions\perf\Microbenchmarks\Microsoft.AspNetCore.Http.Abstractions.Microbenchmarks.csproj", "{3F752B48-2936-4FCA-B0DC-4AB0F788F897}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestStartupAssembly1", "src\Hosting\test\testassets\TestStartupAssembly1\TestStartupAssembly1.csproj", "{262FF30C-34B4-462D-B5E2-0DABB9196E40}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Spa", "Spa", "{0A064174-8E5C-4F97-B941-A4E302661DF2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SpaProxy", "SpaProxy", "{5AC2A052-1D4F-4C2F-BCF5-3F07A3E31857}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaProxy", "src\Middleware\Spa\SpaProxy\src\Microsoft.AspNetCore.SpaProxy.csproj", "{0DBACF8E-2EDB-47FC-B998-B76522637B2E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SpaServices.Extensions", "SpaServices.Extensions", "{7F99E967-3DC1-4198-9D55-47CD9471D0B6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Extensions", "src\Middleware\Spa\SpaServices.Extensions\src\Microsoft.AspNetCore.SpaServices.Extensions.csproj", "{DF4637DA-5F07-4903-8461-4E2DAB235F3C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Extensions.Tests", "src\Middleware\Spa\SpaServices.Extensions\test\Microsoft.AspNetCore.SpaServices.Extensions.Tests.csproj", "{AAB50C64-39AA-4AED-8E9C-50D68E7751AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MinimalSample", "src\Http\samples\MinimalSample\MinimalSample.csproj", "{9647D8B7-4616-4E05-B258-BAD5CAEEDD38}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "MinimalSampleFSharp", "src\Http\samples\MinimalSampleFSharp\MinimalSampleFSharp.fsproj", "{11BE4471-6C3D-4758-881A-97B6A16F21F6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpLogging", "HttpLogging", "{022B4B80-E813-4256-8034-11A68146F4EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpLogging", "src\Middleware\HttpLogging\src\Microsoft.AspNetCore.HttpLogging.csproj", "{FF413F1C-A998-4FA2-823F-52AC0916B35C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpLogging.Tests", "src\Middleware\HttpLogging\test\Microsoft.AspNetCore.HttpLogging.Tests.csproj", "{3A1EC883-EF9C-43E8-95E5-6B527428867B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpLogging.Sample", "src\Middleware\HttpLogging\samples\HttpLogging.Sample\HttpLogging.Sample.csproj", "{908B2263-B58B-4261-A125-B5F2DFF92799}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.Tests", "src\Servers\Kestrel\Transport.Quic\test\Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.Tests.csproj", "{E3DAEBD3-CD36-493F-877F-460E8FFEAC52}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Features", "Features", "{17F28812-983E-4415-A55D-842DD7EC6887}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Features", "src\Extensions\Features\src\Microsoft.Extensions.Features.csproj", "{A07D3B13-388B-444F-9E37-DDC0787C4690}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Features.Tests", "src\Extensions\Features\test\Microsoft.Extensions.Features.Tests.csproj", "{09FFBC53-3EFF-45C4-9822-5D66089CD6AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView", "src\Components\WebView\WebView\src\Microsoft.AspNetCore.Components.WebView.csproj", "{3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Test", "src\Components\WebView\WebView\test\Microsoft.AspNetCore.Components.WebView.Test.csproj", "{4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleWebSiteWithWebApplicationBuilder", "src\Mvc\test\WebSites\SimpleWebSiteWithWebApplicationBuilder\SimpleWebSiteWithWebApplicationBuilder.csproj", "{6CCCF618-2E70-4870-B39F-32C016FE08F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B730328F-D9E9-4EAA-B28E-4631A14095F9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PhotinoPlatform", "PhotinoPlatform", "{44963D50-8B58-44E6-918D-788BCB406695}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{3EC71A0E-6515-4A5A-B759-F0BCF1BCFC56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PhotinoTestApp", "src\Components\WebView\Samples\PhotinoPlatform\testassets\PhotinoTestApp\PhotinoTestApp.csproj", "{558C46DE-DE16-41D5-8DB7-D6D748E32977}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebView.Photino", "src\Components\WebView\Samples\PhotinoPlatform\src\Microsoft.AspNetCore.Components.WebView.Photino.csproj", "{B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleWebSiteWithWebApplicationBuilderException", "src\Mvc\test\WebSites\SimpleWebSiteWithWebApplicationBuilderException\SimpleWebSiteWithWebApplicationBuilderException.csproj", "{5C641396-7E92-4F5C-A5A1-B4CDF480539B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Http.Results", "Http.Results", "{323C3EB6-1D15-4B3D-918D-699D7F64DED9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Results", "src\Http\Http.Results\src\Microsoft.AspNetCore.Http.Results.csproj", "{092EA9F6-84D4-41EF-A618-BDA50A0E10A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Results.Tests", "src\Http\Http.Results\test\Microsoft.AspNetCore.Http.Results.Tests.csproj", "{F599EAA6-399F-4A91-9B1F-D311305B43D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Logging.W3C.Sample", "src\Middleware\HttpLogging\samples\Logging.W3C.Sample\Logging.W3C.Sample.csproj", "{17459B97-1AA3-4154-83D3-C6BDC9FA3F85}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Client.SourceGenerator", "Client.SourceGenerator", "{4FC50620-4C8B-495F-859C-BFACAD158033}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Client.SourceGenerator", "src\SignalR\clients\csharp\Client.SourceGenerator\src\Microsoft.AspNetCore.SignalR.Client.SourceGenerator.csproj", "{E090F82D-8345-477E-92E8-F724F08ADC56}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpClientApp", "src\Servers\Kestrel\samples\HttpClientApp\HttpClientApp.csproj", "{514726D2-3D2E-44C1-B056-163E37DE3E8B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{48526D13-69E2-4409-A57B-C3FA3C64B4F7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Identity.DefaultUI.WebSite", "src\Identity\testassets\Identity.DefaultUI.WebSite\Identity.DefaultUI.WebSite.csproj", "{835A4E0F-A697-4B69-9736-3E99D163C4B9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Prerendered.Client", "src\Components\WebAssembly\testassets\Wasm.Prerendered.Client\Wasm.Prerendered.Client.csproj", "{148A5B4F-C8A3-4468-92F6-51DB5641FB49}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wasm.Prerendered.Server", "src\Components\WebAssembly\testassets\Wasm.Prerendered.Server\Wasm.Prerendered.Server.csproj", "{6D365C86-3158-49F5-A21D-506C1E06E870}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreAnalyzers", "AspNetCoreAnalyzers", "{4DA84F2B-1948-439B-85AB-E99E31331A9C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B5D98AEB-9409-4280-8225-9C1EC6A791B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Analyzers", "src\Framework\AspNetCoreAnalyzers\src\Analyzers\Microsoft.AspNetCore.App.Analyzers.csproj", "{2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.CodeFixes", "src\Framework\AspNetCoreAnalyzers\src\CodeFixes\Microsoft.AspNetCore.App.CodeFixes.csproj", "{D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Analyzers.Test", "src\Framework\AspNetCoreAnalyzers\test\Microsoft.AspNetCore.App.Analyzers.Test.csproj", "{40F493E2-FE59-4787-BE44-3AED39D585BF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{97F9F7E9-56DA-49FE-B672-499E68EBB9DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClassLibraryWithPortablePdbs", "src\Middleware\Diagnostics\test\testassets\ClassLibraryWithPortablePdbs\ClassLibraryWithPortablePdbs.csproj", "{6F335C66-C1D6-45FA-8529-6503B7CD42CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DatabaseErrorPageSample", "src\Middleware\Diagnostics\test\testassets\DatabaseErrorPageSample\DatabaseErrorPageSample.csproj", "{71A54D7F-245F-43C2-B429-342D80AC6F23}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeveloperExceptionPageSample", "src\Middleware\Diagnostics\test\testassets\DeveloperExceptionPageSample\DeveloperExceptionPageSample.csproj", "{75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExceptionHandlerSample", "src\Middleware\Diagnostics\test\testassets\ExceptionHandlerSample\ExceptionHandlerSample.csproj", "{DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StatusCodePagesSample", "src\Middleware\Diagnostics\test\testassets\StatusCodePagesSample\StatusCodePagesSample.csproj", "{B2D7BD12-5BDF-47F5-A55B-4A09D705731F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WelcomePageSample", "src\Middleware\Diagnostics\test\testassets\WelcomePageSample\WelcomePageSample.csproj", "{FD819B29-9EFE-4102-BD0A-375A63051458}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{18AE79DF-54D1-423A-99A1-2F54CAC3F4EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HealthChecksSample", "src\Middleware\HealthChecks\test\testassets\HealthChecksSample\HealthChecksSample.csproj", "{53EA8180-8942-4D16-B92A-C5D3813D47CE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{B5E22428-DAD8-4275-B8F0-14EC2174DDFE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalizationWebsite", "src\Middleware\Localization\testassets\LocalizationWebsite\LocalizationWebsite.csproj", "{B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResourcesClassLibraryNoAttribute", "src\Middleware\Localization\testassets\ResourcesClassLibraryNoAttribute\ResourcesClassLibraryNoAttribute.csproj", "{C397F73C-CADC-460E-9B27-71230B9C291E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResourcesClassLibraryWithAttribute", "src\Middleware\Localization\testassets\ResourcesClassLibraryWithAttribute\ResourcesClassLibraryWithAttribute.csproj", "{3F0C05F5-47EF-4896-8D32-4C80C4563286}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{83FA6123-6EC3-47F3-A0DC-A10225B5EB16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CorsMiddlewareWebSite", "src\Middleware\CORS\test\testassets\CorsMiddlewareWebSite\CorsMiddlewareWebSite.csproj", "{9B240135-3D1E-4EE6-B870-D810F3C856FB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installers", "Installers", "{5E46DC83-C39C-4E3A-B242-C064607F4367}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aspnetcoreCA", "src\Installers\Windows\AspNetCoreModule-Setup\CustomAction\aspnetcoreCA.vcxproj", "{7C27E72F-54D0-4820-8CFA-5E4BE640974B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iisca", "src\Installers\Windows\AspNetCoreModule-Setup\IIS-Setup\iisca\lib\iisca.vcxproj", "{7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\Installers\Windows\AspNetCoreModule-Setup\IIS-Setup\IIS-Common\lib\IISSetup.CommonLib.vcxproj", "{B54A8F61-60DE-4AD9-87CA-D102F230678E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModule-Setup", "AspNetCoreModule-Setup", "{D30A658D-61F6-444B-9AC7-F66A1A1B86B6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SharedFramework", "SharedFramework", "{31854B06-DC6B-4416-97C3-559CC390B8B4}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "SharedFramework", "src\Installers\Windows\SharedFramework\SharedFramework.wixproj", "{C681D730-4505-42C6-9E6C-87F757C4FB32}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "SharedFrameworkBundle", "src\Installers\Windows\SharedFrameworkBundle\SharedFrameworkBundle.wixproj", "{D6C54D8B-043F-4877-B751-60E7390F9EC6}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "SharedFrameworkLib", "src\Installers\Windows\SharedFrameworkLib\SharedFrameworkLib.wixproj", "{5244BC49-2568-4701-80A6-EAB8950AB5FA}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "WindowsHostingBundle", "src\Installers\Windows\WindowsHostingBundle\WindowsHostingBundle.wixproj", "{6F1B115C-1903-40CB-837D-7961AB610F4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerComparison.TestSites", "src\Servers\testassets\ServerComparison.TestSites\ServerComparison.TestSites.csproj", "{56DFE643-7F0F-40C8-9F7F-8EA5357781EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DelegationSite", "src\Servers\HttpSys\test\testassets\DelegationSite\DelegationSite.csproj", "{E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.NonHelixTests", "src\Servers\HttpSys\test\NonHelixTests\Microsoft.AspNetCore.Server.HttpSys.NonHelixTests.csproj", "{8EB0B983-8851-4565-B92F-366F1B126E61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.ShadowCopy.Tests", "src\Servers\IIS\IIS\test\IIS.ShadowCopy.Tests\IIS.ShadowCopy.Tests.csproj", "{93D3CC76-9FA9-4198-B49D-54BA918105EE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDK-Analyzers", "SDK-Analyzers", "{6C06163A-80E9-49C1-817C-B391852BA563}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Components", "Components", "{CC45FA2D-128B-485D-BA6D-DFD9735CB3C3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.SdkAnalyzers", "src\Tools\SDK-Analyzers\Components\src\Microsoft.AspNetCore.Components.SdkAnalyzers.csproj", "{825BCF97-67A9-4834-B3A8-C3DC97A90E41}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.SdkAnalyzers.Tests", "src\Tools\SDK-Analyzers\Components\test\Microsoft.AspNetCore.Components.SdkAnalyzers.Tests.csproj", "{DC349A25-0DBF-4468-99E1-B95C22D3A7EF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OutputCaching", "OutputCaching", "{AA5ABFBC-177C-421E-B743-005E0FD1248B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching", "src\Middleware\OutputCaching\src\Microsoft.AspNetCore.OutputCaching.csproj", "{5D5A3B60-A014-447C-9126-B1FA6C821C8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{B5AC1D8B-9D43-4261-AE0F-6B7574656F2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutputCachingSample", "src\Middleware\OutputCaching\samples\OutputCachingSample\OutputCachingSample.csproj", "{C3FFA4E4-0E7E-4866-A15F-034245BFD800}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RequestDecompression", "RequestDecompression", "{5465F96F-33D5-454E-9C40-494E58AEEE5D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RequestDecompression.Tests", "src\Middleware\RequestDecompression\test\Microsoft.AspNetCore.RequestDecompression.Tests.csproj", "{97996D39-7722-4AFC-A41A-AD61CA7A413D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RequestDecompressionSample", "src\Middleware\RequestDecompression\sample\RequestDecompressionSample.csproj", "{37144E52-611B-40E8-807C-2821F5A814CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RequestDecompression", "src\Middleware\RequestDecompression\src\Microsoft.AspNetCore.RequestDecompression.csproj", "{559FE354-7E08-4310-B4F3-AE30F34DEED5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LinkabilityChecker", "LinkabilityChecker", "{94F95276-7CDF-44A8-B159-D09702EF6794}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LinkabilityChecker", "src\Tools\LinkabilityChecker\LinkabilityChecker.csproj", "{EA7D844B-C180-41C7-9D55-273AD88BF71F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interop", "Interop", "{7A331A1C-E2C4-4E37-B0A0-B5AA10661229}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JsonTranscoding", "JsonTranscoding", "{DD076DDA-7956-4361-A7D4-2B8025AB3DFD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{5CDB8ABC-9DD0-4A9F-8948-EED5FFE89F67}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{151E6F9E-107B-4DDC-A2B1-95115801FD14}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B43BE3EB-9846-4484-88D8-05165202A0FC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{9A8AE587-A3DB-4211-8354-430C4CCBEB9B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationTestsWebsite", "src\Grpc\JsonTranscoding\test\testassets\IntegrationTestsWebsite\IntegrationTestsWebsite.csproj", "{2E28881D-A188-47AF-800A-B5877AD8C288}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sandbox", "src\Grpc\JsonTranscoding\test\testassets\Sandbox\Sandbox.csproj", "{A53696E8-6065-41BA-84FB-E89E0DACFF6C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.JsonTranscoding", "src\Grpc\JsonTranscoding\src\Microsoft.AspNetCore.Grpc.JsonTranscoding\Microsoft.AspNetCore.Grpc.JsonTranscoding.csproj", "{109C702D-DACE-4F82-A490-15E5AFA94005}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.Swagger", "src\Grpc\JsonTranscoding\src\Microsoft.AspNetCore.Grpc.Swagger\Microsoft.AspNetCore.Grpc.Swagger.csproj", "{E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.Swagger.Tests", "src\Grpc\JsonTranscoding\test\Microsoft.AspNetCore.Grpc.Swagger.Tests\Microsoft.AspNetCore.Grpc.Swagger.Tests.csproj", "{90CF4DC6-AC53-459F-9EAB-623A11EADAA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests", "src\Grpc\JsonTranscoding\test\Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests\Microsoft.AspNetCore.Grpc.JsonTranscoding.Tests.csproj", "{F18E97AE-3A3F-424D-8DC2-4D001A167F98}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.JsonTranscoding.IntegrationTests", "src\Grpc\JsonTranscoding\test\Microsoft.AspNetCore.Grpc.JsonTranscoding.IntegrationTests\Microsoft.AspNetCore.Grpc.JsonTranscoding.IntegrationTests.csproj", "{8C3E422A-F281-4B93-A567-88C7A1ED0412}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Grpc.Microbenchmarks", "src\Grpc\JsonTranscoding\perf\Microsoft.AspNetCore.Grpc.Microbenchmarks\Microsoft.AspNetCore.Grpc.Microbenchmarks.csproj", "{EB14F068-AD55-4970-B9B4-1FBE33704243}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IIS.LongTests", "src\Servers\IIS\IIS\test\IIS.LongTests\IIS.LongTests.csproj", "{B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildAfterTargetingPack", "BuildAfterTargetingPack", "{489020F2-80D9-4468-A5D3-07E785837A5D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BuildAfterTargetingPack", "src\BuildAfterTargetingPack\BuildAfterTargetingPack.csproj", "{8FED7E65-A7DD-4F13-8980-BF03E77B6C85}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching.Tests", "src\Middleware\OutputCaching\test\Microsoft.AspNetCore.OutputCaching.Tests.csproj", "{046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ResultsOfTGenerator", "src\Http\Http.Results\tools\ResultsOfTGenerator\ResultsOfTGenerator.csproj", "{9716D0D0-2251-44DD-8596-67D253EEF41C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OpenApi", "OpenApi", "{2299CCD8-8F9C-4F2B-A633-9BF4DA81022B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OpenApi", "src\OpenApi\src\Microsoft.AspNetCore.OpenApi.csproj", "{EFC8EA45-572D-4D8D-A597-9045A2D8EC40}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RateLimiting", "src\Middleware\RateLimiting\src\Microsoft.AspNetCore.RateLimiting.csproj", "{8EE73488-2B92-42BD-96C9-0DD65405C828}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RateLimiting.Tests", "src\Middleware\RateLimiting\test\Microsoft.AspNetCore.RateLimiting.Tests.csproj", "{41FF4F96-98D2-4482-A2A7-4B179E80D285}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelixTestRunner", "eng\tools\HelixTestRunner\HelixTestRunner.csproj", "{51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Html.Abstractions.Tests", "src\Html.Abstractions\test\Microsoft.AspNetCore.Html.Abstractions.Tests.csproj", "{487EF7BE-5009-4C70-B79E-45519BDD9603}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RateLimiting", "RateLimiting", "{1D865E78-7A66-4CA9-92EE-2B350E45281F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.RequestDecompression.Microbenchmarks", "src\Middleware\RequestDecompression\perf\Microbenchmarks\Microsoft.AspNetCore.RequestDecompression.Microbenchmarks.csproj", "{3309FA1E-4E95-49E9-BE2A-827D01FD63C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-jwts", "src\Tools\dotnet-user-jwts\src\dotnet-user-jwts.csproj", "{B34CB502-0286-4939-B25F-45998528A802}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dotnet-user-jwts", "dotnet-user-jwts", "{AB4B9E75-719C-4589-B852-20FBFD727730}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinimalJwtBearerSample", "src\Security\Authentication\JwtBearer\samples\MinimalJwtBearerSample\MinimalJwtBearerSample.csproj", "{7F079E92-32D5-4257-B95B-CFFB0D49C160}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dotnet-user-jwts.Tests", "src\Tools\dotnet-user-jwts\test\dotnet-user-jwts.Tests.csproj", "{89896261-C5DD-4901-BCA7-7A5F718BC008}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestInfrastructure", "TestInfrastructure", "{F0FBA346-D8BC-4FAE-A4B2-85B33FA23055}" - ProjectSection(SolutionItems) = preProject - src\ProjectTemplates\TestInfrastructure\Directory.Build.props.in = src\ProjectTemplates\TestInfrastructure\Directory.Build.props.in - src\ProjectTemplates\TestInfrastructure\Directory.Build.targets.in = src\ProjectTemplates\TestInfrastructure\Directory.Build.targets.in - src\ProjectTemplates\TestInfrastructure\PrepareForTest.targets = src\ProjectTemplates\TestInfrastructure\PrepareForTest.targets - src\ProjectTemplates\TestInfrastructure\runtimeconfig.norollforward.json = src\ProjectTemplates\TestInfrastructure\runtimeconfig.norollforward.json - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Mvc.Tests", "src\ProjectTemplates\test\Templates.Mvc.Tests\Templates.Mvc.Tests.csproj", "{AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "stress", "stress", "{A5946454-4788-4871-8F23-A9471D55F115}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.CustomElements", "src\Components\CustomElements\src\Microsoft.AspNetCore.Components.CustomElements.csproj", "{76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CustomElements", "CustomElements", "{0BB58FB6-8B66-4C6D-BA8A-DF3AFAF9AB8F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Blazor.WebAssembly.Tests", "src\ProjectTemplates\test\Templates.Blazor.WebAssembly.Tests\Templates.Blazor.WebAssembly.Tests.csproj", "{7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RateLimitingSample", "src\Middleware\RateLimiting\samples\RateLimitingSample\RateLimitingSample.csproj", "{91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebTransportSampleApp", "src\Servers\Kestrel\samples\WebTransportSampleApp\WebTransportSampleApp.csproj", "{F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinimalOpenIdConnectSample", "src\Security\Authentication\OpenIdConnect\samples\MinimalOpenIdConnectSample\MinimalOpenIdConnectSample.csproj", "{07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebTransportInteractiveSampleApp", "src\Servers\Kestrel\samples\WebTransportInteractiveSampleApp\WebTransportInteractiveSampleApp.csproj", "{BA649043-EF2B-42DC-B422-A46127BE8296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Blazor.WebAssembly.Auth.Tests", "src\ProjectTemplates\test\Templates.Blazor.WebAssembly.Auth.Tests\Templates.Blazor.WebAssembly.Auth.Tests.csproj", "{3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{890B5210-48EF-488F-93A2-F13BCB07C780}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebAppSample", "src\Framework\AspNetCoreAnalyzers\samples\WebAppSample\WebAppSample.csproj", "{A8E2AB77-8F57-47C2-A961-2F316793CAFF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F43CC5EA-6032-4A11-A9B2-6D48CB5EB082}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{74377D3E-E0C6-41A4-89ED-11A9C00142A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys.Microbenchmarks", "src\Servers\HttpSys\perf\Microbenchmarks\Microsoft.AspNetCore.Server.HttpSys.Microbenchmarks.csproj", "{3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transport.NamedPipes", "Transport.NamedPipes", "{F057512B-55BF-4A8B-A027-A0505F8BA10C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes", "src\Servers\Kestrel\Transport.NamedPipes\src\Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.csproj", "{10173568-A65E-44E5-8C6F-4AA49D0577A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.Tests", "src\Servers\Kestrel\Transport.NamedPipes\test\Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.Tests.csproj", "{97C7D2A4-87E5-4A4A-A170-D736427D5C21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.RequestDelegateGenerator", "src\Http\Http.Extensions\gen\Microsoft.AspNetCore.Http.RequestDelegateGenerator.csproj", "{4730F56D-24EF-4BB2-AA75-862E31205F3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "QuickGrid", "QuickGrid", "{C406D9E0-1585-43F9-AA8F-D468AF84A996}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.QuickGrid", "src\Components\QuickGrid\Microsoft.AspNetCore.Components.QuickGrid\src\Microsoft.AspNetCore.Components.QuickGrid.csproj", "{7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter", "src\Components\QuickGrid\Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter\src\Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter.csproj", "{F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazingPizza.Server", "src\Components\benchmarkapps\BlazingPizza.Server\BlazingPizza.Server.csproj", "{A05652B3-953E-4915-9D7F-0E361D988815}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Endpoints", "Endpoints", "{7BAEB9BF-28F4-4DFD-9A04-E5193683C261}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Endpoints", "src\Components\Endpoints\src\Microsoft.AspNetCore.Components.Endpoints.csproj", "{AE4D272D-6F13-42C8-9404-C149188AFA33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Endpoints.Tests", "src\Components\Endpoints\test\Microsoft.AspNetCore.Components.Endpoints.Tests.csproj", "{5D438258-CB19-4282-814F-974ABBC71411}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorUnitedApp", "src\Components\Samples\BlazorUnitedApp\BlazorUnitedApp.csproj", "{F5AE525F-F435-40F9-A567-4D5EC3B50D6E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BearerToken", "BearerToken", "{56291265-B7BF-4756-92AB-FC30F09381D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.BearerToken", "src\Security\Authentication\BearerToken\src\Microsoft.AspNetCore.Authentication.BearerToken.csproj", "{66FA1041-5556-43A0-9CA3-F9937F085F6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentitySample.ApiEndpoints", "src\Identity\samples\IdentitySample.ApiEndpoints\IdentitySample.ApiEndpoints.csproj", "{37FC77EA-AC44-4D08-B002-8EFF415C424A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.WasmMinimal", "src\Components\test\testassets\Components.WasmMinimal\Components.WasmMinimal.csproj", "{87D58D50-20D1-4091-88C5-8D88DCCC2DE3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MinimalFormSample", "src\Antiforgery\samples\MinimalFormSample\MinimalFormSample.csproj", "{F7BCD3AD-31E2-4223-B215-851C3D0AB78A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvcFormSample", "src\Mvc\samples\MvcFormSample\MvcFormSample.csproj", "{055F86AA-FB37-40CC-B39E-C29CE7547BB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching.Microbenchmarks", "src\Middleware\OutputCaching\perf\Microbenchmarks\Microsoft.AspNetCore.OutputCaching.Microbenchmarks.csproj", "{137AD17B-066F-4ED4-80FA-8D21C7B76CA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebViewE2E.Test", "src\Components\WebView\test\E2ETest\Microsoft.AspNetCore.Components.WebViewE2E.Test.csproj", "{CAEB7F57-28A8-451C-95D0-45FCAA3C726C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis.Tests", "src\Middleware\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis\test\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis.Tests.csproj", "{A939893A-B3CD-48F6-80D3-340C8A6E275B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OutputCaching.StackExchangeRedis", "src\Middleware\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis\src\Microsoft.AspNetCore.OutputCaching.StackExchangeRedis.csproj", "{F232B503-D412-45EE-8B31-EFD46B9FA302}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.InternalTesting", "src\Testing\src\Microsoft.AspNetCore.InternalTesting.csproj", "{B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.InternalTesting.Tests", "src\Testing\test\Microsoft.AspNetCore.InternalTesting.Tests.csproj", "{15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotReferencedInWasmCodePackage", "src\Components\test\testassets\NotReferencedInWasmCodePackage\NotReferencedInWasmCodePackage.csproj", "{433F91E4-E39D-4EB0-B798-2998B3969A2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components.WasmRemoteAuthentication", "src\Components\test\testassets\Components.WasmRemoteAuthentication\Components.WasmRemoteAuthentication.csproj", "{8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample", "src\OpenApi\sample\Sample.csproj", "{6DEC24A8-A166-432F-8E3B-58FFCDA92F52}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicroBenchmarks", "MicroBenchmarks", "{6469F11E-8CEE-4292-820B-324DFFC88EBC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Caching.MicroBenchmarks", "src\Caching\perf\MicroBenchmarks\Microsoft.Extensions.Caching.MicroBenchmarks\Microsoft.Extensions.Caching.MicroBenchmarks.csproj", "{8D2CC6ED-5105-4F52-8757-C21F4DE78589}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{9DC6B242-457B-4767-A84B-C3D23B76C642}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.OpenApi.Microbenchmarks", "src\OpenApi\perf\Microbenchmarks\Microsoft.AspNetCore.OpenApi.Microbenchmarks.csproj", "{D53F0EF7-0CDC-49B4-AA2D-229901B0A734}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KeyManagementSimulator", "src\DataProtection\samples\KeyManagementSimulator\KeyManagementSimulator.csproj", "{5B5F86CC-3598-463C-9F9B-F78FBB6642F4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StaticAssets", "StaticAssets", "{274100A5-5B2D-4EA2-AC42-A62257FC6BDC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticAssets", "src\StaticAssets\src\Microsoft.AspNetCore.StaticAssets.csproj", "{4D8DE54A-4F32-4881-B07B-DDC79619E573}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticAssets.Tests", "src\StaticAssets\test\Microsoft.AspNetCore.StaticAssets.Tests.csproj", "{9536C284-65B4-4884-BB50-06D629095C3E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetDocumentInsider.Tests", "src\Tools\GetDocumentInsider\tests\GetDocumentInsider.Tests.csproj", "{6A19D94D-2BC6-4198-BE2E-342688FDBA4B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetDocumentSample", "src\Tools\GetDocumentInsider\sample\GetDocumentSample.csproj", "{D8F7091E-A2D1-4E81-BA7C-97EAE392D683}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorUnitedApp.Client", "src\Components\Samples\BlazorUnitedApp.Client\BlazorUnitedApp.Client.csproj", "{757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B32FF7A7-9CB3-4DCD-AE97-3B2594DB9DAC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.AspNetCore.OpenApi.Tests", "src\OpenApi\test\Microsoft.AspNetCore.OpenApi.Tests\Microsoft.AspNetCore.OpenApi.Tests.csproj", "{B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|arm64 = Debug|arm64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|arm64 = Release|arm64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|arm64.ActiveCfg = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|arm64.Build.0 = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|x64.ActiveCfg = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|x64.Build.0 = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|x86.ActiveCfg = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Debug|x86.Build.0 = Debug|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|Any CPU.Build.0 = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|arm64.ActiveCfg = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|arm64.Build.0 = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|x64.ActiveCfg = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|x64.Build.0 = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|x86.ActiveCfg = Release|Any CPU - {03C2290A-1C48-489A-81DB-F3447B0DA595}.Release|x86.Build.0 = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|arm64.Build.0 = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|x64.ActiveCfg = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|x64.Build.0 = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|x86.ActiveCfg = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Debug|x86.Build.0 = Debug|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|Any CPU.Build.0 = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|arm64.ActiveCfg = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|arm64.Build.0 = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|x64.ActiveCfg = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|x64.Build.0 = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|x86.ActiveCfg = Release|Any CPU - {2B94628A-CFFB-447E-8026-A126C33B0917}.Release|x86.Build.0 = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|arm64.Build.0 = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|x64.ActiveCfg = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|x64.Build.0 = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|x86.ActiveCfg = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Debug|x86.Build.0 = Debug|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|Any CPU.Build.0 = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|arm64.ActiveCfg = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|arm64.Build.0 = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|x64.ActiveCfg = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|x64.Build.0 = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|x86.ActiveCfg = Release|Any CPU - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50}.Release|x86.Build.0 = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|arm64.Build.0 = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|x64.ActiveCfg = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|x64.Build.0 = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|x86.ActiveCfg = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Debug|x86.Build.0 = Debug|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|Any CPU.Build.0 = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|arm64.ActiveCfg = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|arm64.Build.0 = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|x64.ActiveCfg = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|x64.Build.0 = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|x86.ActiveCfg = Release|Any CPU - {BE70E100-E6C4-4686-8592-73E2A04E877F}.Release|x86.Build.0 = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|arm64.Build.0 = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|x64.ActiveCfg = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|x64.Build.0 = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|x86.ActiveCfg = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Debug|x86.Build.0 = Debug|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|Any CPU.Build.0 = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|arm64.ActiveCfg = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|arm64.Build.0 = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|x64.ActiveCfg = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|x64.Build.0 = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|x86.ActiveCfg = Release|Any CPU - {7546E2DD-2CF4-4240-8045-2533DF539458}.Release|x86.Build.0 = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|Any CPU.Build.0 = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|arm64.ActiveCfg = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|arm64.Build.0 = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|x64.ActiveCfg = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|x64.Build.0 = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|x86.ActiveCfg = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Debug|x86.Build.0 = Debug|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|Any CPU.ActiveCfg = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|Any CPU.Build.0 = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|arm64.ActiveCfg = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|arm64.Build.0 = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|x64.ActiveCfg = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|x64.Build.0 = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|x86.ActiveCfg = Release|Any CPU - {210B7FF8-ADD2-4E11-831A-41B28F423E44}.Release|x86.Build.0 = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|arm64.ActiveCfg = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|arm64.Build.0 = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|x64.ActiveCfg = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|x64.Build.0 = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|x86.ActiveCfg = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Debug|x86.Build.0 = Debug|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|Any CPU.Build.0 = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|arm64.ActiveCfg = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|arm64.Build.0 = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|x64.ActiveCfg = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|x64.Build.0 = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|x86.ActiveCfg = Release|Any CPU - {18E65289-27FC-4EC6-BFE8-9FA852381319}.Release|x86.Build.0 = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|arm64.Build.0 = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|x64.ActiveCfg = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|x64.Build.0 = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|x86.ActiveCfg = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Debug|x86.Build.0 = Debug|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|Any CPU.Build.0 = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|arm64.ActiveCfg = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|arm64.Build.0 = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|x64.ActiveCfg = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|x64.Build.0 = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|x86.ActiveCfg = Release|Any CPU - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2}.Release|x86.Build.0 = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|arm64.Build.0 = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|x64.ActiveCfg = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|x64.Build.0 = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|x86.ActiveCfg = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Debug|x86.Build.0 = Debug|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|Any CPU.Build.0 = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|arm64.ActiveCfg = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|arm64.Build.0 = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|x64.ActiveCfg = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|x64.Build.0 = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|x86.ActiveCfg = Release|Any CPU - {C2751270-6970-4CC8-8D8C-81A4B8D26446}.Release|x86.Build.0 = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|arm64.Build.0 = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|x64.ActiveCfg = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|x64.Build.0 = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|x86.ActiveCfg = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Debug|x86.Build.0 = Debug|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|Any CPU.Build.0 = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|arm64.ActiveCfg = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|arm64.Build.0 = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|x64.ActiveCfg = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|x64.Build.0 = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|x86.ActiveCfg = Release|Any CPU - {E2083951-98E7-4C1C-AB3A-935EA6311018}.Release|x86.Build.0 = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|arm64.Build.0 = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|x64.ActiveCfg = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|x64.Build.0 = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|x86.ActiveCfg = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Debug|x86.Build.0 = Debug|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|Any CPU.Build.0 = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|arm64.ActiveCfg = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|arm64.Build.0 = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|x64.ActiveCfg = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|x64.Build.0 = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|x86.ActiveCfg = Release|Any CPU - {A345753F-B4FA-43E4-8275-151FA5B70728}.Release|x86.Build.0 = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|arm64.Build.0 = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|x64.ActiveCfg = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|x64.Build.0 = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|x86.ActiveCfg = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Debug|x86.Build.0 = Debug|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|Any CPU.Build.0 = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|arm64.ActiveCfg = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|arm64.Build.0 = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|x64.ActiveCfg = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|x64.Build.0 = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|x86.ActiveCfg = Release|Any CPU - {34A797ED-AC07-476D-BEB1-E86DBBF2395A}.Release|x86.Build.0 = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|arm64.Build.0 = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|x64.ActiveCfg = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|x64.Build.0 = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|x86.ActiveCfg = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Debug|x86.Build.0 = Debug|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|Any CPU.Build.0 = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|arm64.ActiveCfg = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|arm64.Build.0 = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|x64.ActiveCfg = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|x64.Build.0 = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|x86.ActiveCfg = Release|Any CPU - {D5D2C620-42B7-4ECF-A892-295BB124A833}.Release|x86.Build.0 = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|arm64.Build.0 = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|x64.ActiveCfg = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|x64.Build.0 = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|x86.ActiveCfg = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Debug|x86.Build.0 = Debug|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|Any CPU.Build.0 = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|arm64.ActiveCfg = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|arm64.Build.0 = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|x64.ActiveCfg = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|x64.Build.0 = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|x86.ActiveCfg = Release|Any CPU - {8CDA0BDC-05C2-451F-9990-2BEF471684BF}.Release|x86.Build.0 = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|Any CPU.Build.0 = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|arm64.ActiveCfg = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|arm64.Build.0 = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|x64.ActiveCfg = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|x64.Build.0 = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|x86.ActiveCfg = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Debug|x86.Build.0 = Debug|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|Any CPU.ActiveCfg = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|Any CPU.Build.0 = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|arm64.ActiveCfg = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|arm64.Build.0 = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|x64.ActiveCfg = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|x64.Build.0 = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|x86.ActiveCfg = Release|Any CPU - {392701C6-0BDB-4505-ADB8-1475770A2421}.Release|x86.Build.0 = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|arm64.Build.0 = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|x64.ActiveCfg = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|x64.Build.0 = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|x86.ActiveCfg = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Debug|x86.Build.0 = Debug|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|Any CPU.Build.0 = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|arm64.ActiveCfg = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|arm64.Build.0 = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|x64.ActiveCfg = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|x64.Build.0 = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|x86.ActiveCfg = Release|Any CPU - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1}.Release|x86.Build.0 = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|arm64.Build.0 = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|x64.Build.0 = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Debug|x86.Build.0 = Debug|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|Any CPU.Build.0 = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|arm64.ActiveCfg = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|arm64.Build.0 = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|x64.ActiveCfg = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|x64.Build.0 = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|x86.ActiveCfg = Release|Any CPU - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A}.Release|x86.Build.0 = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|arm64.Build.0 = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|x64.ActiveCfg = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|x64.Build.0 = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|x86.ActiveCfg = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Debug|x86.Build.0 = Debug|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|Any CPU.Build.0 = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|arm64.ActiveCfg = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|arm64.Build.0 = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|x64.ActiveCfg = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|x64.Build.0 = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|x86.ActiveCfg = Release|Any CPU - {1D6348B5-0616-41A6-90ED-09D34C452926}.Release|x86.Build.0 = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|arm64.Build.0 = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|x64.ActiveCfg = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|x64.Build.0 = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|x86.ActiveCfg = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Debug|x86.Build.0 = Debug|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|Any CPU.Build.0 = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|arm64.ActiveCfg = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|arm64.Build.0 = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|x64.ActiveCfg = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|x64.Build.0 = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|x86.ActiveCfg = Release|Any CPU - {456056B5-3888-47AB-AFD7-4F16A8A1454F}.Release|x86.Build.0 = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|arm64.Build.0 = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|x64.ActiveCfg = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|x64.Build.0 = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|x86.ActiveCfg = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Debug|x86.Build.0 = Debug|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|Any CPU.Build.0 = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|arm64.ActiveCfg = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|arm64.Build.0 = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|x64.ActiveCfg = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|x64.Build.0 = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|x86.ActiveCfg = Release|Any CPU - {4DE12851-6ABC-4675-84B8-0E0EFA142F79}.Release|x86.Build.0 = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|arm64.Build.0 = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|x64.ActiveCfg = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|x64.Build.0 = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|x86.ActiveCfg = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Debug|x86.Build.0 = Debug|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|Any CPU.Build.0 = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|arm64.ActiveCfg = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|arm64.Build.0 = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|x64.ActiveCfg = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|x64.Build.0 = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|x86.ActiveCfg = Release|Any CPU - {A400C938-46E2-4B84-B06E-487B13D22E1B}.Release|x86.Build.0 = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|arm64.ActiveCfg = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|arm64.Build.0 = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|x64.ActiveCfg = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|x64.Build.0 = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|x86.ActiveCfg = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Debug|x86.Build.0 = Debug|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|Any CPU.Build.0 = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|arm64.ActiveCfg = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|arm64.Build.0 = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|x64.ActiveCfg = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|x64.Build.0 = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|x86.ActiveCfg = Release|Any CPU - {563714CA-0022-4A95-BDBB-0953541193CA}.Release|x86.Build.0 = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|arm64.Build.0 = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|x64.ActiveCfg = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|x64.Build.0 = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|x86.ActiveCfg = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Debug|x86.Build.0 = Debug|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|Any CPU.Build.0 = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|arm64.ActiveCfg = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|arm64.Build.0 = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|x64.ActiveCfg = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|x64.Build.0 = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|x86.ActiveCfg = Release|Any CPU - {E55659A7-5489-4E86-B11C-2E41697555F7}.Release|x86.Build.0 = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|Any CPU.Build.0 = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|arm64.ActiveCfg = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|arm64.Build.0 = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|x64.ActiveCfg = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|x64.Build.0 = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|x86.ActiveCfg = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Debug|x86.Build.0 = Debug|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|Any CPU.ActiveCfg = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|Any CPU.Build.0 = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|arm64.ActiveCfg = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|arm64.Build.0 = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|x64.ActiveCfg = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|x64.Build.0 = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|x86.ActiveCfg = Release|Any CPU - {627F94BE-AD74-4188-9F61-12E5096DA826}.Release|x86.Build.0 = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|arm64.Build.0 = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|x64.ActiveCfg = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|x64.Build.0 = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|x86.ActiveCfg = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Debug|x86.Build.0 = Debug|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|Any CPU.Build.0 = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|arm64.ActiveCfg = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|arm64.Build.0 = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|x64.ActiveCfg = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|x64.Build.0 = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|x86.ActiveCfg = Release|Any CPU - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5}.Release|x86.Build.0 = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|Any CPU.Build.0 = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|arm64.ActiveCfg = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|arm64.Build.0 = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|x64.ActiveCfg = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|x64.Build.0 = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|x86.ActiveCfg = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Debug|x86.Build.0 = Debug|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|Any CPU.ActiveCfg = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|Any CPU.Build.0 = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|arm64.ActiveCfg = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|arm64.Build.0 = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|x64.ActiveCfg = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|x64.Build.0 = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|x86.ActiveCfg = Release|Any CPU - {606C2615-3E08-4A08-993F-FBD90F4CD021}.Release|x86.Build.0 = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|arm64.Build.0 = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|x64.ActiveCfg = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|x64.Build.0 = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|x86.ActiveCfg = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Debug|x86.Build.0 = Debug|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|Any CPU.Build.0 = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|arm64.ActiveCfg = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|arm64.Build.0 = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|x64.ActiveCfg = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|x64.Build.0 = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|x86.ActiveCfg = Release|Any CPU - {62043A86-BC6F-432E-9AFD-F3B616192D8D}.Release|x86.Build.0 = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|arm64.Build.0 = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|x64.ActiveCfg = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|x64.Build.0 = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|x86.ActiveCfg = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Debug|x86.Build.0 = Debug|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|Any CPU.Build.0 = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|arm64.ActiveCfg = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|arm64.Build.0 = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|x64.ActiveCfg = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|x64.Build.0 = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|x86.ActiveCfg = Release|Any CPU - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D}.Release|x86.Build.0 = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|arm64.Build.0 = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|x64.Build.0 = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Debug|x86.Build.0 = Debug|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|Any CPU.Build.0 = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|arm64.ActiveCfg = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|arm64.Build.0 = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|x64.ActiveCfg = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|x64.Build.0 = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|x86.ActiveCfg = Release|Any CPU - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1}.Release|x86.Build.0 = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|arm64.Build.0 = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|x64.ActiveCfg = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|x64.Build.0 = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|x86.ActiveCfg = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Debug|x86.Build.0 = Debug|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|Any CPU.Build.0 = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|arm64.ActiveCfg = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|arm64.Build.0 = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|x64.ActiveCfg = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|x64.Build.0 = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|x86.ActiveCfg = Release|Any CPU - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A}.Release|x86.Build.0 = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|arm64.Build.0 = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|x64.ActiveCfg = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|x64.Build.0 = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|x86.ActiveCfg = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Debug|x86.Build.0 = Debug|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|Any CPU.Build.0 = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|arm64.ActiveCfg = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|arm64.Build.0 = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|x64.ActiveCfg = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|x64.Build.0 = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|x86.ActiveCfg = Release|Any CPU - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A}.Release|x86.Build.0 = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|arm64.Build.0 = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|x64.ActiveCfg = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|x64.Build.0 = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|x86.ActiveCfg = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Debug|x86.Build.0 = Debug|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|Any CPU.Build.0 = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|arm64.ActiveCfg = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|arm64.Build.0 = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|x64.ActiveCfg = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|x64.Build.0 = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|x86.ActiveCfg = Release|Any CPU - {E071FB7E-E650-44B0-9529-D5D1685AEA62}.Release|x86.Build.0 = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|arm64.Build.0 = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|x64.Build.0 = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Debug|x86.Build.0 = Debug|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|Any CPU.Build.0 = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|arm64.ActiveCfg = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|arm64.Build.0 = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|x64.ActiveCfg = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|x64.Build.0 = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|x86.ActiveCfg = Release|Any CPU - {6A31248F-5F64-4A73-856C-8DC6492E6AC7}.Release|x86.Build.0 = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|Any CPU.Build.0 = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|arm64.ActiveCfg = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|arm64.Build.0 = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|x64.ActiveCfg = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|x64.Build.0 = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|x86.ActiveCfg = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Debug|x86.Build.0 = Debug|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|Any CPU.ActiveCfg = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|Any CPU.Build.0 = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|arm64.ActiveCfg = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|arm64.Build.0 = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|x64.ActiveCfg = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|x64.Build.0 = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|x86.ActiveCfg = Release|Any CPU - {928C9877-6BF3-447D-9E33-ACF833151D77}.Release|x86.Build.0 = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|arm64.ActiveCfg = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|arm64.Build.0 = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|x64.ActiveCfg = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|x64.Build.0 = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|x86.ActiveCfg = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Debug|x86.Build.0 = Debug|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|Any CPU.Build.0 = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|arm64.ActiveCfg = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|arm64.Build.0 = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|x64.ActiveCfg = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|x64.Build.0 = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|x86.ActiveCfg = Release|Any CPU - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028}.Release|x86.Build.0 = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|Any CPU.Build.0 = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|arm64.ActiveCfg = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|arm64.Build.0 = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|x64.ActiveCfg = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|x64.Build.0 = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|x86.ActiveCfg = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Debug|x86.Build.0 = Debug|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|Any CPU.ActiveCfg = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|Any CPU.Build.0 = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|arm64.ActiveCfg = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|arm64.Build.0 = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|x64.ActiveCfg = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|x64.Build.0 = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|x86.ActiveCfg = Release|Any CPU - {451C6023-83D5-4809-9F71-6A23ED725A03}.Release|x86.Build.0 = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|arm64.Build.0 = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|x64.ActiveCfg = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|x64.Build.0 = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|x86.ActiveCfg = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Debug|x86.Build.0 = Debug|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|Any CPU.Build.0 = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|arm64.ActiveCfg = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|arm64.Build.0 = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|x64.ActiveCfg = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|x64.Build.0 = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|x86.ActiveCfg = Release|Any CPU - {A47371F8-F47E-4AF3-9F2E-068F28CE6587}.Release|x86.Build.0 = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|arm64.Build.0 = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|x64.ActiveCfg = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|x64.Build.0 = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|x86.ActiveCfg = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Debug|x86.Build.0 = Debug|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|Any CPU.Build.0 = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|arm64.ActiveCfg = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|arm64.Build.0 = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|x64.ActiveCfg = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|x64.Build.0 = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|x86.ActiveCfg = Release|Any CPU - {4C056678-59A0-4D37-BE70-B98D764C7EA4}.Release|x86.Build.0 = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|arm64.Build.0 = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|x64.ActiveCfg = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|x64.Build.0 = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|x86.ActiveCfg = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Debug|x86.Build.0 = Debug|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|Any CPU.Build.0 = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|arm64.ActiveCfg = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|arm64.Build.0 = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|x64.ActiveCfg = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|x64.Build.0 = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|x86.ActiveCfg = Release|Any CPU - {81A35CF9-214F-4351-9561-334F32B41C3A}.Release|x86.Build.0 = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|arm64.ActiveCfg = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|arm64.Build.0 = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|x64.ActiveCfg = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|x64.Build.0 = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|x86.ActiveCfg = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Debug|x86.Build.0 = Debug|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|Any CPU.Build.0 = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|arm64.ActiveCfg = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|arm64.Build.0 = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|x64.ActiveCfg = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|x64.Build.0 = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|x86.ActiveCfg = Release|Any CPU - {50D97D17-79CF-4917-AD70-F79146FE8808}.Release|x86.Build.0 = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|arm64.Build.0 = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|x64.Build.0 = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Debug|x86.Build.0 = Debug|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|Any CPU.Build.0 = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|arm64.ActiveCfg = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|arm64.Build.0 = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|x64.ActiveCfg = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|x64.Build.0 = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|x86.ActiveCfg = Release|Any CPU - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5}.Release|x86.Build.0 = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|arm64.Build.0 = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|x64.ActiveCfg = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|x64.Build.0 = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|x86.ActiveCfg = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Debug|x86.Build.0 = Debug|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|Any CPU.Build.0 = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|arm64.ActiveCfg = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|arm64.Build.0 = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|x64.ActiveCfg = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|x64.Build.0 = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|x86.ActiveCfg = Release|Any CPU - {A9027A02-135B-4149-947A-79F5B73A7F28}.Release|x86.Build.0 = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|Any CPU.Build.0 = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|arm64.ActiveCfg = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|arm64.Build.0 = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|x64.ActiveCfg = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|x64.Build.0 = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|x86.ActiveCfg = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Debug|x86.Build.0 = Debug|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|Any CPU.ActiveCfg = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|Any CPU.Build.0 = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|arm64.ActiveCfg = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|arm64.Build.0 = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|x64.ActiveCfg = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|x64.Build.0 = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|x86.ActiveCfg = Release|Any CPU - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227}.Release|x86.Build.0 = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|arm64.Build.0 = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|x64.ActiveCfg = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|x64.Build.0 = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|x86.ActiveCfg = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Debug|x86.Build.0 = Debug|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|Any CPU.Build.0 = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|arm64.ActiveCfg = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|arm64.Build.0 = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|x64.ActiveCfg = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|x64.Build.0 = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|x86.ActiveCfg = Release|Any CPU - {DEED8B59-B811-471F-936A-D8D71AA97CE1}.Release|x86.Build.0 = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|arm64.Build.0 = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|x64.Build.0 = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Debug|x86.Build.0 = Debug|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|Any CPU.Build.0 = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|arm64.ActiveCfg = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|arm64.Build.0 = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|x64.ActiveCfg = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|x64.Build.0 = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|x86.ActiveCfg = Release|Any CPU - {B2660D8F-8990-46C7-9B41-F3F94C6402F6}.Release|x86.Build.0 = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|arm64.ActiveCfg = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|arm64.Build.0 = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|x64.ActiveCfg = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|x64.Build.0 = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|x86.ActiveCfg = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Debug|x86.Build.0 = Debug|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|Any CPU.Build.0 = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|arm64.ActiveCfg = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|arm64.Build.0 = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|x64.ActiveCfg = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|x64.Build.0 = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|x86.ActiveCfg = Release|Any CPU - {31E763AD-996E-44EF-A70E-1B8187922C98}.Release|x86.Build.0 = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|arm64.Build.0 = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|x64.ActiveCfg = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|x64.Build.0 = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|x86.ActiveCfg = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Debug|x86.Build.0 = Debug|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|Any CPU.Build.0 = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|arm64.ActiveCfg = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|arm64.Build.0 = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|x64.ActiveCfg = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|x64.Build.0 = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|x86.ActiveCfg = Release|Any CPU - {3974EB1C-077A-4A79-B295-87B62446C266}.Release|x86.Build.0 = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|arm64.Build.0 = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|x64.ActiveCfg = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|x64.Build.0 = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Debug|x86.Build.0 = Debug|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|Any CPU.Build.0 = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|arm64.ActiveCfg = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|arm64.Build.0 = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|x64.ActiveCfg = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|x64.Build.0 = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|x86.ActiveCfg = Release|Any CPU - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D}.Release|x86.Build.0 = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|arm64.Build.0 = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|x64.ActiveCfg = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|x64.Build.0 = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Debug|x86.Build.0 = Debug|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|Any CPU.Build.0 = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|arm64.ActiveCfg = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|arm64.Build.0 = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|x64.ActiveCfg = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|x64.Build.0 = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|x86.ActiveCfg = Release|Any CPU - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760}.Release|x86.Build.0 = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|arm64.ActiveCfg = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|arm64.Build.0 = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|x64.ActiveCfg = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|x64.Build.0 = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|x86.ActiveCfg = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Debug|x86.Build.0 = Debug|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|Any CPU.Build.0 = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|arm64.ActiveCfg = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|arm64.Build.0 = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|x64.ActiveCfg = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|x64.Build.0 = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|x86.ActiveCfg = Release|Any CPU - {06492CD6-4C51-41F3-9D1A-0A95F914F871}.Release|x86.Build.0 = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|arm64.Build.0 = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|x64.ActiveCfg = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|x64.Build.0 = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|x86.ActiveCfg = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Debug|x86.Build.0 = Debug|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|Any CPU.Build.0 = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|arm64.ActiveCfg = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|arm64.Build.0 = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|x64.ActiveCfg = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|x64.Build.0 = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|x86.ActiveCfg = Release|Any CPU - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C}.Release|x86.Build.0 = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|arm64.Build.0 = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|x64.Build.0 = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Debug|x86.Build.0 = Debug|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|Any CPU.Build.0 = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|arm64.ActiveCfg = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|arm64.Build.0 = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|x64.ActiveCfg = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|x64.Build.0 = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|x86.ActiveCfg = Release|Any CPU - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1}.Release|x86.Build.0 = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|arm64.Build.0 = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|x64.ActiveCfg = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|x64.Build.0 = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|x86.ActiveCfg = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Debug|x86.Build.0 = Debug|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|Any CPU.Build.0 = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|arm64.ActiveCfg = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|arm64.Build.0 = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|x64.ActiveCfg = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|x64.Build.0 = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|x86.ActiveCfg = Release|Any CPU - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3}.Release|x86.Build.0 = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|arm64.ActiveCfg = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|arm64.Build.0 = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|x64.ActiveCfg = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|x64.Build.0 = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|x86.ActiveCfg = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Debug|x86.Build.0 = Debug|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|Any CPU.Build.0 = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|arm64.ActiveCfg = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|arm64.Build.0 = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|x64.ActiveCfg = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|x64.Build.0 = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|x86.ActiveCfg = Release|Any CPU - {78C5ACC3-6718-4682-B350-737EDA1E4F35}.Release|x86.Build.0 = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|arm64.Build.0 = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|x64.ActiveCfg = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|x64.Build.0 = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|x86.ActiveCfg = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Debug|x86.Build.0 = Debug|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|Any CPU.Build.0 = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|arm64.ActiveCfg = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|arm64.Build.0 = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|x64.ActiveCfg = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|x64.Build.0 = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|x86.ActiveCfg = Release|Any CPU - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F}.Release|x86.Build.0 = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|arm64.Build.0 = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|x64.ActiveCfg = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|x64.Build.0 = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|x86.ActiveCfg = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Debug|x86.Build.0 = Debug|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|Any CPU.Build.0 = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|arm64.ActiveCfg = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|arm64.Build.0 = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|x64.ActiveCfg = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|x64.Build.0 = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|x86.ActiveCfg = Release|Any CPU - {0674F69B-FAC8-43E5-8711-A476936F459F}.Release|x86.Build.0 = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|arm64.Build.0 = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|x64.ActiveCfg = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|x64.Build.0 = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|x86.ActiveCfg = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Debug|x86.Build.0 = Debug|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|Any CPU.Build.0 = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|arm64.ActiveCfg = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|arm64.Build.0 = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|x64.ActiveCfg = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|x64.Build.0 = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|x86.ActiveCfg = Release|Any CPU - {5DEF52C0-B440-4DAC-8A2D-920C7016C580}.Release|x86.Build.0 = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|Any CPU.Build.0 = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|arm64.ActiveCfg = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|arm64.Build.0 = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|x64.ActiveCfg = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|x64.Build.0 = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|x86.ActiveCfg = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Debug|x86.Build.0 = Debug|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|Any CPU.ActiveCfg = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|Any CPU.Build.0 = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|arm64.ActiveCfg = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|arm64.Build.0 = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|x64.ActiveCfg = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|x64.Build.0 = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|x86.ActiveCfg = Release|Any CPU - {737D2BC0-092E-404B-BB73-EACAEDBF0E65}.Release|x86.Build.0 = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|arm64.Build.0 = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|x64.ActiveCfg = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|x64.Build.0 = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|x86.ActiveCfg = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Debug|x86.Build.0 = Debug|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|Any CPU.Build.0 = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|arm64.ActiveCfg = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|arm64.Build.0 = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|x64.ActiveCfg = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|x64.Build.0 = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|x86.ActiveCfg = Release|Any CPU - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF}.Release|x86.Build.0 = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|Any CPU.Build.0 = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|arm64.ActiveCfg = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|arm64.Build.0 = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|x64.ActiveCfg = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|x64.Build.0 = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|x86.ActiveCfg = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Debug|x86.Build.0 = Debug|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|Any CPU.ActiveCfg = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|Any CPU.Build.0 = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|arm64.ActiveCfg = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|arm64.Build.0 = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|x64.ActiveCfg = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|x64.Build.0 = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|x86.ActiveCfg = Release|Any CPU - {183F99F9-0C0B-4790-8152-637B4AE68622}.Release|x86.Build.0 = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|arm64.Build.0 = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|x64.ActiveCfg = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|x64.Build.0 = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|x86.ActiveCfg = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Debug|x86.Build.0 = Debug|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|Any CPU.Build.0 = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|arm64.ActiveCfg = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|arm64.Build.0 = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|x64.ActiveCfg = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|x64.Build.0 = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|x86.ActiveCfg = Release|Any CPU - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B}.Release|x86.Build.0 = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|arm64.ActiveCfg = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|arm64.Build.0 = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|x64.ActiveCfg = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|x64.Build.0 = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|x86.ActiveCfg = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Debug|x86.Build.0 = Debug|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|Any CPU.Build.0 = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|arm64.ActiveCfg = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|arm64.Build.0 = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|x64.ActiveCfg = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|x64.Build.0 = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|x86.ActiveCfg = Release|Any CPU - {32FE10AE-CC85-407A-8720-624CDD3EB890}.Release|x86.Build.0 = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|arm64.ActiveCfg = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|arm64.Build.0 = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|x64.ActiveCfg = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|x64.Build.0 = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|x86.ActiveCfg = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Debug|x86.Build.0 = Debug|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|Any CPU.Build.0 = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|arm64.ActiveCfg = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|arm64.Build.0 = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|x64.ActiveCfg = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|x64.Build.0 = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|x86.ActiveCfg = Release|Any CPU - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24}.Release|x86.Build.0 = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|arm64.Build.0 = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|x64.ActiveCfg = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|x64.Build.0 = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|x86.ActiveCfg = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Debug|x86.Build.0 = Debug|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|Any CPU.Build.0 = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|arm64.ActiveCfg = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|arm64.Build.0 = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|x64.ActiveCfg = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|x64.Build.0 = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|x86.ActiveCfg = Release|Any CPU - {FE930950-64DC-45A3-8128-2D68F97EBB19}.Release|x86.Build.0 = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|arm64.ActiveCfg = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|arm64.Build.0 = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|x64.ActiveCfg = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|x64.Build.0 = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|x86.ActiveCfg = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Debug|x86.Build.0 = Debug|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|Any CPU.Build.0 = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|arm64.ActiveCfg = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|arm64.Build.0 = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|x64.ActiveCfg = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|x64.Build.0 = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|x86.ActiveCfg = Release|Any CPU - {81410464-9C9E-4DDE-824C-BCD0DA8E6523}.Release|x86.Build.0 = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|arm64.Build.0 = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|x64.ActiveCfg = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|x64.Build.0 = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|x86.ActiveCfg = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Debug|x86.Build.0 = Debug|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|Any CPU.Build.0 = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|arm64.ActiveCfg = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|arm64.Build.0 = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|x64.ActiveCfg = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|x64.Build.0 = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|x86.ActiveCfg = Release|Any CPU - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3}.Release|x86.Build.0 = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|arm64.Build.0 = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|x64.ActiveCfg = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|x64.Build.0 = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|x86.ActiveCfg = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Debug|x86.Build.0 = Debug|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|Any CPU.Build.0 = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|arm64.ActiveCfg = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|arm64.Build.0 = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|x64.ActiveCfg = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|x64.Build.0 = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|x86.ActiveCfg = Release|Any CPU - {7AA8771B-F1F3-409E-960A-EEF00B94135A}.Release|x86.Build.0 = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|arm64.Build.0 = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|x64.ActiveCfg = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|x64.Build.0 = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|x86.ActiveCfg = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Debug|x86.Build.0 = Debug|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|Any CPU.Build.0 = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|arm64.ActiveCfg = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|arm64.Build.0 = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|x64.ActiveCfg = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|x64.Build.0 = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|x86.ActiveCfg = Release|Any CPU - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D}.Release|x86.Build.0 = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|arm64.Build.0 = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|x64.ActiveCfg = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|x64.Build.0 = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Debug|x86.Build.0 = Debug|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|Any CPU.Build.0 = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|arm64.ActiveCfg = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|arm64.Build.0 = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|x64.ActiveCfg = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|x64.Build.0 = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|x86.ActiveCfg = Release|Any CPU - {AB39F04A-A96E-4BE1-99F2-54B804104BA1}.Release|x86.Build.0 = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|arm64.Build.0 = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|x64.ActiveCfg = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|x64.Build.0 = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|x86.ActiveCfg = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Debug|x86.Build.0 = Debug|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|Any CPU.Build.0 = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|arm64.ActiveCfg = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|arm64.Build.0 = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|x64.ActiveCfg = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|x64.Build.0 = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|x86.ActiveCfg = Release|Any CPU - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9}.Release|x86.Build.0 = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|arm64.Build.0 = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|x64.ActiveCfg = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|x64.Build.0 = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|x86.ActiveCfg = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Debug|x86.Build.0 = Debug|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|Any CPU.Build.0 = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|arm64.ActiveCfg = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|arm64.Build.0 = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|x64.ActiveCfg = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|x64.Build.0 = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|x86.ActiveCfg = Release|Any CPU - {D47B73A3-740E-4B9A-B123-A42299F1F266}.Release|x86.Build.0 = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|arm64.Build.0 = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|x64.ActiveCfg = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|x64.Build.0 = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|x86.ActiveCfg = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Debug|x86.Build.0 = Debug|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|Any CPU.Build.0 = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|arm64.ActiveCfg = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|arm64.Build.0 = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|x64.ActiveCfg = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|x64.Build.0 = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|x86.ActiveCfg = Release|Any CPU - {6906D7DE-CE06-4A6A-81BB-D783C605A184}.Release|x86.Build.0 = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|arm64.Build.0 = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|x64.ActiveCfg = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|x64.Build.0 = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|x86.ActiveCfg = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Debug|x86.Build.0 = Debug|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|Any CPU.Build.0 = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|arm64.ActiveCfg = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|arm64.Build.0 = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|x64.ActiveCfg = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|x64.Build.0 = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|x86.ActiveCfg = Release|Any CPU - {F90D4383-89FC-4215-B2AB-BBB242CC5E45}.Release|x86.Build.0 = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|arm64.Build.0 = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|x64.ActiveCfg = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|x64.Build.0 = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|x86.ActiveCfg = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Debug|x86.Build.0 = Debug|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|Any CPU.Build.0 = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|arm64.ActiveCfg = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|arm64.Build.0 = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|x64.ActiveCfg = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|x64.Build.0 = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|x86.ActiveCfg = Release|Any CPU - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D}.Release|x86.Build.0 = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|arm64.Build.0 = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|x64.ActiveCfg = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|x64.Build.0 = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|x86.ActiveCfg = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Debug|x86.Build.0 = Debug|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|Any CPU.Build.0 = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|arm64.ActiveCfg = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|arm64.Build.0 = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|x64.ActiveCfg = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|x64.Build.0 = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|x86.ActiveCfg = Release|Any CPU - {7B382EC7-57B6-4C0C-8B27-5F63B5184193}.Release|x86.Build.0 = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|arm64.Build.0 = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|x64.Build.0 = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Debug|x86.Build.0 = Debug|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|Any CPU.Build.0 = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|arm64.ActiveCfg = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|arm64.Build.0 = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|x64.ActiveCfg = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|x64.Build.0 = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|x86.ActiveCfg = Release|Any CPU - {DE6F167E-F41C-414D-923E-8E51E992A830}.Release|x86.Build.0 = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|Any CPU.Build.0 = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|arm64.ActiveCfg = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|arm64.Build.0 = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|x64.ActiveCfg = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|x64.Build.0 = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|x86.ActiveCfg = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Debug|x86.Build.0 = Debug|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|Any CPU.ActiveCfg = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|Any CPU.Build.0 = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|arm64.ActiveCfg = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|arm64.Build.0 = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|x64.ActiveCfg = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|x64.Build.0 = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|x86.ActiveCfg = Release|Any CPU - {839C479D-64DC-4A59-85E4-04E5A2CC9631}.Release|x86.Build.0 = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|arm64.Build.0 = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|x64.ActiveCfg = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|x64.Build.0 = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|x86.ActiveCfg = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Debug|x86.Build.0 = Debug|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|Any CPU.Build.0 = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|arm64.ActiveCfg = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|arm64.Build.0 = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|x64.ActiveCfg = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|x64.Build.0 = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|x86.ActiveCfg = Release|Any CPU - {ADB4912C-BCD5-400F-BD20-37410BA76EF8}.Release|x86.Build.0 = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|arm64.Build.0 = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|x64.Build.0 = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Debug|x86.Build.0 = Debug|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|Any CPU.Build.0 = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|arm64.ActiveCfg = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|arm64.Build.0 = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|x64.ActiveCfg = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|x64.Build.0 = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|x86.ActiveCfg = Release|Any CPU - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7}.Release|x86.Build.0 = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|arm64.Build.0 = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|x64.ActiveCfg = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|x64.Build.0 = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|x86.ActiveCfg = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Debug|x86.Build.0 = Debug|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|Any CPU.Build.0 = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|arm64.ActiveCfg = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|arm64.Build.0 = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|x64.ActiveCfg = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|x64.Build.0 = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|x86.ActiveCfg = Release|Any CPU - {4510DA15-69F3-411E-86F2-7AD04FFB9823}.Release|x86.Build.0 = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|arm64.Build.0 = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|x64.ActiveCfg = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|x64.Build.0 = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|x86.ActiveCfg = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Debug|x86.Build.0 = Debug|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|Any CPU.Build.0 = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|arm64.ActiveCfg = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|arm64.Build.0 = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|x64.ActiveCfg = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|x64.Build.0 = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|x86.ActiveCfg = Release|Any CPU - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB}.Release|x86.Build.0 = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|arm64.Build.0 = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|x64.ActiveCfg = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|x64.Build.0 = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|x86.ActiveCfg = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Debug|x86.Build.0 = Debug|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|Any CPU.Build.0 = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|arm64.ActiveCfg = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|arm64.Build.0 = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|x64.ActiveCfg = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|x64.Build.0 = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|x86.ActiveCfg = Release|Any CPU - {6CBF1AA9-1073-4A97-B867-FB534C6829C1}.Release|x86.Build.0 = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|arm64.Build.0 = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|x64.ActiveCfg = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|x64.Build.0 = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|x86.ActiveCfg = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Debug|x86.Build.0 = Debug|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|Any CPU.Build.0 = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|arm64.ActiveCfg = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|arm64.Build.0 = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|x64.ActiveCfg = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|x64.Build.0 = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|x86.ActiveCfg = Release|Any CPU - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667}.Release|x86.Build.0 = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|arm64.Build.0 = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|x64.ActiveCfg = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|x64.Build.0 = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|x86.ActiveCfg = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Debug|x86.Build.0 = Debug|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|Any CPU.Build.0 = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|arm64.ActiveCfg = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|arm64.Build.0 = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|x64.ActiveCfg = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|x64.Build.0 = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|x86.ActiveCfg = Release|Any CPU - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1}.Release|x86.Build.0 = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|arm64.Build.0 = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|x64.ActiveCfg = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|x64.Build.0 = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|x86.ActiveCfg = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Debug|x86.Build.0 = Debug|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|Any CPU.Build.0 = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|arm64.ActiveCfg = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|arm64.Build.0 = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|x64.ActiveCfg = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|x64.Build.0 = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|x86.ActiveCfg = Release|Any CPU - {FB86B2B2-60B2-477A-9D78-2530A0089660}.Release|x86.Build.0 = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|arm64.Build.0 = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|x64.ActiveCfg = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|x64.Build.0 = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|x86.ActiveCfg = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Debug|x86.Build.0 = Debug|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|Any CPU.Build.0 = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|arm64.ActiveCfg = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|arm64.Build.0 = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|x64.ActiveCfg = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|x64.Build.0 = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|x86.ActiveCfg = Release|Any CPU - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D}.Release|x86.Build.0 = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|arm64.Build.0 = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|x64.ActiveCfg = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|x64.Build.0 = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|x86.ActiveCfg = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Debug|x86.Build.0 = Debug|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|Any CPU.Build.0 = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|arm64.ActiveCfg = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|arm64.Build.0 = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x64.ActiveCfg = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x64.Build.0 = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x86.ActiveCfg = Release|Any CPU - {34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x86.Build.0 = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|arm64.Build.0 = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|x64.ActiveCfg = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|x64.Build.0 = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|x86.ActiveCfg = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|x86.Build.0 = Debug|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|Any CPU.Build.0 = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|arm64.ActiveCfg = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|arm64.Build.0 = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|x64.ActiveCfg = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|x64.Build.0 = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|x86.ActiveCfg = Release|Any CPU - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Release|x86.Build.0 = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|arm64.Build.0 = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|x64.ActiveCfg = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|x64.Build.0 = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|x86.ActiveCfg = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|x86.Build.0 = Debug|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|Any CPU.Build.0 = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|arm64.ActiveCfg = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|arm64.Build.0 = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|x64.ActiveCfg = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|x64.Build.0 = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|x86.ActiveCfg = Release|Any CPU - {02A85F31-A092-4322-A3D9-91E894D9ECD2}.Release|x86.Build.0 = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|arm64.Build.0 = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|x64.ActiveCfg = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|x64.Build.0 = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|x86.ActiveCfg = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Debug|x86.Build.0 = Debug|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|Any CPU.Build.0 = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|arm64.ActiveCfg = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|arm64.Build.0 = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|x64.ActiveCfg = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|x64.Build.0 = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|x86.ActiveCfg = Release|Any CPU - {9E01AF6A-F748-4490-B45B-8558D1E701B4}.Release|x86.Build.0 = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|arm64.Build.0 = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|x64.ActiveCfg = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|x64.Build.0 = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|x86.ActiveCfg = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Debug|x86.Build.0 = Debug|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|Any CPU.Build.0 = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|arm64.ActiveCfg = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|arm64.Build.0 = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|x64.ActiveCfg = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|x64.Build.0 = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|x86.ActiveCfg = Release|Any CPU - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A}.Release|x86.Build.0 = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|arm64.Build.0 = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|x64.Build.0 = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Debug|x86.Build.0 = Debug|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|Any CPU.Build.0 = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|arm64.ActiveCfg = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|arm64.Build.0 = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|x64.ActiveCfg = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|x64.Build.0 = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|x86.ActiveCfg = Release|Any CPU - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7}.Release|x86.Build.0 = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|arm64.Build.0 = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|x64.Build.0 = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Debug|x86.Build.0 = Debug|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|Any CPU.Build.0 = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|arm64.ActiveCfg = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|arm64.Build.0 = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|x64.ActiveCfg = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|x64.Build.0 = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|x86.ActiveCfg = Release|Any CPU - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB}.Release|x86.Build.0 = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|arm64.Build.0 = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|x64.ActiveCfg = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|x64.Build.0 = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|x86.ActiveCfg = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Debug|x86.Build.0 = Debug|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|Any CPU.Build.0 = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|arm64.ActiveCfg = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|arm64.Build.0 = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|x64.ActiveCfg = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|x64.Build.0 = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|x86.ActiveCfg = Release|Any CPU - {18FCF9CD-8545-41FC-9E4B-0F18B593863D}.Release|x86.Build.0 = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|arm64.Build.0 = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|x64.Build.0 = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Debug|x86.Build.0 = Debug|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|Any CPU.Build.0 = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|arm64.ActiveCfg = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|arm64.Build.0 = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|x64.ActiveCfg = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|x64.Build.0 = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|x86.ActiveCfg = Release|Any CPU - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29}.Release|x86.Build.0 = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|arm64.ActiveCfg = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|arm64.Build.0 = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|x64.ActiveCfg = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|x64.Build.0 = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|x86.ActiveCfg = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Debug|x86.Build.0 = Debug|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|Any CPU.Build.0 = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|arm64.ActiveCfg = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|arm64.Build.0 = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|x64.ActiveCfg = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|x64.Build.0 = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|x86.ActiveCfg = Release|Any CPU - {95F132DA-D9B6-4181-8D1B-A58D935B1827}.Release|x86.Build.0 = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|arm64.Build.0 = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|x64.ActiveCfg = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|x64.Build.0 = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|x86.ActiveCfg = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Debug|x86.Build.0 = Debug|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|Any CPU.Build.0 = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|arm64.ActiveCfg = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|arm64.Build.0 = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|x64.ActiveCfg = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|x64.Build.0 = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|x86.ActiveCfg = Release|Any CPU - {9443F095-DA20-4EED-BC97-5BF92470D972}.Release|x86.Build.0 = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|arm64.Build.0 = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|x64.ActiveCfg = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|x64.Build.0 = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Debug|x86.Build.0 = Debug|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|Any CPU.Build.0 = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|arm64.ActiveCfg = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|arm64.Build.0 = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|x64.ActiveCfg = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|x64.Build.0 = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|x86.ActiveCfg = Release|Any CPU - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE}.Release|x86.Build.0 = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|arm64.Build.0 = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|x64.ActiveCfg = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|x64.Build.0 = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|x86.ActiveCfg = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Debug|x86.Build.0 = Debug|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|Any CPU.Build.0 = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|arm64.ActiveCfg = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|arm64.Build.0 = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|x64.ActiveCfg = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|x64.Build.0 = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|x86.ActiveCfg = Release|Any CPU - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A}.Release|x86.Build.0 = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|arm64.Build.0 = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|x64.ActiveCfg = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|x64.Build.0 = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|x86.ActiveCfg = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Debug|x86.Build.0 = Debug|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|Any CPU.Build.0 = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|arm64.ActiveCfg = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|arm64.Build.0 = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|x64.ActiveCfg = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|x64.Build.0 = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|x86.ActiveCfg = Release|Any CPU - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94}.Release|x86.Build.0 = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|arm64.Build.0 = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|x64.ActiveCfg = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|x64.Build.0 = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|x86.ActiveCfg = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Debug|x86.Build.0 = Debug|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|Any CPU.Build.0 = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|arm64.ActiveCfg = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|arm64.Build.0 = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|x64.ActiveCfg = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|x64.Build.0 = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|x86.ActiveCfg = Release|Any CPU - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8}.Release|x86.Build.0 = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|arm64.Build.0 = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|x64.ActiveCfg = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|x64.Build.0 = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|x86.ActiveCfg = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Debug|x86.Build.0 = Debug|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|Any CPU.Build.0 = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|arm64.ActiveCfg = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|arm64.Build.0 = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|x64.ActiveCfg = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|x64.Build.0 = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|x86.ActiveCfg = Release|Any CPU - {61F6B56C-0764-4585-9C3F-63A0CF05E56E}.Release|x86.Build.0 = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|arm64.ActiveCfg = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|arm64.Build.0 = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|x64.ActiveCfg = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|x64.Build.0 = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|x86.ActiveCfg = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Debug|x86.Build.0 = Debug|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|Any CPU.Build.0 = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|arm64.ActiveCfg = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|arm64.Build.0 = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|x64.ActiveCfg = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|x64.Build.0 = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|x86.ActiveCfg = Release|Any CPU - {60B11F05-CA3B-4AD1-BAC1-912C19D37395}.Release|x86.Build.0 = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|arm64.Build.0 = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|x64.ActiveCfg = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|x64.Build.0 = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|x86.ActiveCfg = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Debug|x86.Build.0 = Debug|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|Any CPU.Build.0 = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|arm64.ActiveCfg = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|arm64.Build.0 = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|x64.ActiveCfg = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|x64.Build.0 = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|x86.ActiveCfg = Release|Any CPU - {8DE6625B-C9E4-4949-A75C-89E3FF556724}.Release|x86.Build.0 = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|arm64.Build.0 = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|x64.Build.0 = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Debug|x86.Build.0 = Debug|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|Any CPU.Build.0 = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|arm64.ActiveCfg = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|arm64.Build.0 = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|x64.ActiveCfg = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|x64.Build.0 = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|x86.ActiveCfg = Release|Any CPU - {B81C7FA1-870F-4F21-A928-A5BE18754E6E}.Release|x86.Build.0 = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|arm64.Build.0 = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|x64.Build.0 = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Debug|x86.Build.0 = Debug|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|Any CPU.Build.0 = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|arm64.ActiveCfg = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|arm64.Build.0 = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|x64.ActiveCfg = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|x64.Build.0 = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|x86.ActiveCfg = Release|Any CPU - {2AEACF69-7F68-414A-B49D-2C627D37D0F6}.Release|x86.Build.0 = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|arm64.Build.0 = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|x64.ActiveCfg = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|x64.Build.0 = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|x86.ActiveCfg = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Debug|x86.Build.0 = Debug|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|Any CPU.Build.0 = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|arm64.ActiveCfg = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|arm64.Build.0 = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|x64.ActiveCfg = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|x64.Build.0 = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|x86.ActiveCfg = Release|Any CPU - {0C610220-E00C-4752-98A0-44A3D4B96A21}.Release|x86.Build.0 = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|arm64.Build.0 = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|x64.ActiveCfg = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|x64.Build.0 = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|x86.ActiveCfg = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Debug|x86.Build.0 = Debug|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|Any CPU.Build.0 = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|arm64.ActiveCfg = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|arm64.Build.0 = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x64.ActiveCfg = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x64.Build.0 = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x86.ActiveCfg = Release|Any CPU - {09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x86.Build.0 = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|arm64.Build.0 = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|x64.ActiveCfg = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|x64.Build.0 = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|x86.ActiveCfg = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|x86.Build.0 = Debug|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|Any CPU.Build.0 = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|arm64.ActiveCfg = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|arm64.Build.0 = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|x64.ActiveCfg = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|x64.Build.0 = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|x86.ActiveCfg = Release|Any CPU - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Release|x86.Build.0 = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|arm64.Build.0 = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|x64.ActiveCfg = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|x64.Build.0 = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|x86.ActiveCfg = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Debug|x86.Build.0 = Debug|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|Any CPU.Build.0 = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|arm64.ActiveCfg = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|arm64.Build.0 = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|x64.ActiveCfg = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|x64.Build.0 = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|x86.ActiveCfg = Release|Any CPU - {E167A806-EEFA-4BCF-A14D-D985BAEA9387}.Release|x86.Build.0 = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|arm64.Build.0 = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|x64.Build.0 = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Debug|x86.Build.0 = Debug|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|Any CPU.Build.0 = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|arm64.ActiveCfg = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|arm64.Build.0 = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|x64.ActiveCfg = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|x64.Build.0 = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|x86.ActiveCfg = Release|Any CPU - {15A90CE7-886D-4005-8C14-CF29123344E1}.Release|x86.Build.0 = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|arm64.Build.0 = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|x64.ActiveCfg = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|x64.Build.0 = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|x86.ActiveCfg = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Debug|x86.Build.0 = Debug|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|Any CPU.Build.0 = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|arm64.ActiveCfg = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|arm64.Build.0 = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|x64.ActiveCfg = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|x64.Build.0 = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|x86.ActiveCfg = Release|Any CPU - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7}.Release|x86.Build.0 = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|arm64.ActiveCfg = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|arm64.Build.0 = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|x64.ActiveCfg = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|x64.Build.0 = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|x86.ActiveCfg = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Debug|x86.Build.0 = Debug|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|Any CPU.Build.0 = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|arm64.ActiveCfg = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|arm64.Build.0 = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|x64.ActiveCfg = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|x64.Build.0 = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|x86.ActiveCfg = Release|Any CPU - {552EB148-0518-41A6-905D-4696A6438E80}.Release|x86.Build.0 = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|Any CPU.Build.0 = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|arm64.ActiveCfg = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|arm64.Build.0 = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|x64.ActiveCfg = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|x64.Build.0 = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|x86.ActiveCfg = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Debug|x86.Build.0 = Debug|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|Any CPU.ActiveCfg = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|Any CPU.Build.0 = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|arm64.ActiveCfg = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|arm64.Build.0 = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|x64.ActiveCfg = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|x64.Build.0 = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|x86.ActiveCfg = Release|Any CPU - {789E23FE-E8F4-4935-AF43-4A84D25AD130}.Release|x86.Build.0 = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|arm64.Build.0 = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|x64.ActiveCfg = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|x64.Build.0 = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|x86.ActiveCfg = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Debug|x86.Build.0 = Debug|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|Any CPU.Build.0 = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|arm64.ActiveCfg = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|arm64.Build.0 = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|x64.ActiveCfg = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|x64.Build.0 = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|x86.ActiveCfg = Release|Any CPU - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1}.Release|x86.Build.0 = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|arm64.Build.0 = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|x64.ActiveCfg = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|x64.Build.0 = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|x86.ActiveCfg = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Debug|x86.Build.0 = Debug|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|Any CPU.Build.0 = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|arm64.ActiveCfg = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|arm64.Build.0 = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|x64.ActiveCfg = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|x64.Build.0 = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|x86.ActiveCfg = Release|Any CPU - {F421D0C4-6EF7-48B7-9213-AFD21322E08B}.Release|x86.Build.0 = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|arm64.ActiveCfg = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|arm64.Build.0 = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|x64.ActiveCfg = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|x64.Build.0 = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|x86.ActiveCfg = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Debug|x86.Build.0 = Debug|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|Any CPU.Build.0 = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|arm64.ActiveCfg = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|arm64.Build.0 = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|x64.ActiveCfg = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|x64.Build.0 = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|x86.ActiveCfg = Release|Any CPU - {696BE515-B3AB-4925-969C-350F1BDA5C30}.Release|x86.Build.0 = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|arm64.Build.0 = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|x64.ActiveCfg = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|x64.Build.0 = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|x86.ActiveCfg = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Debug|x86.Build.0 = Debug|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|Any CPU.Build.0 = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|arm64.ActiveCfg = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|arm64.Build.0 = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|x64.ActiveCfg = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|x64.Build.0 = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|x86.ActiveCfg = Release|Any CPU - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38}.Release|x86.Build.0 = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|arm64.ActiveCfg = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|arm64.Build.0 = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|x64.ActiveCfg = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|x64.Build.0 = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|x86.ActiveCfg = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Debug|x86.Build.0 = Debug|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|Any CPU.Build.0 = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|arm64.ActiveCfg = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|arm64.Build.0 = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|x64.ActiveCfg = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|x64.Build.0 = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|x86.ActiveCfg = Release|Any CPU - {87181A18-6A53-43E6-A6B1-1F867C9D3E45}.Release|x86.Build.0 = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|arm64.Build.0 = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|x64.ActiveCfg = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|x64.Build.0 = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|x86.ActiveCfg = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Debug|x86.Build.0 = Debug|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|Any CPU.Build.0 = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|arm64.ActiveCfg = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|arm64.Build.0 = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|x64.ActiveCfg = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|x64.Build.0 = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|x86.ActiveCfg = Release|Any CPU - {3B85171E-9A55-4605-B9B1-56F77E47137B}.Release|x86.Build.0 = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|arm64.Build.0 = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|x64.ActiveCfg = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|x64.Build.0 = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|x86.ActiveCfg = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Debug|x86.Build.0 = Debug|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|Any CPU.Build.0 = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|arm64.ActiveCfg = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|arm64.Build.0 = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|x64.ActiveCfg = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|x64.Build.0 = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|x86.ActiveCfg = Release|Any CPU - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F}.Release|x86.Build.0 = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|arm64.Build.0 = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|x64.ActiveCfg = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|x64.Build.0 = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|x86.ActiveCfg = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Debug|x86.Build.0 = Debug|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|Any CPU.Build.0 = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|arm64.ActiveCfg = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|arm64.Build.0 = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|x64.ActiveCfg = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|x64.Build.0 = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|x86.ActiveCfg = Release|Any CPU - {58C5FE49-3060-4D9E-B76C-352790FCD1D8}.Release|x86.Build.0 = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|arm64.Build.0 = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|x64.ActiveCfg = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|x64.Build.0 = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|x86.ActiveCfg = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Debug|x86.Build.0 = Debug|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|Any CPU.Build.0 = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|arm64.ActiveCfg = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|arm64.Build.0 = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|x64.ActiveCfg = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|x64.Build.0 = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|x86.ActiveCfg = Release|Any CPU - {4F39F27E-0E21-4093-8818-D974D4716C14}.Release|x86.Build.0 = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|arm64.Build.0 = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|x64.ActiveCfg = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|x64.Build.0 = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|x86.ActiveCfg = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Debug|x86.Build.0 = Debug|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|Any CPU.Build.0 = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|arm64.ActiveCfg = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|arm64.Build.0 = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|x64.ActiveCfg = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|x64.Build.0 = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|x86.ActiveCfg = Release|Any CPU - {BC0CC534-0285-4471-B99E-584BEFEC94DB}.Release|x86.Build.0 = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|arm64.Build.0 = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|x64.ActiveCfg = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|x64.Build.0 = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|x86.ActiveCfg = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Debug|x86.Build.0 = Debug|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|Any CPU.Build.0 = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|arm64.ActiveCfg = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|arm64.Build.0 = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|x64.ActiveCfg = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|x64.Build.0 = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|x86.ActiveCfg = Release|Any CPU - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02}.Release|x86.Build.0 = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|arm64.ActiveCfg = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|arm64.Build.0 = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|x64.ActiveCfg = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|x64.Build.0 = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|x86.ActiveCfg = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Debug|x86.Build.0 = Debug|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|Any CPU.Build.0 = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|arm64.ActiveCfg = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|arm64.Build.0 = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|x64.ActiveCfg = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|x64.Build.0 = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|x86.ActiveCfg = Release|Any CPU - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368}.Release|x86.Build.0 = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|arm64.Build.0 = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|x64.ActiveCfg = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|x64.Build.0 = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|x86.ActiveCfg = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Debug|x86.Build.0 = Debug|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|Any CPU.Build.0 = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|arm64.ActiveCfg = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|arm64.Build.0 = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|x64.ActiveCfg = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|x64.Build.0 = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|x86.ActiveCfg = Release|Any CPU - {22F70908-5E62-4185-B76B-F0C5B952F8AE}.Release|x86.Build.0 = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|arm64.Build.0 = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|x64.ActiveCfg = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|x64.Build.0 = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|x86.ActiveCfg = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Debug|x86.Build.0 = Debug|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|Any CPU.Build.0 = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|arm64.ActiveCfg = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|arm64.Build.0 = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|x64.ActiveCfg = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|x64.Build.0 = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|x86.ActiveCfg = Release|Any CPU - {0CD27C71-4A3C-4AA0-8258-F7430F875984}.Release|x86.Build.0 = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|arm64.ActiveCfg = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|arm64.Build.0 = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|x64.ActiveCfg = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|x64.Build.0 = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|x86.ActiveCfg = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Debug|x86.Build.0 = Debug|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|Any CPU.Build.0 = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|arm64.ActiveCfg = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|arm64.Build.0 = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|x64.ActiveCfg = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|x64.Build.0 = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|x86.ActiveCfg = Release|Any CPU - {58955E85-0D55-45FF-97EE-BDD096522954}.Release|x86.Build.0 = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|arm64.Build.0 = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|x64.ActiveCfg = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|x64.Build.0 = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|x86.ActiveCfg = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Debug|x86.Build.0 = Debug|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|Any CPU.Build.0 = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|arm64.ActiveCfg = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|arm64.Build.0 = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|x64.ActiveCfg = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|x64.Build.0 = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|x86.ActiveCfg = Release|Any CPU - {D708256C-4A68-4B15-AAE5-6EFA41223A70}.Release|x86.Build.0 = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|arm64.Build.0 = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|x64.ActiveCfg = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|x64.Build.0 = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|x86.ActiveCfg = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Debug|x86.Build.0 = Debug|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|Any CPU.Build.0 = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|arm64.ActiveCfg = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|arm64.Build.0 = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|x64.ActiveCfg = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|x64.Build.0 = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|x86.ActiveCfg = Release|Any CPU - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1}.Release|x86.Build.0 = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|arm64.Build.0 = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|x64.ActiveCfg = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|x64.Build.0 = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|x86.ActiveCfg = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Debug|x86.Build.0 = Debug|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|Any CPU.Build.0 = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|arm64.ActiveCfg = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|arm64.Build.0 = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|x64.ActiveCfg = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|x64.Build.0 = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|x86.ActiveCfg = Release|Any CPU - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987}.Release|x86.Build.0 = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|arm64.Build.0 = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|x64.ActiveCfg = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|x64.Build.0 = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|x86.ActiveCfg = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Debug|x86.Build.0 = Debug|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|Any CPU.Build.0 = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|arm64.ActiveCfg = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|arm64.Build.0 = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|x64.ActiveCfg = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|x64.Build.0 = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|x86.ActiveCfg = Release|Any CPU - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA}.Release|x86.Build.0 = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|arm64.Build.0 = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|x64.ActiveCfg = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|x64.Build.0 = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|x86.ActiveCfg = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Debug|x86.Build.0 = Debug|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|Any CPU.Build.0 = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|arm64.ActiveCfg = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|arm64.Build.0 = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|x64.ActiveCfg = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|x64.Build.0 = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|x86.ActiveCfg = Release|Any CPU - {7391E144-5087-4E64-94D8-E0700D57739C}.Release|x86.Build.0 = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|arm64.Build.0 = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|x64.ActiveCfg = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|x64.Build.0 = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|x86.ActiveCfg = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Debug|x86.Build.0 = Debug|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|Any CPU.Build.0 = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|arm64.ActiveCfg = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|arm64.Build.0 = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|x64.ActiveCfg = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|x64.Build.0 = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|x86.ActiveCfg = Release|Any CPU - {ED6E6F06-D620-41BC-8F12-01480BF49381}.Release|x86.Build.0 = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|arm64.Build.0 = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|x64.ActiveCfg = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|x64.Build.0 = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|x86.ActiveCfg = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Debug|x86.Build.0 = Debug|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|Any CPU.Build.0 = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|arm64.ActiveCfg = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|arm64.Build.0 = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|x64.ActiveCfg = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|x64.Build.0 = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|x86.ActiveCfg = Release|Any CPU - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42}.Release|x86.Build.0 = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|arm64.Build.0 = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|x64.ActiveCfg = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|x64.Build.0 = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|x86.ActiveCfg = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Debug|x86.Build.0 = Debug|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|Any CPU.Build.0 = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|arm64.ActiveCfg = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|arm64.Build.0 = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|x64.ActiveCfg = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|x64.Build.0 = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|x86.ActiveCfg = Release|Any CPU - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6}.Release|x86.Build.0 = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|arm64.Build.0 = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|x64.ActiveCfg = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|x64.Build.0 = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|x86.ActiveCfg = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Debug|x86.Build.0 = Debug|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|Any CPU.Build.0 = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|arm64.ActiveCfg = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|arm64.Build.0 = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|x64.ActiveCfg = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|x64.Build.0 = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|x86.ActiveCfg = Release|Any CPU - {72AA2B1F-1FE7-48B5-968D-89E492F2139D}.Release|x86.Build.0 = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|arm64.ActiveCfg = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|arm64.Build.0 = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|x64.ActiveCfg = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|x64.Build.0 = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|x86.ActiveCfg = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Debug|x86.Build.0 = Debug|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|Any CPU.Build.0 = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|arm64.ActiveCfg = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|arm64.Build.0 = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|x64.ActiveCfg = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|x64.Build.0 = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|x86.ActiveCfg = Release|Any CPU - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42}.Release|x86.Build.0 = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|arm64.Build.0 = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|x64.ActiveCfg = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|x64.Build.0 = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Debug|x86.Build.0 = Debug|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|Any CPU.Build.0 = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|arm64.ActiveCfg = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|arm64.Build.0 = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|x64.ActiveCfg = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|x64.Build.0 = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|x86.ActiveCfg = Release|Any CPU - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B}.Release|x86.Build.0 = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|arm64.Build.0 = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|x64.ActiveCfg = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|x64.Build.0 = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|x86.ActiveCfg = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Debug|x86.Build.0 = Debug|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|Any CPU.Build.0 = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|arm64.ActiveCfg = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|arm64.Build.0 = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|x64.ActiveCfg = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|x64.Build.0 = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|x86.ActiveCfg = Release|Any CPU - {8CB43443-E02C-4D04-9E96-A4916E5C83C2}.Release|x86.Build.0 = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|arm64.Build.0 = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|x64.ActiveCfg = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|x64.Build.0 = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|x86.ActiveCfg = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Debug|x86.Build.0 = Debug|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|Any CPU.Build.0 = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|arm64.ActiveCfg = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|arm64.Build.0 = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|x64.ActiveCfg = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|x64.Build.0 = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|x86.ActiveCfg = Release|Any CPU - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101}.Release|x86.Build.0 = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|arm64.Build.0 = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|x64.ActiveCfg = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|x64.Build.0 = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|x86.ActiveCfg = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Debug|x86.Build.0 = Debug|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|Any CPU.Build.0 = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|arm64.ActiveCfg = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|arm64.Build.0 = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|x64.ActiveCfg = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|x64.Build.0 = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|x86.ActiveCfg = Release|Any CPU - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD}.Release|x86.Build.0 = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|Any CPU.Build.0 = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|arm64.ActiveCfg = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|arm64.Build.0 = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|x64.ActiveCfg = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|x64.Build.0 = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|x86.ActiveCfg = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Debug|x86.Build.0 = Debug|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|Any CPU.ActiveCfg = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|Any CPU.Build.0 = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|arm64.ActiveCfg = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|arm64.Build.0 = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|x64.ActiveCfg = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|x64.Build.0 = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|x86.ActiveCfg = Release|Any CPU - {402C3AC9-1B1D-4523-AB80-A992CEA85F57}.Release|x86.Build.0 = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|arm64.ActiveCfg = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|arm64.Build.0 = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|x64.ActiveCfg = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|x64.Build.0 = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|x86.ActiveCfg = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Debug|x86.Build.0 = Debug|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|Any CPU.Build.0 = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|arm64.ActiveCfg = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|arm64.Build.0 = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|x64.ActiveCfg = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|x64.Build.0 = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|x86.ActiveCfg = Release|Any CPU - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85}.Release|x86.Build.0 = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|arm64.Build.0 = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|x64.ActiveCfg = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|x64.Build.0 = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|x86.ActiveCfg = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Debug|x86.Build.0 = Debug|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|Any CPU.Build.0 = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|arm64.ActiveCfg = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|arm64.Build.0 = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|x64.ActiveCfg = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|x64.Build.0 = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|x86.ActiveCfg = Release|Any CPU - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997}.Release|x86.Build.0 = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|arm64.Build.0 = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|x64.ActiveCfg = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|x64.Build.0 = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|x86.ActiveCfg = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Debug|x86.Build.0 = Debug|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|Any CPU.Build.0 = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|arm64.ActiveCfg = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|arm64.Build.0 = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|x64.ActiveCfg = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|x64.Build.0 = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|x86.ActiveCfg = Release|Any CPU - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0}.Release|x86.Build.0 = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|arm64.Build.0 = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|x64.ActiveCfg = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|x64.Build.0 = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|x86.ActiveCfg = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Debug|x86.Build.0 = Debug|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|Any CPU.Build.0 = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|arm64.ActiveCfg = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|arm64.Build.0 = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|x64.ActiveCfg = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|x64.Build.0 = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|x86.ActiveCfg = Release|Any CPU - {C713DCA1-B36D-44BD-ACFA-F562782AD40E}.Release|x86.Build.0 = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|arm64.Build.0 = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|x64.ActiveCfg = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|x64.Build.0 = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|x86.ActiveCfg = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Debug|x86.Build.0 = Debug|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|Any CPU.Build.0 = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|arm64.ActiveCfg = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|arm64.Build.0 = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|x64.ActiveCfg = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|x64.Build.0 = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|x86.ActiveCfg = Release|Any CPU - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F}.Release|x86.Build.0 = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|arm64.Build.0 = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|x64.ActiveCfg = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|x64.Build.0 = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|x86.ActiveCfg = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Debug|x86.Build.0 = Debug|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|Any CPU.Build.0 = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|arm64.ActiveCfg = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|arm64.Build.0 = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|x64.ActiveCfg = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|x64.Build.0 = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|x86.ActiveCfg = Release|Any CPU - {2DF639CC-DFF2-44D2-9585-D1E925B5A117}.Release|x86.Build.0 = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|arm64.Build.0 = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|x64.ActiveCfg = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|x64.Build.0 = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|x86.ActiveCfg = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Debug|x86.Build.0 = Debug|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|Any CPU.Build.0 = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|arm64.ActiveCfg = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|arm64.Build.0 = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|x64.ActiveCfg = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|x64.Build.0 = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|x86.ActiveCfg = Release|Any CPU - {C71CF302-0FFA-4610-9197-033B277F3065}.Release|x86.Build.0 = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|arm64.ActiveCfg = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|arm64.Build.0 = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|x64.ActiveCfg = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|x64.Build.0 = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|x86.ActiveCfg = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Debug|x86.Build.0 = Debug|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|Any CPU.Build.0 = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|arm64.ActiveCfg = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|arm64.Build.0 = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|x64.ActiveCfg = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|x64.Build.0 = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|x86.ActiveCfg = Release|Any CPU - {09D2D765-A792-415E-B19A-18948A1C8969}.Release|x86.Build.0 = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|Any CPU.Build.0 = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|arm64.ActiveCfg = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|arm64.Build.0 = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|x64.ActiveCfg = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|x64.Build.0 = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|x86.ActiveCfg = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Debug|x86.Build.0 = Debug|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|Any CPU.ActiveCfg = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|Any CPU.Build.0 = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|arm64.ActiveCfg = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|arm64.Build.0 = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|x64.ActiveCfg = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|x64.Build.0 = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|x86.ActiveCfg = Release|Any CPU - {822FF16C-A4E0-40A0-AE65-530752575261}.Release|x86.Build.0 = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|arm64.Build.0 = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|x64.ActiveCfg = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|x64.Build.0 = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Debug|x86.Build.0 = Debug|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|Any CPU.Build.0 = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|arm64.ActiveCfg = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|arm64.Build.0 = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|x64.ActiveCfg = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|x64.Build.0 = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|x86.ActiveCfg = Release|Any CPU - {3A554C0B-2956-4152-BF31-2C8CAE5D2717}.Release|x86.Build.0 = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|arm64.Build.0 = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|x64.ActiveCfg = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|x64.Build.0 = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|x86.ActiveCfg = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Debug|x86.Build.0 = Debug|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|Any CPU.Build.0 = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|arm64.ActiveCfg = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|arm64.Build.0 = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|x64.ActiveCfg = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|x64.Build.0 = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|x86.ActiveCfg = Release|Any CPU - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8}.Release|x86.Build.0 = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|arm64.Build.0 = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|x64.Build.0 = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Debug|x86.Build.0 = Debug|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|Any CPU.Build.0 = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|arm64.ActiveCfg = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|arm64.Build.0 = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|x64.ActiveCfg = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|x64.Build.0 = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|x86.ActiveCfg = Release|Any CPU - {473C0171-0AD1-473B-B1A0-93636FD77BA6}.Release|x86.Build.0 = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|arm64.Build.0 = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|x64.ActiveCfg = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|x64.Build.0 = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|x86.ActiveCfg = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Debug|x86.Build.0 = Debug|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|Any CPU.Build.0 = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|arm64.ActiveCfg = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|arm64.Build.0 = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|x64.ActiveCfg = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|x64.Build.0 = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|x86.ActiveCfg = Release|Any CPU - {D15A9C48-00F1-423B-B14D-6EACE976E2F0}.Release|x86.Build.0 = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|arm64.Build.0 = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|x64.ActiveCfg = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|x64.Build.0 = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|x86.ActiveCfg = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Debug|x86.Build.0 = Debug|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|Any CPU.Build.0 = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|arm64.ActiveCfg = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|arm64.Build.0 = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|x64.ActiveCfg = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|x64.Build.0 = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|x86.ActiveCfg = Release|Any CPU - {39B8B1ED-790E-4FF5-8D68-B1153655F87B}.Release|x86.Build.0 = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|arm64.Build.0 = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|x64.ActiveCfg = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|x64.Build.0 = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|x86.ActiveCfg = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Debug|x86.Build.0 = Debug|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|Any CPU.Build.0 = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|arm64.ActiveCfg = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|arm64.Build.0 = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|x64.ActiveCfg = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|x64.Build.0 = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|x86.ActiveCfg = Release|Any CPU - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C}.Release|x86.Build.0 = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|arm64.Build.0 = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|x64.ActiveCfg = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|x64.Build.0 = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|x86.ActiveCfg = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Debug|x86.Build.0 = Debug|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|Any CPU.Build.0 = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|arm64.ActiveCfg = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|arm64.Build.0 = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|x64.ActiveCfg = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|x64.Build.0 = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|x86.ActiveCfg = Release|Any CPU - {30BB8038-D162-4171-9404-4041FC7A5BA7}.Release|x86.Build.0 = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|arm64.Build.0 = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|x64.ActiveCfg = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|x64.Build.0 = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|x86.ActiveCfg = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Debug|x86.Build.0 = Debug|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|Any CPU.Build.0 = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|arm64.ActiveCfg = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|arm64.Build.0 = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|x64.ActiveCfg = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|x64.Build.0 = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|x86.ActiveCfg = Release|Any CPU - {5750A285-B528-4A6C-953F-7838824E5F81}.Release|x86.Build.0 = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|arm64.Build.0 = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|x64.ActiveCfg = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|x64.Build.0 = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|x86.ActiveCfg = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Debug|x86.Build.0 = Debug|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|Any CPU.Build.0 = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|arm64.ActiveCfg = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|arm64.Build.0 = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|x64.ActiveCfg = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|x64.Build.0 = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|x86.ActiveCfg = Release|Any CPU - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2}.Release|x86.Build.0 = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|arm64.Build.0 = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|x64.ActiveCfg = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|x64.Build.0 = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|x86.ActiveCfg = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Debug|x86.Build.0 = Debug|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|Any CPU.Build.0 = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|arm64.ActiveCfg = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|arm64.Build.0 = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|x64.ActiveCfg = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|x64.Build.0 = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|x86.ActiveCfg = Release|Any CPU - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704}.Release|x86.Build.0 = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|arm64.Build.0 = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|x64.ActiveCfg = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|x64.Build.0 = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|x86.ActiveCfg = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Debug|x86.Build.0 = Debug|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|Any CPU.Build.0 = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|arm64.ActiveCfg = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|arm64.Build.0 = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|x64.ActiveCfg = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|x64.Build.0 = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|x86.ActiveCfg = Release|Any CPU - {5EBE548A-E450-466B-B448-D6662E659E58}.Release|x86.Build.0 = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|arm64.Build.0 = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|x64.ActiveCfg = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|x64.Build.0 = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|x86.ActiveCfg = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Debug|x86.Build.0 = Debug|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|Any CPU.Build.0 = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|arm64.ActiveCfg = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|arm64.Build.0 = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|x64.ActiveCfg = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|x64.Build.0 = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|x86.ActiveCfg = Release|Any CPU - {58C3FE63-C364-4AF8-B575-2F65A7565B1F}.Release|x86.Build.0 = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|arm64.Build.0 = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|x64.Build.0 = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Debug|x86.Build.0 = Debug|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|Any CPU.Build.0 = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|arm64.ActiveCfg = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|arm64.Build.0 = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|x64.ActiveCfg = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|x64.Build.0 = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|x86.ActiveCfg = Release|Any CPU - {8B6F219F-CE89-4704-8586-F9953F5FF4AB}.Release|x86.Build.0 = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|arm64.Build.0 = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|x64.Build.0 = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Debug|x86.Build.0 = Debug|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|Any CPU.Build.0 = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|arm64.ActiveCfg = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|arm64.Build.0 = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|x64.ActiveCfg = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|x64.Build.0 = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|x86.ActiveCfg = Release|Any CPU - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D}.Release|x86.Build.0 = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|arm64.Build.0 = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|x64.Build.0 = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Debug|x86.Build.0 = Debug|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|Any CPU.Build.0 = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|arm64.ActiveCfg = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|arm64.Build.0 = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|x64.ActiveCfg = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|x64.Build.0 = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|x86.ActiveCfg = Release|Any CPU - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7}.Release|x86.Build.0 = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|Any CPU.Build.0 = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|arm64.ActiveCfg = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|arm64.Build.0 = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|x64.ActiveCfg = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|x64.Build.0 = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|x86.ActiveCfg = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Debug|x86.Build.0 = Debug|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|Any CPU.ActiveCfg = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|Any CPU.Build.0 = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|arm64.ActiveCfg = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|arm64.Build.0 = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|x64.ActiveCfg = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|x64.Build.0 = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|x86.ActiveCfg = Release|Any CPU - {861CA437-6402-4E45-9E1F-35A509E61568}.Release|x86.Build.0 = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|arm64.Build.0 = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|x64.ActiveCfg = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|x64.Build.0 = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|x86.ActiveCfg = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Debug|x86.Build.0 = Debug|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|Any CPU.Build.0 = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|arm64.ActiveCfg = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|arm64.Build.0 = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|x64.ActiveCfg = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|x64.Build.0 = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|x86.ActiveCfg = Release|Any CPU - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C}.Release|x86.Build.0 = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|arm64.Build.0 = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|x64.Build.0 = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Debug|x86.Build.0 = Debug|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|Any CPU.Build.0 = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|arm64.ActiveCfg = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|arm64.Build.0 = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|x64.ActiveCfg = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|x64.Build.0 = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|x86.ActiveCfg = Release|Any CPU - {805264B9-36C9-49D6-BA34-63D0050C9D6E}.Release|x86.Build.0 = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|arm64.Build.0 = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|x64.ActiveCfg = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|x64.Build.0 = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|x86.ActiveCfg = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Debug|x86.Build.0 = Debug|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|Any CPU.Build.0 = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|arm64.ActiveCfg = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|arm64.Build.0 = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|x64.ActiveCfg = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|x64.Build.0 = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|x86.ActiveCfg = Release|Any CPU - {C2645178-0B55-47D4-B9CA-A6FFA14E616E}.Release|x86.Build.0 = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|arm64.Build.0 = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|x64.ActiveCfg = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|x64.Build.0 = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|x86.ActiveCfg = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Debug|x86.Build.0 = Debug|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|Any CPU.Build.0 = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|arm64.ActiveCfg = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|arm64.Build.0 = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|x64.ActiveCfg = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|x64.Build.0 = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|x86.ActiveCfg = Release|Any CPU - {8192DC13-6878-43C1-B657-96420C3BA9F8}.Release|x86.Build.0 = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|arm64.Build.0 = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|x64.ActiveCfg = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|x64.Build.0 = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|x86.ActiveCfg = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Debug|x86.Build.0 = Debug|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|Any CPU.Build.0 = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|arm64.ActiveCfg = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|arm64.Build.0 = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|x64.ActiveCfg = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|x64.Build.0 = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|x86.ActiveCfg = Release|Any CPU - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7}.Release|x86.Build.0 = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|arm64.Build.0 = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|x64.ActiveCfg = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|x64.Build.0 = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|x86.ActiveCfg = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Debug|x86.Build.0 = Debug|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|Any CPU.Build.0 = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|arm64.ActiveCfg = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|arm64.Build.0 = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|x64.ActiveCfg = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|x64.Build.0 = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|x86.ActiveCfg = Release|Any CPU - {68E93233-6FF3-41FE-8161-3B7F457473C8}.Release|x86.Build.0 = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|arm64.Build.0 = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|x64.ActiveCfg = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|x64.Build.0 = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|x86.ActiveCfg = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Debug|x86.Build.0 = Debug|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|Any CPU.Build.0 = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|arm64.ActiveCfg = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|arm64.Build.0 = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|x64.ActiveCfg = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|x64.Build.0 = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|x86.ActiveCfg = Release|Any CPU - {897EECDD-628F-4233-B1BF-A13F687057BC}.Release|x86.Build.0 = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|arm64.Build.0 = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|x64.ActiveCfg = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|x64.Build.0 = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|x86.ActiveCfg = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Debug|x86.Build.0 = Debug|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|Any CPU.Build.0 = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|arm64.ActiveCfg = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|arm64.Build.0 = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|x64.ActiveCfg = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|x64.Build.0 = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|x86.ActiveCfg = Release|Any CPU - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51}.Release|x86.Build.0 = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|arm64.Build.0 = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|x64.ActiveCfg = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|x64.Build.0 = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|x86.ActiveCfg = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Debug|x86.Build.0 = Debug|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|Any CPU.Build.0 = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|arm64.ActiveCfg = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|arm64.Build.0 = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|x64.ActiveCfg = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|x64.Build.0 = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|x86.ActiveCfg = Release|Any CPU - {122907A1-AD5F-40B3-9D61-05A3F8CF859D}.Release|x86.Build.0 = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|arm64.Build.0 = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|x64.ActiveCfg = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|x64.Build.0 = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|x86.ActiveCfg = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Debug|x86.Build.0 = Debug|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|Any CPU.Build.0 = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|arm64.ActiveCfg = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|arm64.Build.0 = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|x64.ActiveCfg = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|x64.Build.0 = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|x86.ActiveCfg = Release|Any CPU - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D}.Release|x86.Build.0 = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|arm64.Build.0 = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|x64.ActiveCfg = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|x64.Build.0 = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|x86.ActiveCfg = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Debug|x86.Build.0 = Debug|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|Any CPU.Build.0 = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|arm64.ActiveCfg = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|arm64.Build.0 = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|x64.ActiveCfg = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|x64.Build.0 = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|x86.ActiveCfg = Release|Any CPU - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024}.Release|x86.Build.0 = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|arm64.Build.0 = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|x64.ActiveCfg = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|x64.Build.0 = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Debug|x86.Build.0 = Debug|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|Any CPU.Build.0 = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|arm64.ActiveCfg = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|arm64.Build.0 = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|x64.ActiveCfg = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|x64.Build.0 = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|x86.ActiveCfg = Release|Any CPU - {4D08EC2C-A488-414E-8739-341E197773DB}.Release|x86.Build.0 = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|arm64.Build.0 = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|x64.ActiveCfg = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|x64.Build.0 = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|x86.ActiveCfg = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Debug|x86.Build.0 = Debug|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|Any CPU.Build.0 = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|arm64.ActiveCfg = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|arm64.Build.0 = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|x64.ActiveCfg = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|x64.Build.0 = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|x86.ActiveCfg = Release|Any CPU - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17}.Release|x86.Build.0 = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|arm64.ActiveCfg = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|arm64.Build.0 = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|x64.ActiveCfg = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|x64.Build.0 = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|x86.ActiveCfg = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Debug|x86.Build.0 = Debug|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|Any CPU.Build.0 = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|arm64.ActiveCfg = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|arm64.Build.0 = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|x64.ActiveCfg = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|x64.Build.0 = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|x86.ActiveCfg = Release|Any CPU - {35AA4E31-D157-4AD2-B04F-EE3956795420}.Release|x86.Build.0 = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|arm64.Build.0 = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|x64.ActiveCfg = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|x64.Build.0 = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|x86.ActiveCfg = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Debug|x86.Build.0 = Debug|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|Any CPU.Build.0 = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|arm64.ActiveCfg = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|arm64.Build.0 = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|x64.ActiveCfg = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|x64.Build.0 = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|x86.ActiveCfg = Release|Any CPU - {21F89E50-DF06-435E-872B-7639BCE695DF}.Release|x86.Build.0 = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|arm64.Build.0 = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|x64.ActiveCfg = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|x64.Build.0 = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|x86.ActiveCfg = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Debug|x86.Build.0 = Debug|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|Any CPU.Build.0 = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|arm64.ActiveCfg = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|arm64.Build.0 = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|x64.ActiveCfg = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|x64.Build.0 = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|x86.ActiveCfg = Release|Any CPU - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E}.Release|x86.Build.0 = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|arm64.Build.0 = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|x64.ActiveCfg = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|x64.Build.0 = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Debug|x86.Build.0 = Debug|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|Any CPU.Build.0 = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|arm64.ActiveCfg = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|arm64.Build.0 = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|x64.ActiveCfg = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|x64.Build.0 = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|x86.ActiveCfg = Release|Any CPU - {2E690E42-B20F-4702-9478-1707EEC7C02F}.Release|x86.Build.0 = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|arm64.Build.0 = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|x64.ActiveCfg = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|x64.Build.0 = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|x86.ActiveCfg = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Debug|x86.Build.0 = Debug|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|Any CPU.Build.0 = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|arm64.ActiveCfg = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|arm64.Build.0 = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|x64.ActiveCfg = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|x64.Build.0 = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|x86.ActiveCfg = Release|Any CPU - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119}.Release|x86.Build.0 = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|Any CPU.Build.0 = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|arm64.ActiveCfg = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|arm64.Build.0 = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|x64.ActiveCfg = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|x64.Build.0 = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|x86.ActiveCfg = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Debug|x86.Build.0 = Debug|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|Any CPU.ActiveCfg = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|Any CPU.Build.0 = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|arm64.ActiveCfg = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|arm64.Build.0 = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|x64.ActiveCfg = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|x64.Build.0 = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|x86.ActiveCfg = Release|Any CPU - {922869D9-B9FF-4828-8C6F-FCA7963DB011}.Release|x86.Build.0 = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|arm64.Build.0 = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|x64.ActiveCfg = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|x64.Build.0 = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|x86.ActiveCfg = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Debug|x86.Build.0 = Debug|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|Any CPU.Build.0 = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|arm64.ActiveCfg = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|arm64.Build.0 = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|x64.ActiveCfg = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|x64.Build.0 = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|x86.ActiveCfg = Release|Any CPU - {ECF7A440-D5FC-473F-958C-FE27643844D8}.Release|x86.Build.0 = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|arm64.Build.0 = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|x64.ActiveCfg = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|x64.Build.0 = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Debug|x86.Build.0 = Debug|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|Any CPU.Build.0 = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|arm64.ActiveCfg = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|arm64.Build.0 = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|x64.ActiveCfg = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|x64.Build.0 = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|x86.ActiveCfg = Release|Any CPU - {92820F5C-4018-4F10-A14B-0AEE619202EE}.Release|x86.Build.0 = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|arm64.Build.0 = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|x64.ActiveCfg = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|x64.Build.0 = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|x86.ActiveCfg = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Debug|x86.Build.0 = Debug|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|Any CPU.Build.0 = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|arm64.ActiveCfg = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|arm64.Build.0 = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|x64.ActiveCfg = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|x64.Build.0 = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|x86.ActiveCfg = Release|Any CPU - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5}.Release|x86.Build.0 = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|arm64.Build.0 = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|x64.Build.0 = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Debug|x86.Build.0 = Debug|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|Any CPU.Build.0 = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|arm64.ActiveCfg = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|arm64.Build.0 = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|x64.ActiveCfg = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|x64.Build.0 = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|x86.ActiveCfg = Release|Any CPU - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5}.Release|x86.Build.0 = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|arm64.Build.0 = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|x64.ActiveCfg = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|x64.Build.0 = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|x86.ActiveCfg = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Debug|x86.Build.0 = Debug|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|Any CPU.Build.0 = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|arm64.ActiveCfg = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|arm64.Build.0 = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|x64.ActiveCfg = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|x64.Build.0 = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|x86.ActiveCfg = Release|Any CPU - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF}.Release|x86.Build.0 = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|arm64.Build.0 = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|x64.ActiveCfg = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|x64.Build.0 = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|x86.ActiveCfg = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Debug|x86.Build.0 = Debug|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|Any CPU.Build.0 = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|arm64.ActiveCfg = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|arm64.Build.0 = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|x64.ActiveCfg = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|x64.Build.0 = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|x86.ActiveCfg = Release|Any CPU - {A837D64D-435A-473F-8828-8E1DD95D8E4B}.Release|x86.Build.0 = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|arm64.Build.0 = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|x64.ActiveCfg = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|x64.Build.0 = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|x86.ActiveCfg = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Debug|x86.Build.0 = Debug|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|Any CPU.Build.0 = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|arm64.ActiveCfg = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|arm64.Build.0 = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|x64.ActiveCfg = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|x64.Build.0 = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|x86.ActiveCfg = Release|Any CPU - {4BA8A846-5B24-4F46-90B9-FFEFB889C028}.Release|x86.Build.0 = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|arm64.Build.0 = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|x64.ActiveCfg = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|x64.Build.0 = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|x86.ActiveCfg = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Debug|x86.Build.0 = Debug|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|Any CPU.Build.0 = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|arm64.ActiveCfg = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|arm64.Build.0 = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|x64.ActiveCfg = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|x64.Build.0 = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|x86.ActiveCfg = Release|Any CPU - {3CCE49CA-4145-401F-8963-AC28F0908678}.Release|x86.Build.0 = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|arm64.Build.0 = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|x64.ActiveCfg = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|x64.Build.0 = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|x86.ActiveCfg = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Debug|x86.Build.0 = Debug|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|Any CPU.Build.0 = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|arm64.ActiveCfg = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|arm64.Build.0 = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|x64.ActiveCfg = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|x64.Build.0 = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|x86.ActiveCfg = Release|Any CPU - {A1628BC4-134A-4854-9F98-B841520F1497}.Release|x86.Build.0 = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|arm64.Build.0 = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|x64.Build.0 = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Debug|x86.Build.0 = Debug|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|Any CPU.Build.0 = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|arm64.ActiveCfg = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|arm64.Build.0 = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|x64.ActiveCfg = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|x64.Build.0 = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|x86.ActiveCfg = Release|Any CPU - {C69E36EC-3972-4CDF-A467-94CBD7C691A1}.Release|x86.Build.0 = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|arm64.Build.0 = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|x64.ActiveCfg = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|x64.Build.0 = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|x86.ActiveCfg = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Debug|x86.Build.0 = Debug|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|Any CPU.Build.0 = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|arm64.ActiveCfg = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|arm64.Build.0 = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|x64.ActiveCfg = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|x64.Build.0 = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|x86.ActiveCfg = Release|Any CPU - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926}.Release|x86.Build.0 = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|arm64.Build.0 = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|x64.Build.0 = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Debug|x86.Build.0 = Debug|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|Any CPU.Build.0 = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|arm64.ActiveCfg = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|arm64.Build.0 = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|x64.ActiveCfg = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|x64.Build.0 = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|x86.ActiveCfg = Release|Any CPU - {5930AA76-C824-45F0-9D30-7EE4CB231E7A}.Release|x86.Build.0 = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|arm64.Build.0 = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|x64.Build.0 = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Debug|x86.Build.0 = Debug|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|Any CPU.Build.0 = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|arm64.ActiveCfg = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|arm64.Build.0 = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|x64.ActiveCfg = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|x64.Build.0 = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|x86.ActiveCfg = Release|Any CPU - {5BE39E84-020F-405D-99AF-5D46928785AF}.Release|x86.Build.0 = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|arm64.Build.0 = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|x64.Build.0 = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Debug|x86.Build.0 = Debug|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|Any CPU.Build.0 = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|arm64.ActiveCfg = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|arm64.Build.0 = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|x64.ActiveCfg = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|x64.Build.0 = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|x86.ActiveCfg = Release|Any CPU - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8}.Release|x86.Build.0 = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|arm64.Build.0 = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|x64.ActiveCfg = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|x64.Build.0 = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|x86.ActiveCfg = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Debug|x86.Build.0 = Debug|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|Any CPU.Build.0 = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|arm64.ActiveCfg = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|arm64.Build.0 = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|x64.ActiveCfg = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|x64.Build.0 = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|x86.ActiveCfg = Release|Any CPU - {99CB7560-3B6F-447B-880A-C5A53F1E56F9}.Release|x86.Build.0 = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|arm64.Build.0 = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|x64.ActiveCfg = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|x64.Build.0 = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|x86.ActiveCfg = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Debug|x86.Build.0 = Debug|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|Any CPU.Build.0 = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|arm64.ActiveCfg = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|arm64.Build.0 = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|x64.ActiveCfg = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|x64.Build.0 = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|x86.ActiveCfg = Release|Any CPU - {605D0C19-6E99-4A73-B336-1AD700AE93C0}.Release|x86.Build.0 = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|arm64.Build.0 = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|x64.ActiveCfg = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|x64.Build.0 = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|x86.ActiveCfg = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Debug|x86.Build.0 = Debug|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|Any CPU.Build.0 = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|arm64.ActiveCfg = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|arm64.Build.0 = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|x64.ActiveCfg = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|x64.Build.0 = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|x86.ActiveCfg = Release|Any CPU - {2292C14D-151C-4AB7-AA91-7F0165E2073E}.Release|x86.Build.0 = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|arm64.Build.0 = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|x64.Build.0 = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Debug|x86.Build.0 = Debug|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|Any CPU.Build.0 = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|arm64.ActiveCfg = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|arm64.Build.0 = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|x64.ActiveCfg = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|x64.Build.0 = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|x86.ActiveCfg = Release|Any CPU - {F8410622-2764-4B05-BEC4-8D25CABBC45A}.Release|x86.Build.0 = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|arm64.Build.0 = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|x64.ActiveCfg = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|x64.Build.0 = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|x86.ActiveCfg = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Debug|x86.Build.0 = Debug|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|Any CPU.Build.0 = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|arm64.ActiveCfg = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|arm64.Build.0 = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|x64.ActiveCfg = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|x64.Build.0 = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|x86.ActiveCfg = Release|Any CPU - {5EC5F788-458B-4957-8E33-ADD82DB6E420}.Release|x86.Build.0 = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|arm64.Build.0 = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|x64.ActiveCfg = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|x64.Build.0 = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|x86.ActiveCfg = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Debug|x86.Build.0 = Debug|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|Any CPU.Build.0 = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|arm64.ActiveCfg = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|arm64.Build.0 = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|x64.ActiveCfg = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|x64.Build.0 = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|x86.ActiveCfg = Release|Any CPU - {7135BA54-DE2E-42CD-8261-1A88907843FC}.Release|x86.Build.0 = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|arm64.Build.0 = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|x64.Build.0 = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Debug|x86.Build.0 = Debug|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|Any CPU.Build.0 = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|arm64.ActiveCfg = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|arm64.Build.0 = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|x64.ActiveCfg = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|x64.Build.0 = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|x86.ActiveCfg = Release|Any CPU - {A72BB350-8903-4914-9583-A156B66419EB}.Release|x86.Build.0 = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|arm64.Build.0 = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|x64.ActiveCfg = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|x64.Build.0 = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|x86.ActiveCfg = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Debug|x86.Build.0 = Debug|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|Any CPU.Build.0 = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|arm64.ActiveCfg = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|arm64.Build.0 = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|x64.ActiveCfg = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|x64.Build.0 = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|x86.ActiveCfg = Release|Any CPU - {186AF4F9-9AFF-4395-9340-006F78D85DFB}.Release|x86.Build.0 = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|arm64.Build.0 = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|x64.ActiveCfg = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|x64.Build.0 = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|x86.ActiveCfg = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Debug|x86.Build.0 = Debug|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|Any CPU.Build.0 = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|arm64.ActiveCfg = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|arm64.Build.0 = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|x64.ActiveCfg = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|x64.Build.0 = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|x86.ActiveCfg = Release|Any CPU - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D}.Release|x86.Build.0 = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|arm64.Build.0 = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|x64.Build.0 = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Debug|x86.Build.0 = Debug|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|Any CPU.Build.0 = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|arm64.ActiveCfg = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|arm64.Build.0 = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|x64.ActiveCfg = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|x64.Build.0 = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|x86.ActiveCfg = Release|Any CPU - {8E5588B6-0557-41CF-9A0B-1A0B412754E1}.Release|x86.Build.0 = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|arm64.Build.0 = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|x64.ActiveCfg = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|x64.Build.0 = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Debug|x86.Build.0 = Debug|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|Any CPU.Build.0 = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|arm64.ActiveCfg = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|arm64.Build.0 = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|x64.ActiveCfg = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|x64.Build.0 = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|x86.ActiveCfg = Release|Any CPU - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF}.Release|x86.Build.0 = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|arm64.Build.0 = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|x64.ActiveCfg = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|x64.Build.0 = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|x86.ActiveCfg = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Debug|x86.Build.0 = Debug|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|Any CPU.Build.0 = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|arm64.ActiveCfg = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|arm64.Build.0 = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|x64.ActiveCfg = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|x64.Build.0 = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|x86.ActiveCfg = Release|Any CPU - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B}.Release|x86.Build.0 = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|arm64.Build.0 = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|x64.ActiveCfg = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|x64.Build.0 = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|x86.ActiveCfg = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Debug|x86.Build.0 = Debug|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|Any CPU.Build.0 = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|arm64.ActiveCfg = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|arm64.Build.0 = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|x64.ActiveCfg = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|x64.Build.0 = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|x86.ActiveCfg = Release|Any CPU - {A01B523B-35CA-4C14-B792-3887F8741E99}.Release|x86.Build.0 = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|arm64.Build.0 = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|x64.ActiveCfg = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|x64.Build.0 = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|x86.ActiveCfg = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Debug|x86.Build.0 = Debug|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|Any CPU.Build.0 = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|arm64.ActiveCfg = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|arm64.Build.0 = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x64.ActiveCfg = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x64.Build.0 = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x86.ActiveCfg = Release|Any CPU - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x86.Build.0 = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|arm64.Build.0 = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|x64.ActiveCfg = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|x64.Build.0 = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|x86.ActiveCfg = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|x86.Build.0 = Debug|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|Any CPU.Build.0 = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|arm64.ActiveCfg = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|arm64.Build.0 = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|x64.ActiveCfg = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|x64.Build.0 = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|x86.ActiveCfg = Release|Any CPU - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Release|x86.Build.0 = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|arm64.Build.0 = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|x64.ActiveCfg = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|x64.Build.0 = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|x86.ActiveCfg = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Debug|x86.Build.0 = Debug|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|Any CPU.Build.0 = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|arm64.ActiveCfg = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|arm64.Build.0 = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|x64.ActiveCfg = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|x64.Build.0 = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|x86.ActiveCfg = Release|Any CPU - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD}.Release|x86.Build.0 = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|arm64.Build.0 = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|x64.ActiveCfg = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|x64.Build.0 = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|x86.ActiveCfg = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Debug|x86.Build.0 = Debug|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|Any CPU.Build.0 = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|arm64.ActiveCfg = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|arm64.Build.0 = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|x64.ActiveCfg = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|x64.Build.0 = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|x86.ActiveCfg = Release|Any CPU - {91BD5675-6674-4053-AD04-19F28DD3BAE5}.Release|x86.Build.0 = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|arm64.Build.0 = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|x64.ActiveCfg = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|x64.Build.0 = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|x86.ActiveCfg = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Debug|x86.Build.0 = Debug|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|Any CPU.Build.0 = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|arm64.ActiveCfg = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|arm64.Build.0 = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|x64.ActiveCfg = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|x64.Build.0 = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|x86.ActiveCfg = Release|Any CPU - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC}.Release|x86.Build.0 = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|arm64.Build.0 = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|x64.ActiveCfg = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|x64.Build.0 = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|x86.ActiveCfg = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Debug|x86.Build.0 = Debug|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|Any CPU.Build.0 = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|arm64.ActiveCfg = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|arm64.Build.0 = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|x64.ActiveCfg = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|x64.Build.0 = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|x86.ActiveCfg = Release|Any CPU - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0}.Release|x86.Build.0 = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|arm64.Build.0 = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|x64.ActiveCfg = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|x64.Build.0 = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|x86.ActiveCfg = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Debug|x86.Build.0 = Debug|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|Any CPU.Build.0 = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|arm64.ActiveCfg = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|arm64.Build.0 = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|x64.ActiveCfg = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|x64.Build.0 = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|x86.ActiveCfg = Release|Any CPU - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154}.Release|x86.Build.0 = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|arm64.Build.0 = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|x64.Build.0 = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Debug|x86.Build.0 = Debug|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|Any CPU.Build.0 = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|arm64.ActiveCfg = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|arm64.Build.0 = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|x64.ActiveCfg = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|x64.Build.0 = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|x86.ActiveCfg = Release|Any CPU - {5BF572A5-24AF-4815-BF0C-F57DA650207D}.Release|x86.Build.0 = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|arm64.Build.0 = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|x64.ActiveCfg = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|x64.Build.0 = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|x86.ActiveCfg = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Debug|x86.Build.0 = Debug|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|Any CPU.Build.0 = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|arm64.ActiveCfg = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|arm64.Build.0 = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|x64.ActiveCfg = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|x64.Build.0 = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|x86.ActiveCfg = Release|Any CPU - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1}.Release|x86.Build.0 = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|arm64.Build.0 = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|x64.ActiveCfg = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|x64.Build.0 = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|x86.ActiveCfg = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Debug|x86.Build.0 = Debug|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|Any CPU.Build.0 = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|arm64.ActiveCfg = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|arm64.Build.0 = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x64.ActiveCfg = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x64.Build.0 = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x86.ActiveCfg = Release|Any CPU - {A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x86.Build.0 = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|arm64.Build.0 = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|x64.Build.0 = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|x86.Build.0 = Debug|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|Any CPU.Build.0 = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|arm64.ActiveCfg = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|arm64.Build.0 = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x64.ActiveCfg = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x64.Build.0 = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x86.ActiveCfg = Release|Any CPU - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Release|x86.Build.0 = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|arm64.Build.0 = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|x64.Build.0 = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Debug|x86.Build.0 = Debug|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|Any CPU.Build.0 = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|arm64.ActiveCfg = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|arm64.Build.0 = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|x64.ActiveCfg = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|x64.Build.0 = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|x86.ActiveCfg = Release|Any CPU - {F5C54062-B19C-4291-A816-F1B5A167369A}.Release|x86.Build.0 = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|arm64.Build.0 = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|x64.Build.0 = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Debug|x86.Build.0 = Debug|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|Any CPU.Build.0 = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|arm64.ActiveCfg = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|arm64.Build.0 = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|x64.ActiveCfg = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|x64.Build.0 = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|x86.ActiveCfg = Release|Any CPU - {B5F938FB-37DF-4201-9537-E043513701D7}.Release|x86.Build.0 = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|arm64.Build.0 = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|x64.ActiveCfg = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|x64.Build.0 = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|x86.ActiveCfg = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Debug|x86.Build.0 = Debug|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|Any CPU.Build.0 = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|arm64.ActiveCfg = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|arm64.Build.0 = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|x64.ActiveCfg = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|x64.Build.0 = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|x86.ActiveCfg = Release|Any CPU - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160}.Release|x86.Build.0 = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|arm64.Build.0 = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|x64.Build.0 = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Debug|x86.Build.0 = Debug|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|Any CPU.Build.0 = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|arm64.ActiveCfg = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|arm64.Build.0 = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|x64.ActiveCfg = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|x64.Build.0 = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|x86.ActiveCfg = Release|Any CPU - {1CF04156-B477-4B88-A25B-15D4E6F587D7}.Release|x86.Build.0 = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|arm64.Build.0 = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|x64.ActiveCfg = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|x64.Build.0 = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|x86.ActiveCfg = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Debug|x86.Build.0 = Debug|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|Any CPU.Build.0 = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|arm64.ActiveCfg = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|arm64.Build.0 = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|x64.ActiveCfg = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|x64.Build.0 = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|x86.ActiveCfg = Release|Any CPU - {AC688973-3FAD-4A04-99C9-414782E5AE42}.Release|x86.Build.0 = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|arm64.Build.0 = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|x64.ActiveCfg = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|x64.Build.0 = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|x86.ActiveCfg = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Debug|x86.Build.0 = Debug|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|Any CPU.Build.0 = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|arm64.ActiveCfg = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|arm64.Build.0 = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|x64.ActiveCfg = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|x64.Build.0 = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|x86.ActiveCfg = Release|Any CPU - {58BAA9A7-4A2A-459A-BD41-086E8F83022D}.Release|x86.Build.0 = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|arm64.Build.0 = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|x64.ActiveCfg = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|x64.Build.0 = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|x86.ActiveCfg = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Debug|x86.Build.0 = Debug|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|Any CPU.Build.0 = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|arm64.ActiveCfg = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|arm64.Build.0 = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|x64.ActiveCfg = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|x64.Build.0 = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|x86.ActiveCfg = Release|Any CPU - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4}.Release|x86.Build.0 = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|Any CPU.Build.0 = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|arm64.ActiveCfg = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|arm64.Build.0 = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|x64.ActiveCfg = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|x64.Build.0 = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|x86.ActiveCfg = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Debug|x86.Build.0 = Debug|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|Any CPU.ActiveCfg = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|Any CPU.Build.0 = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|arm64.ActiveCfg = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|arm64.Build.0 = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|x64.ActiveCfg = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|x64.Build.0 = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|x86.ActiveCfg = Release|Any CPU - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931}.Release|x86.Build.0 = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|arm64.Build.0 = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|x64.Build.0 = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Debug|x86.Build.0 = Debug|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|Any CPU.Build.0 = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|arm64.ActiveCfg = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|arm64.Build.0 = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|x64.ActiveCfg = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|x64.Build.0 = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|x86.ActiveCfg = Release|Any CPU - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633}.Release|x86.Build.0 = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|arm64.Build.0 = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|x64.ActiveCfg = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|x64.Build.0 = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|x86.ActiveCfg = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Debug|x86.Build.0 = Debug|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|Any CPU.Build.0 = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|arm64.ActiveCfg = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|arm64.Build.0 = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|x64.ActiveCfg = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|x64.Build.0 = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|x86.ActiveCfg = Release|Any CPU - {975E7F46-8044-463E-89E1-56EB0F7913B8}.Release|x86.Build.0 = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|arm64.Build.0 = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|x64.ActiveCfg = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|x64.Build.0 = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|x86.ActiveCfg = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Debug|x86.Build.0 = Debug|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|Any CPU.Build.0 = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|arm64.ActiveCfg = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|arm64.Build.0 = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|x64.ActiveCfg = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|x64.Build.0 = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|x86.ActiveCfg = Release|Any CPU - {BAD5E853-2C9D-41D5-844D-470BC33B43E8}.Release|x86.Build.0 = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|arm64.Build.0 = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|x64.ActiveCfg = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|x64.Build.0 = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|x86.ActiveCfg = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Debug|x86.Build.0 = Debug|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|Any CPU.Build.0 = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|arm64.ActiveCfg = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|arm64.Build.0 = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|x64.ActiveCfg = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|x64.Build.0 = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|x86.ActiveCfg = Release|Any CPU - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7}.Release|x86.Build.0 = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|arm64.Build.0 = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|x64.ActiveCfg = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|x64.Build.0 = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|x86.ActiveCfg = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Debug|x86.Build.0 = Debug|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|Any CPU.Build.0 = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|arm64.ActiveCfg = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|arm64.Build.0 = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|x64.ActiveCfg = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|x64.Build.0 = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|x86.ActiveCfg = Release|Any CPU - {A8096362-6304-4DAF-A091-978BE764FF30}.Release|x86.Build.0 = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|arm64.Build.0 = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|x64.Build.0 = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Debug|x86.Build.0 = Debug|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|Any CPU.Build.0 = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|arm64.ActiveCfg = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|arm64.Build.0 = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|x64.ActiveCfg = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|x64.Build.0 = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|x86.ActiveCfg = Release|Any CPU - {0FD49F5F-2950-43B8-8467-78596A4421AC}.Release|x86.Build.0 = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|arm64.Build.0 = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|x64.ActiveCfg = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|x64.Build.0 = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|x86.ActiveCfg = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Debug|x86.Build.0 = Debug|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|Any CPU.Build.0 = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|arm64.ActiveCfg = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|arm64.Build.0 = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|x64.ActiveCfg = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|x64.Build.0 = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|x86.ActiveCfg = Release|Any CPU - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1}.Release|x86.Build.0 = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|arm64.Build.0 = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|x64.ActiveCfg = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|x64.Build.0 = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|x86.ActiveCfg = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Debug|x86.Build.0 = Debug|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|Any CPU.Build.0 = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|arm64.ActiveCfg = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|arm64.Build.0 = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|x64.ActiveCfg = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|x64.Build.0 = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|x86.ActiveCfg = Release|Any CPU - {7DFECECC-E30C-4217-9746-86A8D652E110}.Release|x86.Build.0 = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|arm64.Build.0 = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|x64.ActiveCfg = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|x64.Build.0 = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|x86.ActiveCfg = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Debug|x86.Build.0 = Debug|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|Any CPU.Build.0 = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|arm64.ActiveCfg = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|arm64.Build.0 = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|x64.ActiveCfg = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|x64.Build.0 = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|x86.ActiveCfg = Release|Any CPU - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90}.Release|x86.Build.0 = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|arm64.Build.0 = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|x64.ActiveCfg = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|x64.Build.0 = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|x86.ActiveCfg = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Debug|x86.Build.0 = Debug|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|Any CPU.Build.0 = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|arm64.ActiveCfg = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|arm64.Build.0 = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|x64.ActiveCfg = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|x64.Build.0 = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|x86.ActiveCfg = Release|Any CPU - {70F83D54-91BF-4BED-8A82-F310D640C9F8}.Release|x86.Build.0 = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|arm64.Build.0 = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|x64.Build.0 = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Debug|x86.Build.0 = Debug|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|Any CPU.Build.0 = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|arm64.ActiveCfg = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|arm64.Build.0 = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|x64.ActiveCfg = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|x64.Build.0 = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|x86.ActiveCfg = Release|Any CPU - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6}.Release|x86.Build.0 = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|arm64.Build.0 = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|x64.ActiveCfg = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|x64.Build.0 = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|x86.ActiveCfg = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Debug|x86.Build.0 = Debug|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|Any CPU.Build.0 = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|arm64.ActiveCfg = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|arm64.Build.0 = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|x64.ActiveCfg = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|x64.Build.0 = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|x86.ActiveCfg = Release|Any CPU - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A}.Release|x86.Build.0 = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|arm64.Build.0 = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|x64.ActiveCfg = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|x64.Build.0 = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|x86.ActiveCfg = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Debug|x86.Build.0 = Debug|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|Any CPU.Build.0 = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|arm64.ActiveCfg = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|arm64.Build.0 = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|x64.ActiveCfg = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|x64.Build.0 = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|x86.ActiveCfg = Release|Any CPU - {199639E9-0FAA-49C4-A75F-95EE71F32CC0}.Release|x86.Build.0 = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|arm64.Build.0 = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|x64.Build.0 = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Debug|x86.Build.0 = Debug|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|Any CPU.Build.0 = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|arm64.ActiveCfg = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|arm64.Build.0 = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|x64.ActiveCfg = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|x64.Build.0 = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|x86.ActiveCfg = Release|Any CPU - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A}.Release|x86.Build.0 = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|arm64.Build.0 = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|x64.ActiveCfg = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|x64.Build.0 = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|x86.ActiveCfg = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Debug|x86.Build.0 = Debug|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|Any CPU.Build.0 = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|arm64.ActiveCfg = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|arm64.Build.0 = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|x64.ActiveCfg = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|x64.Build.0 = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|x86.ActiveCfg = Release|Any CPU - {039266E2-5F43-4B94-86DA-8BDD7BE8885F}.Release|x86.Build.0 = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|arm64.Build.0 = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|x64.ActiveCfg = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|x64.Build.0 = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|x86.ActiveCfg = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Debug|x86.Build.0 = Debug|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|Any CPU.Build.0 = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|arm64.ActiveCfg = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|arm64.Build.0 = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|x64.ActiveCfg = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|x64.Build.0 = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|x86.ActiveCfg = Release|Any CPU - {EA846E30-4F38-4315-844F-D5BC20F74B07}.Release|x86.Build.0 = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|arm64.Build.0 = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|x64.Build.0 = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Debug|x86.Build.0 = Debug|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|Any CPU.Build.0 = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|arm64.ActiveCfg = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|arm64.Build.0 = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|x64.ActiveCfg = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|x64.Build.0 = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|x86.ActiveCfg = Release|Any CPU - {3BEA35BC-784F-4892-AF1F-90177B8362A1}.Release|x86.Build.0 = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|arm64.Build.0 = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|x64.ActiveCfg = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|x64.Build.0 = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|x86.ActiveCfg = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Debug|x86.Build.0 = Debug|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|Any CPU.Build.0 = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|arm64.ActiveCfg = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|arm64.Build.0 = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|x64.ActiveCfg = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|x64.Build.0 = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|x86.ActiveCfg = Release|Any CPU - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55}.Release|x86.Build.0 = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|arm64.Build.0 = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|x64.ActiveCfg = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|x64.Build.0 = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|x86.ActiveCfg = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Debug|x86.Build.0 = Debug|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|Any CPU.Build.0 = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|arm64.ActiveCfg = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|arm64.Build.0 = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|x64.ActiveCfg = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|x64.Build.0 = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|x86.ActiveCfg = Release|Any CPU - {E27910E1-6CCE-41B2-97DD-AE874007B592}.Release|x86.Build.0 = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|arm64.Build.0 = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|x64.ActiveCfg = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|x64.Build.0 = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|x86.ActiveCfg = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Debug|x86.Build.0 = Debug|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|Any CPU.Build.0 = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|arm64.ActiveCfg = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|arm64.Build.0 = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|x64.ActiveCfg = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|x64.Build.0 = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|x86.ActiveCfg = Release|Any CPU - {72879779-4CAC-4CB0-A052-FF60EB386B7A}.Release|x86.Build.0 = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|arm64.Build.0 = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|x64.Build.0 = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Debug|x86.Build.0 = Debug|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|Any CPU.Build.0 = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|arm64.ActiveCfg = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|arm64.Build.0 = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|x64.ActiveCfg = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|x64.Build.0 = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|x86.ActiveCfg = Release|Any CPU - {5BD69C96-623F-427B-9AAF-67C0817A9A9A}.Release|x86.Build.0 = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|arm64.Build.0 = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|x64.ActiveCfg = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|x64.Build.0 = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|x86.ActiveCfg = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Debug|x86.Build.0 = Debug|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|Any CPU.Build.0 = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|arm64.ActiveCfg = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|arm64.Build.0 = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|x64.ActiveCfg = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|x64.Build.0 = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|x86.ActiveCfg = Release|Any CPU - {D10BA44E-219B-4528-98F5-0CB0FCF17017}.Release|x86.Build.0 = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|arm64.Build.0 = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|x64.ActiveCfg = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|x64.Build.0 = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|x86.ActiveCfg = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Debug|x86.Build.0 = Debug|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|Any CPU.Build.0 = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|arm64.ActiveCfg = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|arm64.Build.0 = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|x64.ActiveCfg = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|x64.Build.0 = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|x86.ActiveCfg = Release|Any CPU - {EAF56BE6-683A-4C34-AC2D-22770EC13915}.Release|x86.Build.0 = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|arm64.Build.0 = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|x64.ActiveCfg = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|x64.Build.0 = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|x86.ActiveCfg = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Debug|x86.Build.0 = Debug|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|Any CPU.Build.0 = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|arm64.ActiveCfg = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|arm64.Build.0 = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|x64.ActiveCfg = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|x64.Build.0 = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|x86.ActiveCfg = Release|Any CPU - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A}.Release|x86.Build.0 = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|Any CPU.Build.0 = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|arm64.ActiveCfg = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|arm64.Build.0 = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|x64.ActiveCfg = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|x64.Build.0 = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|x86.ActiveCfg = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Debug|x86.Build.0 = Debug|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|Any CPU.ActiveCfg = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|Any CPU.Build.0 = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|arm64.ActiveCfg = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|arm64.Build.0 = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|x64.ActiveCfg = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|x64.Build.0 = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|x86.ActiveCfg = Release|Any CPU - {332A8F84-FC5B-44A5-95A2-379B69C6E755}.Release|x86.Build.0 = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|arm64.Build.0 = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|x64.ActiveCfg = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|x64.Build.0 = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|x86.ActiveCfg = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Debug|x86.Build.0 = Debug|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|Any CPU.Build.0 = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|arm64.ActiveCfg = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|arm64.Build.0 = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|x64.ActiveCfg = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|x64.Build.0 = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|x86.ActiveCfg = Release|Any CPU - {A28B3D43-619F-44A9-9463-78F0E2474351}.Release|x86.Build.0 = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|Any CPU.Build.0 = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|arm64.ActiveCfg = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|arm64.Build.0 = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|x64.ActiveCfg = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|x64.Build.0 = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|x86.ActiveCfg = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Debug|x86.Build.0 = Debug|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|Any CPU.ActiveCfg = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|Any CPU.Build.0 = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|arm64.ActiveCfg = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|arm64.Build.0 = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|x64.ActiveCfg = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|x64.Build.0 = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|x86.ActiveCfg = Release|Any CPU - {926D431D-D95F-42BA-817B-DFEAF697E007}.Release|x86.Build.0 = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|arm64.ActiveCfg = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|arm64.Build.0 = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|x64.ActiveCfg = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|x64.Build.0 = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|x86.ActiveCfg = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Debug|x86.Build.0 = Debug|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|Any CPU.Build.0 = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|arm64.ActiveCfg = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|arm64.Build.0 = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|x64.ActiveCfg = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|x64.Build.0 = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|x86.ActiveCfg = Release|Any CPU - {00D4573D-B61D-48C2-BCB4-027A19EB3247}.Release|x86.Build.0 = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|arm64.Build.0 = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|x64.Build.0 = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Debug|x86.Build.0 = Debug|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|Any CPU.Build.0 = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|arm64.ActiveCfg = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|arm64.Build.0 = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|x64.ActiveCfg = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|x64.Build.0 = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|x86.ActiveCfg = Release|Any CPU - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC}.Release|x86.Build.0 = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|arm64.Build.0 = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|x64.Build.0 = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Debug|x86.Build.0 = Debug|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|Any CPU.Build.0 = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|arm64.ActiveCfg = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|arm64.Build.0 = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|x64.ActiveCfg = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|x64.Build.0 = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|x86.ActiveCfg = Release|Any CPU - {5500EB93-4F36-4929-9730-E593DBC2B7F5}.Release|x86.Build.0 = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|arm64.Build.0 = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|x64.ActiveCfg = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|x64.Build.0 = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|x86.ActiveCfg = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Debug|x86.Build.0 = Debug|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|Any CPU.Build.0 = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|arm64.ActiveCfg = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|arm64.Build.0 = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|x64.ActiveCfg = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|x64.Build.0 = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|x86.ActiveCfg = Release|Any CPU - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596}.Release|x86.Build.0 = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|arm64.ActiveCfg = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|arm64.Build.0 = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|x64.ActiveCfg = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|x64.Build.0 = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|x86.ActiveCfg = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Debug|x86.Build.0 = Debug|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|Any CPU.Build.0 = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|arm64.ActiveCfg = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|arm64.Build.0 = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|x64.ActiveCfg = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|x64.Build.0 = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|x86.ActiveCfg = Release|Any CPU - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70}.Release|x86.Build.0 = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|arm64.Build.0 = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|x64.ActiveCfg = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|x64.Build.0 = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Debug|x86.Build.0 = Debug|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|Any CPU.Build.0 = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|arm64.ActiveCfg = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|arm64.Build.0 = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|x64.ActiveCfg = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|x64.Build.0 = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|x86.ActiveCfg = Release|Any CPU - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5}.Release|x86.Build.0 = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|arm64.Build.0 = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|x64.Build.0 = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Debug|x86.Build.0 = Debug|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|Any CPU.Build.0 = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|arm64.ActiveCfg = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|arm64.Build.0 = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|x64.ActiveCfg = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|x64.Build.0 = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|x86.ActiveCfg = Release|Any CPU - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136}.Release|x86.Build.0 = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|Any CPU.Build.0 = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|arm64.ActiveCfg = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|arm64.Build.0 = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|x64.ActiveCfg = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|x64.Build.0 = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|x86.ActiveCfg = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Debug|x86.Build.0 = Debug|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|Any CPU.ActiveCfg = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|Any CPU.Build.0 = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|arm64.ActiveCfg = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|arm64.Build.0 = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|x64.ActiveCfg = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|x64.Build.0 = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|x86.ActiveCfg = Release|Any CPU - {687BD42C-54CD-4E80-A877-6E278AE21105}.Release|x86.Build.0 = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|arm64.Build.0 = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|x64.ActiveCfg = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|x64.Build.0 = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Debug|x86.Build.0 = Debug|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|Any CPU.Build.0 = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|arm64.ActiveCfg = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|arm64.Build.0 = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|x64.ActiveCfg = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|x64.Build.0 = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|x86.ActiveCfg = Release|Any CPU - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797}.Release|x86.Build.0 = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|arm64.Build.0 = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|x64.Build.0 = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Debug|x86.Build.0 = Debug|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|Any CPU.Build.0 = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|arm64.ActiveCfg = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|arm64.Build.0 = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|x64.ActiveCfg = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|x64.Build.0 = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|x86.ActiveCfg = Release|Any CPU - {BD57D455-9B11-4BA6-9F1D-6B289284642D}.Release|x86.Build.0 = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|arm64.Build.0 = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|x64.ActiveCfg = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|x64.Build.0 = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|x86.ActiveCfg = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Debug|x86.Build.0 = Debug|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|Any CPU.Build.0 = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|arm64.ActiveCfg = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|arm64.Build.0 = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|x64.ActiveCfg = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|x64.Build.0 = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|x86.ActiveCfg = Release|Any CPU - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3}.Release|x86.Build.0 = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|arm64.Build.0 = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|x64.ActiveCfg = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|x64.Build.0 = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|x86.ActiveCfg = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Debug|x86.Build.0 = Debug|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|Any CPU.Build.0 = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|arm64.ActiveCfg = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|arm64.Build.0 = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|x64.ActiveCfg = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|x64.Build.0 = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|x86.ActiveCfg = Release|Any CPU - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3}.Release|x86.Build.0 = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|arm64.Build.0 = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|x64.Build.0 = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Debug|x86.Build.0 = Debug|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|Any CPU.Build.0 = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|arm64.ActiveCfg = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|arm64.Build.0 = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|x64.ActiveCfg = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|x64.Build.0 = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|x86.ActiveCfg = Release|Any CPU - {6D9C0B4C-A902-4F37-921F-1A5B14405463}.Release|x86.Build.0 = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|arm64.Build.0 = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|x64.Build.0 = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Debug|x86.Build.0 = Debug|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|Any CPU.Build.0 = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|arm64.ActiveCfg = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|arm64.Build.0 = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|x64.ActiveCfg = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|x64.Build.0 = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|x86.ActiveCfg = Release|Any CPU - {9FF8728F-B953-4481-9B9F-11351CA0BFE6}.Release|x86.Build.0 = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|arm64.Build.0 = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|x64.Build.0 = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Debug|x86.Build.0 = Debug|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|Any CPU.Build.0 = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|arm64.ActiveCfg = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|arm64.Build.0 = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|x64.ActiveCfg = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|x64.Build.0 = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|x86.ActiveCfg = Release|Any CPU - {586ECE45-FD14-4520-9823-0A9B043FCC6E}.Release|x86.Build.0 = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|arm64.Build.0 = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|x64.ActiveCfg = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|x64.Build.0 = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|x86.ActiveCfg = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Debug|x86.Build.0 = Debug|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|Any CPU.Build.0 = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|arm64.ActiveCfg = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|arm64.Build.0 = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|x64.ActiveCfg = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|x64.Build.0 = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|x86.ActiveCfg = Release|Any CPU - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F}.Release|x86.Build.0 = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|arm64.Build.0 = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|x64.ActiveCfg = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|x64.Build.0 = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|x86.ActiveCfg = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Debug|x86.Build.0 = Debug|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|Any CPU.Build.0 = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|arm64.ActiveCfg = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|arm64.Build.0 = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|x64.ActiveCfg = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|x64.Build.0 = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|x86.ActiveCfg = Release|Any CPU - {5D3C520F-0CA7-4759-A563-40496545FA48}.Release|x86.Build.0 = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|arm64.Build.0 = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|x64.ActiveCfg = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|x64.Build.0 = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|x86.ActiveCfg = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Debug|x86.Build.0 = Debug|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|Any CPU.Build.0 = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|arm64.ActiveCfg = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|arm64.Build.0 = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|x64.ActiveCfg = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|x64.Build.0 = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|x86.ActiveCfg = Release|Any CPU - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29}.Release|x86.Build.0 = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|arm64.Build.0 = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|x64.ActiveCfg = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|x64.Build.0 = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|x86.ActiveCfg = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Debug|x86.Build.0 = Debug|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|Any CPU.Build.0 = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|arm64.ActiveCfg = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|arm64.Build.0 = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|x64.ActiveCfg = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|x64.Build.0 = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|x86.ActiveCfg = Release|Any CPU - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB}.Release|x86.Build.0 = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|arm64.Build.0 = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|x64.ActiveCfg = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|x64.Build.0 = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|x86.ActiveCfg = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Debug|x86.Build.0 = Debug|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|Any CPU.Build.0 = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|arm64.ActiveCfg = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|arm64.Build.0 = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|x64.ActiveCfg = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|x64.Build.0 = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|x86.ActiveCfg = Release|Any CPU - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61}.Release|x86.Build.0 = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|arm64.Build.0 = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|x64.ActiveCfg = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|x64.Build.0 = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|x86.ActiveCfg = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Debug|x86.Build.0 = Debug|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|Any CPU.Build.0 = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|arm64.ActiveCfg = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|arm64.Build.0 = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|x64.ActiveCfg = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|x64.Build.0 = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|x86.ActiveCfg = Release|Any CPU - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9}.Release|x86.Build.0 = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|arm64.Build.0 = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|x64.ActiveCfg = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|x64.Build.0 = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|x86.ActiveCfg = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Debug|x86.Build.0 = Debug|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|Any CPU.Build.0 = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|arm64.ActiveCfg = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|arm64.Build.0 = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|x64.ActiveCfg = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|x64.Build.0 = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|x86.ActiveCfg = Release|Any CPU - {3163C56E-99BC-4BD1-8880-4F94A2407741}.Release|x86.Build.0 = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|arm64.Build.0 = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|x64.ActiveCfg = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|x64.Build.0 = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|x86.ActiveCfg = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Debug|x86.Build.0 = Debug|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|Any CPU.Build.0 = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|arm64.ActiveCfg = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|arm64.Build.0 = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|x64.ActiveCfg = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|x64.Build.0 = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|x86.ActiveCfg = Release|Any CPU - {776BFCDC-8591-4E3D-BD0D-858A188A033D}.Release|x86.Build.0 = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|arm64.Build.0 = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|x64.ActiveCfg = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|x64.Build.0 = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|x86.ActiveCfg = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Debug|x86.Build.0 = Debug|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|Any CPU.Build.0 = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|arm64.ActiveCfg = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|arm64.Build.0 = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|x64.ActiveCfg = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|x64.Build.0 = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|x86.ActiveCfg = Release|Any CPU - {ED34C082-619E-4CCB-9D26-4E2375633FA2}.Release|x86.Build.0 = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|arm64.Build.0 = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|x64.ActiveCfg = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|x64.Build.0 = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Debug|x86.Build.0 = Debug|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|Any CPU.Build.0 = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|arm64.ActiveCfg = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|arm64.Build.0 = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|x64.ActiveCfg = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|x64.Build.0 = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|x86.ActiveCfg = Release|Any CPU - {31B7D2B1-47AF-432B-BF07-73916EF238EE}.Release|x86.Build.0 = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|arm64.Build.0 = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|x64.ActiveCfg = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|x64.Build.0 = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|x86.ActiveCfg = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Debug|x86.Build.0 = Debug|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|Any CPU.Build.0 = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|arm64.ActiveCfg = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|arm64.Build.0 = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|x64.ActiveCfg = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|x64.Build.0 = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|x86.ActiveCfg = Release|Any CPU - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9}.Release|x86.Build.0 = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|arm64.Build.0 = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|x64.ActiveCfg = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|x64.Build.0 = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|x86.ActiveCfg = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Debug|x86.Build.0 = Debug|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|Any CPU.Build.0 = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|arm64.ActiveCfg = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|arm64.Build.0 = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|x64.ActiveCfg = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|x64.Build.0 = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|x86.ActiveCfg = Release|Any CPU - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173}.Release|x86.Build.0 = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|arm64.Build.0 = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|x64.ActiveCfg = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|x64.Build.0 = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|x86.ActiveCfg = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Debug|x86.Build.0 = Debug|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|Any CPU.Build.0 = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|arm64.ActiveCfg = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|arm64.Build.0 = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|x64.ActiveCfg = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|x64.Build.0 = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|x86.ActiveCfg = Release|Any CPU - {256DCEBC-1E1D-46B2-9031-E358E850F3C5}.Release|x86.Build.0 = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|arm64.Build.0 = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|x64.ActiveCfg = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|x64.Build.0 = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|x86.ActiveCfg = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Debug|x86.Build.0 = Debug|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|Any CPU.Build.0 = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|arm64.ActiveCfg = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|arm64.Build.0 = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|x64.ActiveCfg = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|x64.Build.0 = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|x86.ActiveCfg = Release|Any CPU - {1D1E165C-435A-4716-8769-31A51632D7C2}.Release|x86.Build.0 = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|arm64.Build.0 = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|x64.Build.0 = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Debug|x86.Build.0 = Debug|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|Any CPU.Build.0 = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|arm64.ActiveCfg = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|arm64.Build.0 = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|x64.ActiveCfg = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|x64.Build.0 = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|x86.ActiveCfg = Release|Any CPU - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8}.Release|x86.Build.0 = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|arm64.Build.0 = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|x64.ActiveCfg = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|x64.Build.0 = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|x86.ActiveCfg = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Debug|x86.Build.0 = Debug|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|Any CPU.Build.0 = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|arm64.ActiveCfg = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|arm64.Build.0 = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|x64.ActiveCfg = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|x64.Build.0 = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|x86.ActiveCfg = Release|Any CPU - {817D138C-19D8-4264-8FAF-660B05AC030D}.Release|x86.Build.0 = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|arm64.Build.0 = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|x64.Build.0 = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Debug|x86.Build.0 = Debug|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|Any CPU.Build.0 = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|arm64.ActiveCfg = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|arm64.Build.0 = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|x64.ActiveCfg = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|x64.Build.0 = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|x86.ActiveCfg = Release|Any CPU - {1FE68FDC-F122-4605-B49D-FDC8C17324A5}.Release|x86.Build.0 = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|arm64.Build.0 = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|x64.ActiveCfg = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|x64.Build.0 = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|x86.ActiveCfg = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Debug|x86.Build.0 = Debug|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|Any CPU.Build.0 = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|arm64.ActiveCfg = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|arm64.Build.0 = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|x64.ActiveCfg = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|x64.Build.0 = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|x86.ActiveCfg = Release|Any CPU - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894}.Release|x86.Build.0 = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|arm64.ActiveCfg = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|arm64.Build.0 = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|x64.ActiveCfg = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|x64.Build.0 = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|x86.ActiveCfg = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Debug|x86.Build.0 = Debug|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|Any CPU.Build.0 = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|arm64.ActiveCfg = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|arm64.Build.0 = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|x64.ActiveCfg = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|x64.Build.0 = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|x86.ActiveCfg = Release|Any CPU - {45A7FB48-3811-4DAF-989C-141EE4AEFB03}.Release|x86.Build.0 = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|arm64.Build.0 = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|x64.ActiveCfg = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|x64.Build.0 = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|x86.ActiveCfg = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Debug|x86.Build.0 = Debug|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|Any CPU.Build.0 = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|arm64.ActiveCfg = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|arm64.Build.0 = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|x64.ActiveCfg = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|x64.Build.0 = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|x86.ActiveCfg = Release|Any CPU - {86741306-CF87-4AEA-9015-188A3CECBFBC}.Release|x86.Build.0 = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|arm64.Build.0 = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|x64.ActiveCfg = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|x64.Build.0 = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|x86.ActiveCfg = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Debug|x86.Build.0 = Debug|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|Any CPU.Build.0 = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|arm64.ActiveCfg = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|arm64.Build.0 = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|x64.ActiveCfg = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|x64.Build.0 = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|x86.ActiveCfg = Release|Any CPU - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC}.Release|x86.Build.0 = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|arm64.Build.0 = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|x64.ActiveCfg = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|x64.Build.0 = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|x86.ActiveCfg = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Debug|x86.Build.0 = Debug|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|Any CPU.Build.0 = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|arm64.ActiveCfg = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|arm64.Build.0 = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|x64.ActiveCfg = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|x64.Build.0 = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|x86.ActiveCfg = Release|Any CPU - {6592343C-B7B7-4687-8942-1C2241414A02}.Release|x86.Build.0 = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|arm64.Build.0 = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|x64.ActiveCfg = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|x64.Build.0 = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|x86.ActiveCfg = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Debug|x86.Build.0 = Debug|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|Any CPU.Build.0 = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|arm64.ActiveCfg = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|arm64.Build.0 = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|x64.ActiveCfg = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|x64.Build.0 = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|x86.ActiveCfg = Release|Any CPU - {DA64A7BF-F869-414C-A096-076723E55C61}.Release|x86.Build.0 = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|arm64.Build.0 = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|x64.ActiveCfg = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|x64.Build.0 = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|x86.ActiveCfg = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Debug|x86.Build.0 = Debug|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|Any CPU.Build.0 = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|arm64.ActiveCfg = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|arm64.Build.0 = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|x64.ActiveCfg = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|x64.Build.0 = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|x86.ActiveCfg = Release|Any CPU - {06C034BE-0079-4AC3-815B-D71AC44DF3A3}.Release|x86.Build.0 = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|arm64.Build.0 = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|x64.ActiveCfg = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|x64.Build.0 = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|x86.ActiveCfg = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Debug|x86.Build.0 = Debug|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|Any CPU.Build.0 = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|arm64.ActiveCfg = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|arm64.Build.0 = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|x64.ActiveCfg = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|x64.Build.0 = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|x86.ActiveCfg = Release|Any CPU - {9DD484F7-062B-43D4-AC70-0E226BA168FF}.Release|x86.Build.0 = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|arm64.Build.0 = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|x64.ActiveCfg = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|x64.Build.0 = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|x86.ActiveCfg = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Debug|x86.Build.0 = Debug|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|Any CPU.Build.0 = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|arm64.ActiveCfg = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|arm64.Build.0 = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|x64.ActiveCfg = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|x64.Build.0 = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|x86.ActiveCfg = Release|Any CPU - {88C2C45B-ED16-4B85-8498-E3F13679629D}.Release|x86.Build.0 = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|arm64.Build.0 = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|x64.ActiveCfg = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|x64.Build.0 = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|x86.ActiveCfg = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Debug|x86.Build.0 = Debug|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|Any CPU.Build.0 = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|arm64.ActiveCfg = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|arm64.Build.0 = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|x64.ActiveCfg = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|x64.Build.0 = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|x86.ActiveCfg = Release|Any CPU - {F6B80862-7D74-4362-B5E2-AEBF116F2B19}.Release|x86.Build.0 = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|arm64.Build.0 = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|x64.ActiveCfg = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|x64.Build.0 = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|x86.ActiveCfg = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Debug|x86.Build.0 = Debug|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|Any CPU.Build.0 = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|arm64.ActiveCfg = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|arm64.Build.0 = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|x64.ActiveCfg = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|x64.Build.0 = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|x86.ActiveCfg = Release|Any CPU - {E1CE011A-47BD-496D-B9EB-2766C198A619}.Release|x86.Build.0 = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|arm64.Build.0 = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|x64.ActiveCfg = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|x64.Build.0 = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|x86.ActiveCfg = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Debug|x86.Build.0 = Debug|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|Any CPU.Build.0 = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|arm64.ActiveCfg = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|arm64.Build.0 = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|x64.ActiveCfg = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|x64.Build.0 = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|x86.ActiveCfg = Release|Any CPU - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5}.Release|x86.Build.0 = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|arm64.Build.0 = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|x64.ActiveCfg = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|x64.Build.0 = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|x86.ActiveCfg = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Debug|x86.Build.0 = Debug|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|Any CPU.Build.0 = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|arm64.ActiveCfg = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|arm64.Build.0 = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|x64.ActiveCfg = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|x64.Build.0 = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|x86.ActiveCfg = Release|Any CPU - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F}.Release|x86.Build.0 = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|arm64.Build.0 = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|x64.Build.0 = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|x86.ActiveCfg = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Debug|x86.Build.0 = Debug|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|Any CPU.Build.0 = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|arm64.ActiveCfg = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|arm64.Build.0 = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|x64.ActiveCfg = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|x64.Build.0 = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|x86.ActiveCfg = Release|Any CPU - {7F67C1C2-7352-414F-9149-1F16D53C7435}.Release|x86.Build.0 = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|arm64.Build.0 = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|x64.ActiveCfg = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|x64.Build.0 = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|x86.ActiveCfg = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Debug|x86.Build.0 = Debug|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|Any CPU.Build.0 = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|arm64.ActiveCfg = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|arm64.Build.0 = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|x64.ActiveCfg = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|x64.Build.0 = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|x86.ActiveCfg = Release|Any CPU - {046AFDDE-B31B-4205-B059-0E8E194E954D}.Release|x86.Build.0 = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|arm64.Build.0 = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|x64.ActiveCfg = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|x64.Build.0 = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|x86.ActiveCfg = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Debug|x86.Build.0 = Debug|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|Any CPU.Build.0 = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|arm64.ActiveCfg = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|arm64.Build.0 = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|x64.ActiveCfg = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|x64.Build.0 = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|x86.ActiveCfg = Release|Any CPU - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44}.Release|x86.Build.0 = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|arm64.Build.0 = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|x64.ActiveCfg = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|x64.Build.0 = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Debug|x86.Build.0 = Debug|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|Any CPU.Build.0 = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|arm64.ActiveCfg = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|arm64.Build.0 = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|x64.ActiveCfg = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|x64.Build.0 = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|x86.ActiveCfg = Release|Any CPU - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF}.Release|x86.Build.0 = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|arm64.Build.0 = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|x64.ActiveCfg = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|x64.Build.0 = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|x86.ActiveCfg = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Debug|x86.Build.0 = Debug|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|Any CPU.Build.0 = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|arm64.ActiveCfg = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|arm64.Build.0 = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|x64.ActiveCfg = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|x64.Build.0 = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|x86.ActiveCfg = Release|Any CPU - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E}.Release|x86.Build.0 = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|arm64.Build.0 = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|x64.Build.0 = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Debug|x86.Build.0 = Debug|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|Any CPU.Build.0 = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|arm64.ActiveCfg = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|arm64.Build.0 = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|x64.ActiveCfg = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|x64.Build.0 = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|x86.ActiveCfg = Release|Any CPU - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB}.Release|x86.Build.0 = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|arm64.Build.0 = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|x64.ActiveCfg = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|x64.Build.0 = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|x86.ActiveCfg = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Debug|x86.Build.0 = Debug|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|Any CPU.Build.0 = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|arm64.ActiveCfg = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|arm64.Build.0 = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|x64.ActiveCfg = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|x64.Build.0 = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|x86.ActiveCfg = Release|Any CPU - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4}.Release|x86.Build.0 = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|arm64.Build.0 = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|x64.ActiveCfg = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|x64.Build.0 = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|x86.ActiveCfg = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Debug|x86.Build.0 = Debug|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|Any CPU.Build.0 = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|arm64.ActiveCfg = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|arm64.Build.0 = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|x64.ActiveCfg = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|x64.Build.0 = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|x86.ActiveCfg = Release|Any CPU - {197EB396-53AA-4C29-8A59-3FEACD3703B6}.Release|x86.Build.0 = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|arm64.Build.0 = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|x64.ActiveCfg = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|x64.Build.0 = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|x86.ActiveCfg = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Debug|x86.Build.0 = Debug|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|Any CPU.Build.0 = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|arm64.ActiveCfg = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|arm64.Build.0 = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|x64.ActiveCfg = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|x64.Build.0 = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|x86.ActiveCfg = Release|Any CPU - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5}.Release|x86.Build.0 = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|arm64.Build.0 = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|x64.ActiveCfg = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|x64.Build.0 = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|x86.ActiveCfg = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Debug|x86.Build.0 = Debug|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|Any CPU.Build.0 = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|arm64.ActiveCfg = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|arm64.Build.0 = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|x64.ActiveCfg = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|x64.Build.0 = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|x86.ActiveCfg = Release|Any CPU - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC}.Release|x86.Build.0 = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|arm64.Build.0 = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|x64.ActiveCfg = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|x64.Build.0 = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|x86.ActiveCfg = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Debug|x86.Build.0 = Debug|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|Any CPU.Build.0 = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|arm64.ActiveCfg = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|arm64.Build.0 = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|x64.ActiveCfg = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|x64.Build.0 = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|x86.ActiveCfg = Release|Any CPU - {294EC05D-B818-4CD5-AF6E-95B3F23607FC}.Release|x86.Build.0 = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|arm64.ActiveCfg = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|arm64.Build.0 = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|x64.ActiveCfg = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|x64.Build.0 = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|x86.ActiveCfg = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Debug|x86.Build.0 = Debug|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|Any CPU.Build.0 = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|arm64.ActiveCfg = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|arm64.Build.0 = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|x64.ActiveCfg = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|x64.Build.0 = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|x86.ActiveCfg = Release|Any CPU - {892333B9-689B-4E51-82FF-CC5376961A36}.Release|x86.Build.0 = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|arm64.Build.0 = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|x64.ActiveCfg = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|x64.Build.0 = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Debug|x86.Build.0 = Debug|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|Any CPU.Build.0 = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|arm64.ActiveCfg = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|arm64.Build.0 = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|x64.ActiveCfg = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|x64.Build.0 = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|x86.ActiveCfg = Release|Any CPU - {4D4CB590-9F66-4D75-B439-D3B445975A55}.Release|x86.Build.0 = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|arm64.Build.0 = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|x64.ActiveCfg = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|x64.Build.0 = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|x86.ActiveCfg = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Debug|x86.Build.0 = Debug|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|Any CPU.Build.0 = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|arm64.ActiveCfg = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|arm64.Build.0 = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|x64.ActiveCfg = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|x64.Build.0 = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|x86.ActiveCfg = Release|Any CPU - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D}.Release|x86.Build.0 = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|Any CPU.Build.0 = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|arm64.ActiveCfg = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|arm64.Build.0 = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|x64.ActiveCfg = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|x64.Build.0 = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|x86.ActiveCfg = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Debug|x86.Build.0 = Debug|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|Any CPU.ActiveCfg = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|Any CPU.Build.0 = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|arm64.ActiveCfg = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|arm64.Build.0 = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|x64.ActiveCfg = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|x64.Build.0 = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|x86.ActiveCfg = Release|Any CPU - {257A6551-7987-4C5C-BE6F-376094477371}.Release|x86.Build.0 = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|arm64.Build.0 = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|x64.ActiveCfg = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|x64.Build.0 = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|x86.ActiveCfg = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Debug|x86.Build.0 = Debug|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|Any CPU.Build.0 = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|arm64.ActiveCfg = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|arm64.Build.0 = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|x64.ActiveCfg = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|x64.Build.0 = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|x86.ActiveCfg = Release|Any CPU - {5236B5B7-E2CD-4D20-A65C-D5803E78885F}.Release|x86.Build.0 = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|arm64.Build.0 = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|x64.ActiveCfg = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|x64.Build.0 = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|x86.ActiveCfg = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Debug|x86.Build.0 = Debug|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|Any CPU.Build.0 = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|arm64.ActiveCfg = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|arm64.Build.0 = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|x64.ActiveCfg = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|x64.Build.0 = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|x86.ActiveCfg = Release|Any CPU - {CACBB755-08B6-4176-9390-CAD3F9962E80}.Release|x86.Build.0 = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|arm64.Build.0 = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|x64.ActiveCfg = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|x64.Build.0 = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|x86.ActiveCfg = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Debug|x86.Build.0 = Debug|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|Any CPU.Build.0 = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|arm64.ActiveCfg = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|arm64.Build.0 = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|x64.ActiveCfg = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|x64.Build.0 = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|x86.ActiveCfg = Release|Any CPU - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B}.Release|x86.Build.0 = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|arm64.Build.0 = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|x64.ActiveCfg = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|x64.Build.0 = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|x86.ActiveCfg = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Debug|x86.Build.0 = Debug|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|Any CPU.Build.0 = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|arm64.ActiveCfg = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|arm64.Build.0 = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|x64.ActiveCfg = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|x64.Build.0 = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|x86.ActiveCfg = Release|Any CPU - {75F3739D-9404-44B0-8F1F-1BDE4542047A}.Release|x86.Build.0 = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|arm64.Build.0 = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|x64.ActiveCfg = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|x64.Build.0 = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|x86.ActiveCfg = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Debug|x86.Build.0 = Debug|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|Any CPU.Build.0 = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|arm64.ActiveCfg = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|arm64.Build.0 = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|x64.ActiveCfg = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|x64.Build.0 = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|x86.ActiveCfg = Release|Any CPU - {A6A95BEF-7E21-4D3D-921B-F77267219D27}.Release|x86.Build.0 = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|arm64.Build.0 = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|x64.ActiveCfg = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|x64.Build.0 = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|x86.ActiveCfg = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Debug|x86.Build.0 = Debug|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|Any CPU.Build.0 = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|arm64.ActiveCfg = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|arm64.Build.0 = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|x64.ActiveCfg = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|x64.Build.0 = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|x86.ActiveCfg = Release|Any CPU - {4DC9C494-9867-4319-937E-5FBC0E5F5A51}.Release|x86.Build.0 = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|arm64.Build.0 = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|x64.ActiveCfg = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|x64.Build.0 = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|x86.ActiveCfg = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Debug|x86.Build.0 = Debug|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|Any CPU.Build.0 = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|arm64.ActiveCfg = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|arm64.Build.0 = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|x64.ActiveCfg = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|x64.Build.0 = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|x86.ActiveCfg = Release|Any CPU - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE}.Release|x86.Build.0 = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|arm64.Build.0 = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|x64.ActiveCfg = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|x64.Build.0 = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|x86.ActiveCfg = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Debug|x86.Build.0 = Debug|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|Any CPU.Build.0 = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|arm64.ActiveCfg = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|arm64.Build.0 = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|x64.ActiveCfg = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|x64.Build.0 = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|x86.ActiveCfg = Release|Any CPU - {DEA32B7F-E9B4-4E87-8B47-30555D286D93}.Release|x86.Build.0 = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|arm64.Build.0 = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|x64.ActiveCfg = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|x64.Build.0 = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|x86.ActiveCfg = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Debug|x86.Build.0 = Debug|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|Any CPU.Build.0 = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|arm64.ActiveCfg = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|arm64.Build.0 = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|x64.ActiveCfg = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|x64.Build.0 = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|x86.ActiveCfg = Release|Any CPU - {6248B017-2912-4989-9994-2685C4D88E9A}.Release|x86.Build.0 = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|arm64.Build.0 = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|x64.Build.0 = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Debug|x86.Build.0 = Debug|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|Any CPU.Build.0 = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|arm64.ActiveCfg = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|arm64.Build.0 = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|x64.ActiveCfg = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|x64.Build.0 = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|x86.ActiveCfg = Release|Any CPU - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2}.Release|x86.Build.0 = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|arm64.ActiveCfg = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|arm64.Build.0 = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|x64.ActiveCfg = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|x64.Build.0 = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|x86.ActiveCfg = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Debug|x86.Build.0 = Debug|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|Any CPU.Build.0 = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|arm64.ActiveCfg = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|arm64.Build.0 = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x64.ActiveCfg = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x64.Build.0 = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x86.ActiveCfg = Release|Any CPU - {65EE0531-4533-407F-A9CA-2EBCDC444397}.Release|x86.Build.0 = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|arm64.Build.0 = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|x64.ActiveCfg = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|x64.Build.0 = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|x86.ActiveCfg = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Debug|x86.Build.0 = Debug|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|Any CPU.Build.0 = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|arm64.ActiveCfg = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|arm64.Build.0 = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|x64.ActiveCfg = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|x64.Build.0 = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|x86.ActiveCfg = Release|Any CPU - {52433D20-35EA-48CC-BB4A-4DFE3023670B}.Release|x86.Build.0 = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|arm64.Build.0 = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|x64.ActiveCfg = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|x64.Build.0 = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|x86.ActiveCfg = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Debug|x86.Build.0 = Debug|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|Any CPU.Build.0 = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|arm64.ActiveCfg = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|arm64.Build.0 = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|x64.ActiveCfg = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|x64.Build.0 = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|x86.ActiveCfg = Release|Any CPU - {C911DC19-9556-4DCC-9794-AD907137348F}.Release|x86.Build.0 = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|arm64.Build.0 = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|x64.ActiveCfg = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|x64.Build.0 = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|x86.ActiveCfg = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Debug|x86.Build.0 = Debug|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|Any CPU.Build.0 = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|arm64.ActiveCfg = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|arm64.Build.0 = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|x64.ActiveCfg = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|x64.Build.0 = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|x86.ActiveCfg = Release|Any CPU - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73}.Release|x86.Build.0 = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|arm64.Build.0 = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|x64.ActiveCfg = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|x64.Build.0 = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|x86.ActiveCfg = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Debug|x86.Build.0 = Debug|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|Any CPU.Build.0 = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|arm64.ActiveCfg = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|arm64.Build.0 = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|x64.ActiveCfg = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|x64.Build.0 = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|x86.ActiveCfg = Release|Any CPU - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB}.Release|x86.Build.0 = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|arm64.Build.0 = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|x64.ActiveCfg = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|x64.Build.0 = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|x86.ActiveCfg = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Debug|x86.Build.0 = Debug|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|Any CPU.Build.0 = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|arm64.ActiveCfg = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|arm64.Build.0 = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|x64.ActiveCfg = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|x64.Build.0 = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|x86.ActiveCfg = Release|Any CPU - {4655E193-E5F4-449B-B1A3-6358AC8D3A27}.Release|x86.Build.0 = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|arm64.Build.0 = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|x64.ActiveCfg = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|x64.Build.0 = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|x86.ActiveCfg = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Debug|x86.Build.0 = Debug|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|Any CPU.Build.0 = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|arm64.ActiveCfg = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|arm64.Build.0 = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|x64.ActiveCfg = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|x64.Build.0 = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|x86.ActiveCfg = Release|Any CPU - {7A29AAAB-2B4B-4D47-A315-23A0E830E214}.Release|x86.Build.0 = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|arm64.Build.0 = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|x64.ActiveCfg = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|x64.Build.0 = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Debug|x86.Build.0 = Debug|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|Any CPU.Build.0 = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|arm64.ActiveCfg = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|arm64.Build.0 = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|x64.ActiveCfg = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|x64.Build.0 = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|x86.ActiveCfg = Release|Any CPU - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491}.Release|x86.Build.0 = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|arm64.Build.0 = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|x64.ActiveCfg = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|x64.Build.0 = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|x86.ActiveCfg = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Debug|x86.Build.0 = Debug|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|Any CPU.Build.0 = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|arm64.ActiveCfg = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|arm64.Build.0 = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|x64.ActiveCfg = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|x64.Build.0 = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|x86.ActiveCfg = Release|Any CPU - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F}.Release|x86.Build.0 = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|arm64.Build.0 = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|x64.ActiveCfg = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|x64.Build.0 = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|x86.ActiveCfg = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Debug|x86.Build.0 = Debug|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|Any CPU.Build.0 = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|arm64.ActiveCfg = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|arm64.Build.0 = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|x64.ActiveCfg = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|x64.Build.0 = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|x86.ActiveCfg = Release|Any CPU - {EBE144DD-577E-4E98-BFEB-94E479753927}.Release|x86.Build.0 = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|arm64.Build.0 = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|x64.ActiveCfg = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|x64.Build.0 = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Debug|x86.Build.0 = Debug|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|Any CPU.Build.0 = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|arm64.ActiveCfg = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|arm64.Build.0 = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|x64.ActiveCfg = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|x64.Build.0 = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|x86.ActiveCfg = Release|Any CPU - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}.Release|x86.Build.0 = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|arm64.ActiveCfg = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|arm64.Build.0 = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|x64.ActiveCfg = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|x64.Build.0 = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|x86.ActiveCfg = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Debug|x86.Build.0 = Debug|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|Any CPU.Build.0 = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|arm64.ActiveCfg = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|arm64.Build.0 = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|x64.ActiveCfg = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|x64.Build.0 = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|x86.ActiveCfg = Release|Any CPU - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42}.Release|x86.Build.0 = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|arm64.Build.0 = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|x64.ActiveCfg = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|x64.Build.0 = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|x86.ActiveCfg = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Debug|x86.Build.0 = Debug|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|Any CPU.Build.0 = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|arm64.ActiveCfg = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|arm64.Build.0 = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|x64.ActiveCfg = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|x64.Build.0 = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|x86.ActiveCfg = Release|Any CPU - {A8A42FB4-1B51-4290-9291-445D3A489758}.Release|x86.Build.0 = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|arm64.Build.0 = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|x64.ActiveCfg = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|x64.Build.0 = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|x86.ActiveCfg = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Debug|x86.Build.0 = Debug|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|Any CPU.Build.0 = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|arm64.ActiveCfg = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|arm64.Build.0 = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|x64.ActiveCfg = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|x64.Build.0 = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|x86.ActiveCfg = Release|Any CPU - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F}.Release|x86.Build.0 = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|arm64.Build.0 = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|x64.ActiveCfg = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|x64.Build.0 = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|x86.ActiveCfg = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Debug|x86.Build.0 = Debug|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|Any CPU.Build.0 = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|arm64.ActiveCfg = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|arm64.Build.0 = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|x64.ActiveCfg = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|x64.Build.0 = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|x86.ActiveCfg = Release|Any CPU - {9883418F-C427-426E-9021-E3F1BAF33E6B}.Release|x86.Build.0 = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|arm64.Build.0 = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|x64.ActiveCfg = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|x64.Build.0 = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Debug|x86.Build.0 = Debug|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|Any CPU.Build.0 = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|arm64.ActiveCfg = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|arm64.Build.0 = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|x64.ActiveCfg = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|x64.Build.0 = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|x86.ActiveCfg = Release|Any CPU - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF}.Release|x86.Build.0 = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|arm64.ActiveCfg = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|arm64.Build.0 = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|x64.ActiveCfg = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|x64.Build.0 = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|x86.ActiveCfg = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Debug|x86.Build.0 = Debug|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|Any CPU.Build.0 = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|arm64.ActiveCfg = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|arm64.Build.0 = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|x64.ActiveCfg = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|x64.Build.0 = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|x86.ActiveCfg = Release|Any CPU - {31405D54-645D-490B-9041-88119D8B1B47}.Release|x86.Build.0 = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|arm64.Build.0 = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|x64.ActiveCfg = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|x64.Build.0 = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|x86.ActiveCfg = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Debug|x86.Build.0 = Debug|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|Any CPU.Build.0 = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|arm64.ActiveCfg = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|arm64.Build.0 = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|x64.ActiveCfg = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|x64.Build.0 = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|x86.ActiveCfg = Release|Any CPU - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D}.Release|x86.Build.0 = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|arm64.Build.0 = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|x64.ActiveCfg = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|x64.Build.0 = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|x86.ActiveCfg = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Debug|x86.Build.0 = Debug|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|Any CPU.Build.0 = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|arm64.ActiveCfg = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|arm64.Build.0 = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|x64.ActiveCfg = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|x64.Build.0 = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|x86.ActiveCfg = Release|Any CPU - {10959BB7-197C-4DE1-A2F2-CA9445E3591F}.Release|x86.Build.0 = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|arm64.Build.0 = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|x64.ActiveCfg = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|x64.Build.0 = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|x86.ActiveCfg = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Debug|x86.Build.0 = Debug|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|Any CPU.Build.0 = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|arm64.ActiveCfg = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|arm64.Build.0 = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|x64.ActiveCfg = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|x64.Build.0 = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|x86.ActiveCfg = Release|Any CPU - {3297D10B-B32A-4F70-8200-2B727C759C8D}.Release|x86.Build.0 = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|arm64.Build.0 = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|x64.ActiveCfg = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|x64.Build.0 = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|x86.ActiveCfg = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Debug|x86.Build.0 = Debug|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|Any CPU.Build.0 = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|arm64.ActiveCfg = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|arm64.Build.0 = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|x64.ActiveCfg = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|x64.Build.0 = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|x86.ActiveCfg = Release|Any CPU - {8EAE1C36-4A33-4A96-BACD-3FDC35844249}.Release|x86.Build.0 = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|arm64.Build.0 = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|x64.ActiveCfg = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|x64.Build.0 = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|x86.ActiveCfg = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Debug|x86.Build.0 = Debug|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|Any CPU.Build.0 = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|arm64.ActiveCfg = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|arm64.Build.0 = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|x64.ActiveCfg = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|x64.Build.0 = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|x86.ActiveCfg = Release|Any CPU - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895}.Release|x86.Build.0 = Release|Any CPU - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|Any CPU.ActiveCfg = Debug|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|Any CPU.Build.0 = Debug|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|arm64.ActiveCfg = Debug|x86 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|x64.ActiveCfg = Debug|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|x64.Build.0 = Debug|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|x86.ActiveCfg = Debug|x86 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Debug|x86.Build.0 = Debug|x86 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|Any CPU.ActiveCfg = Release|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|Any CPU.Build.0 = Release|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|arm64.ActiveCfg = Release|x86 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|x64.ActiveCfg = Release|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|x64.Build.0 = Release|x64 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|x86.ActiveCfg = Release|x86 - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0}.Release|x86.Build.0 = Release|x86 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|Any CPU.ActiveCfg = Debug|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|Any CPU.Build.0 = Debug|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|arm64.ActiveCfg = Debug|ARM64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|arm64.Build.0 = Debug|ARM64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|x64.ActiveCfg = Debug|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|x64.Build.0 = Debug|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|x86.ActiveCfg = Debug|x86 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Debug|x86.Build.0 = Debug|x86 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|Any CPU.ActiveCfg = Release|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|Any CPU.Build.0 = Release|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|arm64.ActiveCfg = Release|ARM64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|x64.ActiveCfg = Release|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|x64.Build.0 = Release|x64 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|x86.ActiveCfg = Release|x86 - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887}.Release|x86.Build.0 = Release|x86 - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|arm64.Build.0 = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|x64.ActiveCfg = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|x64.Build.0 = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|x86.ActiveCfg = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Debug|x86.Build.0 = Debug|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|Any CPU.Build.0 = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|arm64.ActiveCfg = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|arm64.Build.0 = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|x64.ActiveCfg = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|x64.Build.0 = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|x86.ActiveCfg = Release|Any CPU - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC}.Release|x86.Build.0 = Release|Any CPU - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|Any CPU.ActiveCfg = Debug|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|Any CPU.Build.0 = Debug|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|arm64.ActiveCfg = Debug|x86 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|x64.ActiveCfg = Debug|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|x64.Build.0 = Debug|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|x86.ActiveCfg = Debug|x86 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Debug|x86.Build.0 = Debug|x86 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|Any CPU.ActiveCfg = Release|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|Any CPU.Build.0 = Release|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|arm64.ActiveCfg = Release|x86 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|x64.ActiveCfg = Release|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|x64.Build.0 = Release|x64 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|x86.ActiveCfg = Release|x86 - {8A6992D5-478C-49E4-936F-EA97E5850A7D}.Release|x86.Build.0 = Release|x86 - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|arm64.Build.0 = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|x64.ActiveCfg = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|x64.Build.0 = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|x86.ActiveCfg = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Debug|x86.Build.0 = Debug|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|Any CPU.Build.0 = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|arm64.ActiveCfg = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|arm64.Build.0 = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|x64.ActiveCfg = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|x64.Build.0 = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|x86.ActiveCfg = Release|Any CPU - {7107FC61-E540-4946-A090-A0E0D8357505}.Release|x86.Build.0 = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|arm64.Build.0 = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|x64.ActiveCfg = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|x64.Build.0 = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|x86.ActiveCfg = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Debug|x86.Build.0 = Debug|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|Any CPU.Build.0 = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|arm64.ActiveCfg = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|arm64.Build.0 = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|x64.ActiveCfg = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|x64.Build.0 = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|x86.ActiveCfg = Release|Any CPU - {514D41F9-8D97-49A6-8C7A-74545358E2CD}.Release|x86.Build.0 = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|arm64.Build.0 = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|x64.ActiveCfg = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|x64.Build.0 = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|x86.ActiveCfg = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Debug|x86.Build.0 = Debug|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|Any CPU.Build.0 = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|arm64.ActiveCfg = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|arm64.Build.0 = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|x64.ActiveCfg = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|x64.Build.0 = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|x86.ActiveCfg = Release|Any CPU - {F8AB0D33-1082-4F41-90E7-77C06EDD983D}.Release|x86.Build.0 = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|arm64.Build.0 = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|x64.ActiveCfg = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|x64.Build.0 = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|x86.ActiveCfg = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Debug|x86.Build.0 = Debug|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|arm64.ActiveCfg = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|arm64.Build.0 = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|x64.ActiveCfg = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|x86.ActiveCfg = Release|Any CPU - {647F0202-165F-4E98-A798-B2B3113050EC}.Release|x86.Build.0 = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|arm64.Build.0 = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|x64.ActiveCfg = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|x64.Build.0 = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|x86.ActiveCfg = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Debug|x86.Build.0 = Debug|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|Any CPU.Build.0 = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|arm64.ActiveCfg = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|arm64.Build.0 = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|x64.ActiveCfg = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|x64.Build.0 = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|x86.ActiveCfg = Release|Any CPU - {0C3C1602-BE06-4DDE-835F-A0DE1563808B}.Release|x86.Build.0 = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|arm64.Build.0 = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|x64.ActiveCfg = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|x64.Build.0 = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|x86.ActiveCfg = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Debug|x86.Build.0 = Debug|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|Any CPU.Build.0 = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|arm64.ActiveCfg = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|arm64.Build.0 = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|x64.ActiveCfg = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|x64.Build.0 = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|x86.ActiveCfg = Release|Any CPU - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF}.Release|x86.Build.0 = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|arm64.ActiveCfg = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|arm64.Build.0 = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|x64.ActiveCfg = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|x64.Build.0 = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|x86.ActiveCfg = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Debug|x86.Build.0 = Debug|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|Any CPU.Build.0 = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|arm64.ActiveCfg = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|arm64.Build.0 = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|x64.ActiveCfg = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|x64.Build.0 = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|x86.ActiveCfg = Release|Any CPU - {51A02E3E-6932-479C-A287-CC6C3611B715}.Release|x86.Build.0 = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|arm64.Build.0 = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|x64.ActiveCfg = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|x64.Build.0 = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|x86.ActiveCfg = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Debug|x86.Build.0 = Debug|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|Any CPU.Build.0 = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|arm64.ActiveCfg = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|arm64.Build.0 = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|x64.ActiveCfg = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|x64.Build.0 = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|x86.ActiveCfg = Release|Any CPU - {7542D11F-2401-457C-992B-0473ADBD7842}.Release|x86.Build.0 = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|arm64.Build.0 = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|x64.ActiveCfg = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|x64.Build.0 = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|x86.ActiveCfg = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Debug|x86.Build.0 = Debug|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|Any CPU.Build.0 = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|arm64.ActiveCfg = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|arm64.Build.0 = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|x64.ActiveCfg = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|x64.Build.0 = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|x86.ActiveCfg = Release|Any CPU - {ADFCDE19-5A3D-482D-8133-B7F419D96668}.Release|x86.Build.0 = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|arm64.Build.0 = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|x64.ActiveCfg = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|x64.Build.0 = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Debug|x86.Build.0 = Debug|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|Any CPU.Build.0 = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|arm64.ActiveCfg = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|arm64.Build.0 = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|x64.ActiveCfg = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|x64.Build.0 = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|x86.ActiveCfg = Release|Any CPU - {B43F63FE-0957-42A1-8431-B2D6E4F2958E}.Release|x86.Build.0 = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|arm64.Build.0 = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|x64.ActiveCfg = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|x64.Build.0 = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|x86.ActiveCfg = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Debug|x86.Build.0 = Debug|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|Any CPU.Build.0 = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|arm64.ActiveCfg = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|arm64.Build.0 = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|x64.ActiveCfg = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|x64.Build.0 = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|x86.ActiveCfg = Release|Any CPU - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2}.Release|x86.Build.0 = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|arm64.Build.0 = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|x64.Build.0 = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Debug|x86.Build.0 = Debug|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|Any CPU.Build.0 = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|arm64.ActiveCfg = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|arm64.Build.0 = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|x64.ActiveCfg = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|x64.Build.0 = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|x86.ActiveCfg = Release|Any CPU - {73788491-F1D6-41C7-838B-F9E8060E7FB9}.Release|x86.Build.0 = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|arm64.Build.0 = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|x64.ActiveCfg = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|x64.Build.0 = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|x86.ActiveCfg = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Debug|x86.Build.0 = Debug|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|Any CPU.Build.0 = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|arm64.ActiveCfg = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|arm64.Build.0 = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|x64.ActiveCfg = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|x64.Build.0 = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|x86.ActiveCfg = Release|Any CPU - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05}.Release|x86.Build.0 = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|arm64.Build.0 = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|x64.ActiveCfg = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|x64.Build.0 = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Debug|x86.Build.0 = Debug|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|Any CPU.Build.0 = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|arm64.ActiveCfg = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|arm64.Build.0 = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|x64.ActiveCfg = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|x64.Build.0 = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|x86.ActiveCfg = Release|Any CPU - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753}.Release|x86.Build.0 = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|arm64.Build.0 = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|x64.ActiveCfg = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|x64.Build.0 = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|x86.ActiveCfg = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Debug|x86.Build.0 = Debug|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|Any CPU.Build.0 = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|arm64.ActiveCfg = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|arm64.Build.0 = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|x64.ActiveCfg = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|x64.Build.0 = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|x86.ActiveCfg = Release|Any CPU - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF}.Release|x86.Build.0 = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|arm64.Build.0 = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|x64.ActiveCfg = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|x64.Build.0 = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|x86.ActiveCfg = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Debug|x86.Build.0 = Debug|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|Any CPU.Build.0 = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|arm64.ActiveCfg = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|arm64.Build.0 = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|x64.ActiveCfg = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|x64.Build.0 = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|x86.ActiveCfg = Release|Any CPU - {71568623-71F9-4110-ACE2-093CD0DA911C}.Release|x86.Build.0 = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|arm64.Build.0 = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|x64.ActiveCfg = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|x64.Build.0 = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|x86.ActiveCfg = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Debug|x86.Build.0 = Debug|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|Any CPU.Build.0 = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|arm64.ActiveCfg = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|arm64.Build.0 = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|x64.ActiveCfg = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|x64.Build.0 = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|x86.ActiveCfg = Release|Any CPU - {EDE77D0C-321A-49FD-95D7-56ED41242A93}.Release|x86.Build.0 = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|arm64.Build.0 = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|x64.ActiveCfg = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|x64.Build.0 = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|x86.ActiveCfg = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Debug|x86.Build.0 = Debug|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|Any CPU.Build.0 = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|arm64.ActiveCfg = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|arm64.Build.0 = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|x64.ActiveCfg = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|x64.Build.0 = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|x86.ActiveCfg = Release|Any CPU - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D}.Release|x86.Build.0 = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|arm64.Build.0 = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|x64.ActiveCfg = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|x64.Build.0 = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|x86.ActiveCfg = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Debug|x86.Build.0 = Debug|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|Any CPU.Build.0 = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|arm64.ActiveCfg = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|arm64.Build.0 = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|x64.ActiveCfg = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|x64.Build.0 = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|x86.ActiveCfg = Release|Any CPU - {132D43A2-067A-4E24-A520-45B9F14DCB8E}.Release|x86.Build.0 = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|arm64.Build.0 = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|x64.ActiveCfg = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|x64.Build.0 = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|x86.ActiveCfg = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Debug|x86.Build.0 = Debug|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|Any CPU.Build.0 = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|arm64.ActiveCfg = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|arm64.Build.0 = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|x64.ActiveCfg = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|x64.Build.0 = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|x86.ActiveCfg = Release|Any CPU - {2EC4E939-513F-44CD-A956-498966EAC929}.Release|x86.Build.0 = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|arm64.Build.0 = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|x64.ActiveCfg = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|x64.Build.0 = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|x86.ActiveCfg = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Debug|x86.Build.0 = Debug|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|Any CPU.Build.0 = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|arm64.ActiveCfg = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|arm64.Build.0 = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|x64.ActiveCfg = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|x64.Build.0 = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|x86.ActiveCfg = Release|Any CPU - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A}.Release|x86.Build.0 = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|arm64.Build.0 = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|x64.ActiveCfg = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|x64.Build.0 = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|x86.ActiveCfg = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Debug|x86.Build.0 = Debug|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|Any CPU.Build.0 = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|arm64.ActiveCfg = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|arm64.Build.0 = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|x64.ActiveCfg = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|x64.Build.0 = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|x86.ActiveCfg = Release|Any CPU - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2}.Release|x86.Build.0 = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|arm64.Build.0 = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.ActiveCfg = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x64.Build.0 = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.ActiveCfg = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Debug|x86.Build.0 = Debug|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|Any CPU.Build.0 = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|arm64.ActiveCfg = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|arm64.Build.0 = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.ActiveCfg = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x64.Build.0 = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.ActiveCfg = Release|Any CPU - {46FB7E93-1294-4068-B80A-D4864F78277A}.Release|x86.Build.0 = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|arm64.ActiveCfg = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|arm64.Build.0 = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.ActiveCfg = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x64.Build.0 = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.ActiveCfg = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Debug|x86.Build.0 = Debug|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|Any CPU.Build.0 = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|arm64.ActiveCfg = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|arm64.Build.0 = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.ActiveCfg = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x64.Build.0 = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.ActiveCfg = Release|Any CPU - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16}.Release|x86.Build.0 = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|arm64.Build.0 = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.ActiveCfg = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x64.Build.0 = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.ActiveCfg = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Debug|x86.Build.0 = Debug|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|Any CPU.Build.0 = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|arm64.ActiveCfg = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|arm64.Build.0 = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.ActiveCfg = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x64.Build.0 = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.ActiveCfg = Release|Any CPU - {19974360-4A63-425A-94DB-C2C940A3A97A}.Release|x86.Build.0 = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|arm64.ActiveCfg = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|arm64.Build.0 = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.ActiveCfg = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x64.Build.0 = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.ActiveCfg = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Debug|x86.Build.0 = Debug|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|Any CPU.Build.0 = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|arm64.ActiveCfg = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|arm64.Build.0 = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.ActiveCfg = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x64.Build.0 = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.ActiveCfg = Release|Any CPU - {ADF9C126-F322-4E34-AFD3-E626A4487206}.Release|x86.Build.0 = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|arm64.Build.0 = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x64.Build.0 = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Debug|x86.Build.0 = Debug|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|Any CPU.Build.0 = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|arm64.ActiveCfg = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|arm64.Build.0 = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.ActiveCfg = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x64.Build.0 = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.ActiveCfg = Release|Any CPU - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31}.Release|x86.Build.0 = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|arm64.Build.0 = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x64.Build.0 = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Debug|x86.Build.0 = Debug|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|Any CPU.Build.0 = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|arm64.ActiveCfg = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|arm64.Build.0 = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.ActiveCfg = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x64.Build.0 = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.ActiveCfg = Release|Any CPU - {8A59AF88-4A82-46ED-977D-D909001F8107}.Release|x86.Build.0 = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|arm64.Build.0 = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x64.ActiveCfg = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x64.Build.0 = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Debug|x86.Build.0 = Debug|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|Any CPU.Build.0 = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|arm64.ActiveCfg = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|arm64.Build.0 = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x64.ActiveCfg = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x64.Build.0 = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.ActiveCfg = Release|Any CPU - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD}.Release|x86.Build.0 = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|arm64.Build.0 = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.ActiveCfg = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x64.Build.0 = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.ActiveCfg = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Debug|x86.Build.0 = Debug|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|Any CPU.Build.0 = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|arm64.ActiveCfg = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|arm64.Build.0 = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.ActiveCfg = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x64.Build.0 = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.ActiveCfg = Release|Any CPU - {C3A0F425-669F-46A8-893F-CF449A6DAE56}.Release|x86.Build.0 = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|arm64.ActiveCfg = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|arm64.Build.0 = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.ActiveCfg = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x64.Build.0 = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.ActiveCfg = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Debug|x86.Build.0 = Debug|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|Any CPU.Build.0 = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|arm64.ActiveCfg = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|arm64.Build.0 = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.ActiveCfg = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|x64.Build.0 = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.ActiveCfg = Release|Any CPU - {19189670-E206-471D-94F8-7D3D545E5020}.Release|x86.Build.0 = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|arm64.Build.0 = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.ActiveCfg = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x64.Build.0 = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.ActiveCfg = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Debug|x86.Build.0 = Debug|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|Any CPU.Build.0 = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|arm64.ActiveCfg = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|arm64.Build.0 = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.ActiveCfg = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x64.Build.0 = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.ActiveCfg = Release|Any CPU - {E9408723-E6A9-4715-B906-3B25B0238ABA}.Release|x86.Build.0 = Release|Any CPU - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|Any CPU.ActiveCfg = Debug|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|Any CPU.Build.0 = Debug|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|arm64.ActiveCfg = Debug|x86 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|x64.ActiveCfg = Debug|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|x64.Build.0 = Debug|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|x86.ActiveCfg = Debug|x86 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Debug|x86.Build.0 = Debug|x86 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|Any CPU.ActiveCfg = Release|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|Any CPU.Build.0 = Release|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|arm64.ActiveCfg = Release|x86 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|x64.ActiveCfg = Release|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|x64.Build.0 = Release|x64 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|x86.ActiveCfg = Release|x86 - {8DA61885-B95E-4BA1-A752-C79B6597FC44}.Release|x86.Build.0 = Release|x86 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|Any CPU.ActiveCfg = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|Any CPU.Build.0 = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|arm64.ActiveCfg = Debug|ARM64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|arm64.Build.0 = Debug|ARM64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.ActiveCfg = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.Build.0 = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.Build.0 = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.Deploy.0 = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|Any CPU.ActiveCfg = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|Any CPU.Build.0 = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|arm64.ActiveCfg = Release|ARM64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|arm64.Build.0 = Release|ARM64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.ActiveCfg = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.Build.0 = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.Build.0 = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.Deploy.0 = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|Any CPU.ActiveCfg = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|Any CPU.Build.0 = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|arm64.ActiveCfg = Debug|ARM64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|arm64.Build.0 = Debug|ARM64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.ActiveCfg = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.Build.0 = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.Build.0 = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.Deploy.0 = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|Any CPU.ActiveCfg = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|Any CPU.Build.0 = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|arm64.ActiveCfg = Release|Any CPU - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|arm64.Build.0 = Release|Any CPU - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.ActiveCfg = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.Build.0 = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.Build.0 = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.Deploy.0 = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|Any CPU.Build.0 = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|arm64.ActiveCfg = Debug|ARM64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|arm64.Build.0 = Debug|ARM64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.ActiveCfg = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x64.Build.0 = Debug|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.ActiveCfg = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.Build.0 = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Debug|x86.Deploy.0 = Debug|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|Any CPU.ActiveCfg = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|Any CPU.Build.0 = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|arm64.ActiveCfg = Release|ARM64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|arm64.Build.0 = Release|ARM64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.ActiveCfg = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x64.Build.0 = Release|x64 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.ActiveCfg = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.Build.0 = Release|Win32 - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1}.Release|x86.Deploy.0 = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|Any CPU.ActiveCfg = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|Any CPU.Build.0 = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|arm64.ActiveCfg = Debug|ARM64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|arm64.Build.0 = Debug|ARM64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.ActiveCfg = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x64.Build.0 = Debug|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.ActiveCfg = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.Build.0 = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Debug|x86.Deploy.0 = Debug|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|Any CPU.ActiveCfg = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|Any CPU.Build.0 = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|arm64.ActiveCfg = Release|ARM64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|arm64.Build.0 = Release|ARM64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.ActiveCfg = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x64.Build.0 = Release|x64 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.ActiveCfg = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.Build.0 = Release|Win32 - {CAC1267B-8778-4257-AAC6-CAF481723B01}.Release|x86.Deploy.0 = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|Any CPU.ActiveCfg = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|Any CPU.Build.0 = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|arm64.ActiveCfg = Debug|ARM64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|arm64.Build.0 = Debug|ARM64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.ActiveCfg = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.Build.0 = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.Build.0 = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.Deploy.0 = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|Any CPU.ActiveCfg = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|Any CPU.Build.0 = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|arm64.ActiveCfg = Release|Any CPU - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|arm64.Build.0 = Release|Any CPU - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.ActiveCfg = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.Build.0 = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Build.0 = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Deploy.0 = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|Any CPU.ActiveCfg = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|Any CPU.Build.0 = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|arm64.ActiveCfg = Debug|ARM64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|arm64.Build.0 = Debug|ARM64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.ActiveCfg = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.Build.0 = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.Build.0 = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.Deploy.0 = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|Any CPU.ActiveCfg = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|Any CPU.Build.0 = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|arm64.ActiveCfg = Release|Any CPU - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|arm64.Build.0 = Release|Any CPU - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.ActiveCfg = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.Build.0 = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.Build.0 = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.Deploy.0 = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|Any CPU.ActiveCfg = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|Any CPU.Build.0 = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|arm64.ActiveCfg = Debug|ARM64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|arm64.Build.0 = Debug|ARM64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.ActiveCfg = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x64.Build.0 = Debug|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.ActiveCfg = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.Build.0 = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Debug|x86.Deploy.0 = Debug|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|Any CPU.ActiveCfg = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|Any CPU.Build.0 = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|arm64.ActiveCfg = Release|Any CPU - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|arm64.Build.0 = Release|Any CPU - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.ActiveCfg = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x64.Build.0 = Release|x64 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.ActiveCfg = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.Build.0 = Release|Win32 - {7F87406C-A3C8-4139-A68D-E4C344294A67}.Release|x86.Deploy.0 = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|Any CPU.Build.0 = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|arm64.ActiveCfg = Debug|ARM64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|arm64.Build.0 = Debug|ARM64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.ActiveCfg = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x64.Build.0 = Debug|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.ActiveCfg = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.Build.0 = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Debug|x86.Deploy.0 = Debug|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|Any CPU.ActiveCfg = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|Any CPU.Build.0 = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|arm64.ActiveCfg = Release|Any CPU - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|arm64.Build.0 = Release|Any CPU - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.ActiveCfg = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x64.Build.0 = Release|x64 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.ActiveCfg = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Build.0 = Release|Win32 - {1533E271-F61B-441B-8B74-59FB61DF0552}.Release|x86.Deploy.0 = Release|Win32 - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|arm64.Build.0 = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|x64.ActiveCfg = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|x64.Build.0 = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|x86.ActiveCfg = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Debug|x86.Build.0 = Debug|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|Any CPU.Build.0 = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|arm64.ActiveCfg = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|arm64.Build.0 = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|x64.ActiveCfg = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|x64.Build.0 = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|x86.ActiveCfg = Release|Any CPU - {7E268085-1046-4362-80CB-2977FF826DCA}.Release|x86.Build.0 = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|arm64.Build.0 = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|x64.ActiveCfg = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|x64.Build.0 = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|x86.ActiveCfg = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Debug|x86.Build.0 = Debug|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|Any CPU.Build.0 = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|arm64.ActiveCfg = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|arm64.Build.0 = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|x64.ActiveCfg = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|x64.Build.0 = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|x86.ActiveCfg = Release|Any CPU - {9788C76F-658B-4441-88F8-22C6B86FAD27}.Release|x86.Build.0 = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|arm64.Build.0 = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|x64.ActiveCfg = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|x64.Build.0 = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|x86.ActiveCfg = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Debug|x86.Build.0 = Debug|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|Any CPU.Build.0 = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|arm64.ActiveCfg = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|arm64.Build.0 = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|x64.ActiveCfg = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|x64.Build.0 = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|x86.ActiveCfg = Release|Any CPU - {1970D5CD-D9A4-4673-A297-179BB04199F4}.Release|x86.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|arm64.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|x64.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|x64.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|x86.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Debug|x86.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|Any CPU.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|arm64.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|arm64.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|x64.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|x64.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|x86.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070309}.Release|x86.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|arm64.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|x64.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|x64.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|x86.ActiveCfg = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Debug|x86.Build.0 = Debug|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|Any CPU.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|arm64.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|arm64.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|x64.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|x64.Build.0 = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|x86.ActiveCfg = Release|Any CPU - {A40350FE-4334-4007-B1C3-6BEB1B070308}.Release|x86.Build.0 = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|arm64.Build.0 = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|x64.ActiveCfg = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|x64.Build.0 = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|x86.ActiveCfg = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Debug|x86.Build.0 = Debug|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|Any CPU.Build.0 = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|arm64.ActiveCfg = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|arm64.Build.0 = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|x64.ActiveCfg = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|x64.Build.0 = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|x86.ActiveCfg = Release|Any CPU - {F1792637-28B9-4F2A-B318-FA923C365049}.Release|x86.Build.0 = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|arm64.Build.0 = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|x64.ActiveCfg = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|x64.Build.0 = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|x86.ActiveCfg = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Debug|x86.Build.0 = Debug|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|Any CPU.Build.0 = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|arm64.ActiveCfg = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|arm64.Build.0 = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|x64.ActiveCfg = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|x64.Build.0 = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|x86.ActiveCfg = Release|Any CPU - {B06040BC-DA28-4923-8CAC-20EB517D471B}.Release|x86.Build.0 = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|arm64.ActiveCfg = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|arm64.Build.0 = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|x64.ActiveCfg = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|x64.Build.0 = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|x86.ActiveCfg = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Debug|x86.Build.0 = Debug|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|Any CPU.Build.0 = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|arm64.ActiveCfg = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|arm64.Build.0 = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|x64.ActiveCfg = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|x64.Build.0 = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|x86.ActiveCfg = Release|Any CPU - {55CACC1F-FE96-47C8-8073-91F4CAA55C75}.Release|x86.Build.0 = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|arm64.Build.0 = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|x64.ActiveCfg = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|x64.Build.0 = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|x86.ActiveCfg = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Debug|x86.Build.0 = Debug|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|Any CPU.Build.0 = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|arm64.ActiveCfg = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|arm64.Build.0 = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|x64.ActiveCfg = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|x64.Build.0 = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|x86.ActiveCfg = Release|Any CPU - {7509AA1E-3093-4BEE-984F-E11579E98A11}.Release|x86.Build.0 = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|arm64.Build.0 = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|x64.ActiveCfg = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|x64.Build.0 = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|x86.ActiveCfg = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Debug|x86.Build.0 = Debug|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|Any CPU.Build.0 = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|arm64.ActiveCfg = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|arm64.Build.0 = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x64.ActiveCfg = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x64.Build.0 = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x86.ActiveCfg = Release|Any CPU - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x86.Build.0 = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|Any CPU.Build.0 = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|arm64.ActiveCfg = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|arm64.Build.0 = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x64.ActiveCfg = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x64.Build.0 = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x86.ActiveCfg = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x86.Build.0 = Debug|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|Any CPU.ActiveCfg = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|Any CPU.Build.0 = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|arm64.ActiveCfg = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|arm64.Build.0 = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x64.ActiveCfg = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x64.Build.0 = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x86.ActiveCfg = Release|Any CPU - {498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x86.Build.0 = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|arm64.Build.0 = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x64.ActiveCfg = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x64.Build.0 = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x86.Build.0 = Debug|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|Any CPU.Build.0 = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|arm64.ActiveCfg = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|arm64.Build.0 = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x64.ActiveCfg = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x64.Build.0 = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x86.ActiveCfg = Release|Any CPU - {B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x86.Build.0 = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|arm64.Build.0 = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x64.ActiveCfg = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x64.Build.0 = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x86.ActiveCfg = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x86.Build.0 = Debug|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|Any CPU.Build.0 = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|arm64.ActiveCfg = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|arm64.Build.0 = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|x64.ActiveCfg = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|x64.Build.0 = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|x86.ActiveCfg = Release|Any CPU - {37329855-01B8-4B03-9765-1A941B06E43C}.Release|x86.Build.0 = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|arm64.Build.0 = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x64.ActiveCfg = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x64.Build.0 = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x86.ActiveCfg = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x86.Build.0 = Debug|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|Any CPU.Build.0 = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|arm64.ActiveCfg = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|arm64.Build.0 = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x64.ActiveCfg = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x64.Build.0 = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x86.ActiveCfg = Release|Any CPU - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x86.Build.0 = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|arm64.Build.0 = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x64.ActiveCfg = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x64.Build.0 = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x86.ActiveCfg = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x86.Build.0 = Debug|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|Any CPU.Build.0 = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|arm64.ActiveCfg = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|arm64.Build.0 = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x64.ActiveCfg = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x64.Build.0 = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x86.ActiveCfg = Release|Any CPU - {B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x86.Build.0 = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|arm64.Build.0 = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|x64.Build.0 = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Debug|x86.Build.0 = Debug|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|Any CPU.Build.0 = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|arm64.ActiveCfg = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|arm64.Build.0 = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x64.ActiveCfg = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x64.Build.0 = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x86.ActiveCfg = Release|Any CPU - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1}.Release|x86.Build.0 = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|arm64.Build.0 = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|x64.ActiveCfg = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|x64.Build.0 = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|x86.ActiveCfg = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Debug|x86.Build.0 = Debug|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|Any CPU.Build.0 = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|arm64.ActiveCfg = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|arm64.Build.0 = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x64.ActiveCfg = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x64.Build.0 = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x86.ActiveCfg = Release|Any CPU - {010A9638-F20E-4FE6-A186-85732BFC9CB0}.Release|x86.Build.0 = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|arm64.ActiveCfg = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|arm64.Build.0 = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.ActiveCfg = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x64.Build.0 = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.ActiveCfg = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Debug|x86.Build.0 = Debug|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.ActiveCfg = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|Any CPU.Build.0 = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|arm64.ActiveCfg = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|arm64.Build.0 = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.ActiveCfg = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x64.Build.0 = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.ActiveCfg = Release|Any CPU - {04CFE286-6D32-41EF-8887-4B5F8086A365}.Release|x86.Build.0 = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|arm64.Build.0 = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|x64.ActiveCfg = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|x64.Build.0 = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|x86.ActiveCfg = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Debug|x86.Build.0 = Debug|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|Any CPU.Build.0 = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|arm64.ActiveCfg = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|arm64.Build.0 = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|x64.ActiveCfg = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|x64.Build.0 = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|x86.ActiveCfg = Release|Any CPU - {FEF97646-9BC9-4D1B-A939-784D915C18A4}.Release|x86.Build.0 = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|arm64.Build.0 = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|x64.ActiveCfg = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|x64.Build.0 = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|x86.ActiveCfg = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Debug|x86.Build.0 = Debug|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|Any CPU.Build.0 = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|arm64.ActiveCfg = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|arm64.Build.0 = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|x64.ActiveCfg = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|x64.Build.0 = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|x86.ActiveCfg = Release|Any CPU - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B}.Release|x86.Build.0 = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|arm64.Build.0 = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|x64.ActiveCfg = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|x64.Build.0 = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|x86.ActiveCfg = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Debug|x86.Build.0 = Debug|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|Any CPU.Build.0 = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|arm64.ActiveCfg = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|arm64.Build.0 = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|x64.ActiveCfg = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|x64.Build.0 = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|x86.ActiveCfg = Release|Any CPU - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8}.Release|x86.Build.0 = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|arm64.ActiveCfg = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|arm64.Build.0 = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|x64.ActiveCfg = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|x64.Build.0 = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|x86.ActiveCfg = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Debug|x86.Build.0 = Debug|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|Any CPU.Build.0 = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|arm64.ActiveCfg = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|arm64.Build.0 = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|x64.ActiveCfg = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|x64.Build.0 = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|x86.ActiveCfg = Release|Any CPU - {16B899B4-A4F4-4EF7-93BB-355861977A12}.Release|x86.Build.0 = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|arm64.Build.0 = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|x64.ActiveCfg = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|x64.Build.0 = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|x86.ActiveCfg = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Debug|x86.Build.0 = Debug|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|Any CPU.Build.0 = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|arm64.ActiveCfg = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|arm64.Build.0 = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|x64.ActiveCfg = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|x64.Build.0 = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|x86.ActiveCfg = Release|Any CPU - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC}.Release|x86.Build.0 = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|arm64.Build.0 = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|x64.ActiveCfg = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|x64.Build.0 = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|x86.ActiveCfg = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Debug|x86.Build.0 = Debug|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|Any CPU.Build.0 = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|arm64.ActiveCfg = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|arm64.Build.0 = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x64.ActiveCfg = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x64.Build.0 = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x86.ActiveCfg = Release|Any CPU - {43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x86.Build.0 = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|arm64.Build.0 = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|x64.ActiveCfg = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|x64.Build.0 = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|x86.ActiveCfg = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Debug|x86.Build.0 = Debug|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|Any CPU.Build.0 = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|arm64.ActiveCfg = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|arm64.Build.0 = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|x64.ActiveCfg = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|x64.Build.0 = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|x86.ActiveCfg = Release|Any CPU - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C}.Release|x86.Build.0 = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|arm64.Build.0 = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|x64.ActiveCfg = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|x64.Build.0 = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|x86.ActiveCfg = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Debug|x86.Build.0 = Debug|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|Any CPU.Build.0 = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|arm64.ActiveCfg = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|arm64.Build.0 = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|x64.ActiveCfg = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|x64.Build.0 = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|x86.ActiveCfg = Release|Any CPU - {0EBEE047-CBAD-4A69-8095-E3961B863446}.Release|x86.Build.0 = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|arm64.Build.0 = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|x64.ActiveCfg = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|x64.Build.0 = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|x86.ActiveCfg = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Debug|x86.Build.0 = Debug|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|Any CPU.Build.0 = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|arm64.ActiveCfg = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|arm64.Build.0 = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|x64.ActiveCfg = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|x64.Build.0 = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|x86.ActiveCfg = Release|Any CPU - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB}.Release|x86.Build.0 = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|arm64.Build.0 = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x64.ActiveCfg = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x64.Build.0 = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x86.ActiveCfg = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x86.Build.0 = Debug|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|Any CPU.Build.0 = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|arm64.ActiveCfg = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|arm64.Build.0 = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x64.ActiveCfg = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x64.Build.0 = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x86.ActiveCfg = Release|Any CPU - {563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x86.Build.0 = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|arm64.Build.0 = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x64.ActiveCfg = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x64.Build.0 = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x86.ActiveCfg = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x86.Build.0 = Debug|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|Any CPU.Build.0 = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|arm64.ActiveCfg = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|arm64.Build.0 = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x64.ActiveCfg = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x64.Build.0 = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x86.ActiveCfg = Release|Any CPU - {DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x86.Build.0 = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|arm64.Build.0 = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x64.ActiveCfg = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x64.Build.0 = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x86.ActiveCfg = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x86.Build.0 = Debug|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|Any CPU.Build.0 = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|arm64.ActiveCfg = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|arm64.Build.0 = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x64.ActiveCfg = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x64.Build.0 = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x86.ActiveCfg = Release|Any CPU - {F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x86.Build.0 = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|arm64.Build.0 = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x64.ActiveCfg = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x64.Build.0 = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x86.ActiveCfg = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x86.Build.0 = Debug|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|Any CPU.Build.0 = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|arm64.ActiveCfg = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|arm64.Build.0 = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x64.ActiveCfg = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x64.Build.0 = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x86.ActiveCfg = Release|Any CPU - {4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x86.Build.0 = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|arm64.Build.0 = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x64.ActiveCfg = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x64.Build.0 = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x86.ActiveCfg = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x86.Build.0 = Debug|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|Any CPU.Build.0 = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|arm64.ActiveCfg = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|arm64.Build.0 = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x64.ActiveCfg = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x64.Build.0 = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x86.ActiveCfg = Release|Any CPU - {545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x86.Build.0 = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|arm64.Build.0 = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x64.ActiveCfg = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x64.Build.0 = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x86.ActiveCfg = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x86.Build.0 = Debug|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|Any CPU.Build.0 = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|arm64.ActiveCfg = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|arm64.Build.0 = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x64.ActiveCfg = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x64.Build.0 = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.ActiveCfg = Release|Any CPU - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.Build.0 = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|arm64.Build.0 = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x64.ActiveCfg = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x64.Build.0 = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x86.ActiveCfg = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Debug|x86.Build.0 = Debug|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|Any CPU.Build.0 = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|arm64.ActiveCfg = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|arm64.Build.0 = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x64.ActiveCfg = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x64.Build.0 = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x86.ActiveCfg = Release|Any CPU - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8}.Release|x86.Build.0 = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|arm64.Build.0 = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|x64.ActiveCfg = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|x64.Build.0 = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|x86.ActiveCfg = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Debug|x86.Build.0 = Debug|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|Any CPU.Build.0 = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|arm64.ActiveCfg = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|arm64.Build.0 = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|x64.ActiveCfg = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|x64.Build.0 = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|x86.ActiveCfg = Release|Any CPU - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404}.Release|x86.Build.0 = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|arm64.ActiveCfg = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|arm64.Build.0 = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|x64.ActiveCfg = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|x64.Build.0 = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|x86.ActiveCfg = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Debug|x86.Build.0 = Debug|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|Any CPU.Build.0 = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|arm64.ActiveCfg = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|arm64.Build.0 = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|x64.ActiveCfg = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|x64.Build.0 = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|x86.ActiveCfg = Release|Any CPU - {399EF81E-C3B5-4D86-8BF1-DC7926252A63}.Release|x86.Build.0 = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|arm64.Build.0 = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|x64.ActiveCfg = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|x64.Build.0 = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|x86.ActiveCfg = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Debug|x86.Build.0 = Debug|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|Any CPU.Build.0 = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|arm64.ActiveCfg = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|arm64.Build.0 = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|x64.ActiveCfg = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|x64.Build.0 = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|x86.ActiveCfg = Release|Any CPU - {4FB95E16-918B-49C1-9F65-49D07CDE072C}.Release|x86.Build.0 = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|arm64.Build.0 = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|x64.ActiveCfg = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|x64.Build.0 = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|x86.ActiveCfg = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Debug|x86.Build.0 = Debug|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|Any CPU.Build.0 = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|arm64.ActiveCfg = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|arm64.Build.0 = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|x64.ActiveCfg = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|x64.Build.0 = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|x86.ActiveCfg = Release|Any CPU - {8001580F-B702-404B-A0FD-13538DDB9672}.Release|x86.Build.0 = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|arm64.Build.0 = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|x64.ActiveCfg = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|x64.Build.0 = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|x86.ActiveCfg = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Debug|x86.Build.0 = Debug|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|Any CPU.Build.0 = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|arm64.ActiveCfg = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|arm64.Build.0 = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|x64.ActiveCfg = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|x64.Build.0 = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|x86.ActiveCfg = Release|Any CPU - {A19F94D3-0C6A-429D-811A-7A750AAD122A}.Release|x86.Build.0 = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|arm64.Build.0 = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|x64.ActiveCfg = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|x64.Build.0 = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|x86.ActiveCfg = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Debug|x86.Build.0 = Debug|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|Any CPU.Build.0 = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|arm64.ActiveCfg = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|arm64.Build.0 = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|x64.ActiveCfg = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|x64.Build.0 = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|x86.ActiveCfg = Release|Any CPU - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7}.Release|x86.Build.0 = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|arm64.Build.0 = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|x64.ActiveCfg = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|x64.Build.0 = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|x86.ActiveCfg = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Debug|x86.Build.0 = Debug|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|Any CPU.Build.0 = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|arm64.ActiveCfg = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|arm64.Build.0 = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|x64.ActiveCfg = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|x64.Build.0 = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|x86.ActiveCfg = Release|Any CPU - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D}.Release|x86.Build.0 = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|arm64.Build.0 = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|x64.ActiveCfg = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|x64.Build.0 = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|x86.ActiveCfg = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Debug|x86.Build.0 = Debug|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|Any CPU.Build.0 = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|arm64.ActiveCfg = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|arm64.Build.0 = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|x64.ActiveCfg = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|x64.Build.0 = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|x86.ActiveCfg = Release|Any CPU - {14DBB385-A1B1-49B2-A737-4DF90E127E5A}.Release|x86.Build.0 = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|arm64.Build.0 = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|x64.ActiveCfg = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|x64.Build.0 = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|x86.ActiveCfg = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Debug|x86.Build.0 = Debug|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|Any CPU.Build.0 = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|arm64.ActiveCfg = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|arm64.Build.0 = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|x64.ActiveCfg = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|x64.Build.0 = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|x86.ActiveCfg = Release|Any CPU - {5FD94164-7D13-4618-93AD-7346B0EA0CDD}.Release|x86.Build.0 = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|arm64.Build.0 = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|x64.ActiveCfg = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|x64.Build.0 = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Debug|x86.Build.0 = Debug|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|Any CPU.Build.0 = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|arm64.ActiveCfg = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|arm64.Build.0 = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|x64.ActiveCfg = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|x64.Build.0 = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|x86.ActiveCfg = Release|Any CPU - {5C50FA92-5488-4470-B42E-48EFEBA51D5A}.Release|x86.Build.0 = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|arm64.Build.0 = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|x64.ActiveCfg = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|x64.Build.0 = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|x86.ActiveCfg = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Debug|x86.Build.0 = Debug|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|Any CPU.Build.0 = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|arm64.ActiveCfg = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|arm64.Build.0 = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|x64.ActiveCfg = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|x64.Build.0 = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|x86.ActiveCfg = Release|Any CPU - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85}.Release|x86.Build.0 = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|arm64.Build.0 = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|x64.Build.0 = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|x86.ActiveCfg = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Debug|x86.Build.0 = Debug|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|Any CPU.Build.0 = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|arm64.ActiveCfg = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|arm64.Build.0 = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|x64.ActiveCfg = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|x64.Build.0 = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|x86.ActiveCfg = Release|Any CPU - {7F295396-DBBD-40A5-A645-10004D1324DA}.Release|x86.Build.0 = Release|Any CPU - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|Any CPU.ActiveCfg = Debug|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|Any CPU.Build.0 = Debug|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|arm64.ActiveCfg = Debug|x86 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|x64.ActiveCfg = Debug|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|x64.Build.0 = Debug|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|x86.ActiveCfg = Debug|x86 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Debug|x86.Build.0 = Debug|x86 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|Any CPU.ActiveCfg = Release|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|Any CPU.Build.0 = Release|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|arm64.ActiveCfg = Release|x86 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|x64.ActiveCfg = Release|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|x64.Build.0 = Release|x64 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|x86.ActiveCfg = Release|x86 - {22EA0993-8DFC-40C2-8481-8E85E21EFB56}.Release|x86.Build.0 = Release|x86 - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|arm64.Build.0 = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|x64.Build.0 = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Debug|x86.Build.0 = Debug|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|Any CPU.Build.0 = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|arm64.ActiveCfg = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|arm64.Build.0 = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|x64.ActiveCfg = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|x64.Build.0 = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|x86.ActiveCfg = Release|Any CPU - {B739074E-6652-4F5B-B37E-775DC2245FEC}.Release|x86.Build.0 = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|arm64.Build.0 = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|x64.ActiveCfg = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|x64.Build.0 = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|x86.ActiveCfg = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Debug|x86.Build.0 = Debug|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|Any CPU.Build.0 = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|arm64.ActiveCfg = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|arm64.Build.0 = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|x64.ActiveCfg = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|x64.Build.0 = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|x86.ActiveCfg = Release|Any CPU - {3B375FFC-1E38-453E-A26D-A510CCD3339E}.Release|x86.Build.0 = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|arm64.Build.0 = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|x64.Build.0 = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Debug|x86.Build.0 = Debug|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|Any CPU.Build.0 = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|arm64.ActiveCfg = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|arm64.Build.0 = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|x64.ActiveCfg = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|x64.Build.0 = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|x86.ActiveCfg = Release|Any CPU - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC}.Release|x86.Build.0 = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|arm64.Build.0 = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|x64.ActiveCfg = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|x64.Build.0 = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|x86.ActiveCfg = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Debug|x86.Build.0 = Debug|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|Any CPU.Build.0 = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|arm64.ActiveCfg = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|arm64.Build.0 = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|x64.ActiveCfg = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|x64.Build.0 = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|x86.ActiveCfg = Release|Any CPU - {1A5582DD-06F4-4427-BFDC-B021A84A01BC}.Release|x86.Build.0 = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|arm64.Build.0 = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|x64.ActiveCfg = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|x64.Build.0 = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|x86.ActiveCfg = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Debug|x86.Build.0 = Debug|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|Any CPU.Build.0 = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|arm64.ActiveCfg = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|arm64.Build.0 = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|x64.ActiveCfg = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|x64.Build.0 = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|x86.ActiveCfg = Release|Any CPU - {E18EF144-9C2C-4366-B54C-09ACF7692A4F}.Release|x86.Build.0 = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|arm64.Build.0 = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|x64.ActiveCfg = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|x64.Build.0 = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Debug|x86.Build.0 = Debug|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|Any CPU.Build.0 = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|arm64.ActiveCfg = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|arm64.Build.0 = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|x64.ActiveCfg = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|x64.Build.0 = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|x86.ActiveCfg = Release|Any CPU - {3F752B48-2936-4FCA-B0DC-4AB0F788F897}.Release|x86.Build.0 = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|arm64.ActiveCfg = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|arm64.Build.0 = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|x64.ActiveCfg = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|x64.Build.0 = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|x86.ActiveCfg = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Debug|x86.Build.0 = Debug|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|Any CPU.Build.0 = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|arm64.ActiveCfg = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|arm64.Build.0 = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|x64.ActiveCfg = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|x64.Build.0 = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|x86.ActiveCfg = Release|Any CPU - {262FF30C-34B4-462D-B5E2-0DABB9196E40}.Release|x86.Build.0 = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|arm64.Build.0 = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|x64.ActiveCfg = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|x64.Build.0 = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|x86.ActiveCfg = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Debug|x86.Build.0 = Debug|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|Any CPU.Build.0 = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|arm64.ActiveCfg = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|arm64.Build.0 = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|x64.ActiveCfg = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|x64.Build.0 = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|x86.ActiveCfg = Release|Any CPU - {0DBACF8E-2EDB-47FC-B998-B76522637B2E}.Release|x86.Build.0 = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|arm64.Build.0 = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|x64.ActiveCfg = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|x64.Build.0 = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|x86.ActiveCfg = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Debug|x86.Build.0 = Debug|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|Any CPU.Build.0 = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|arm64.ActiveCfg = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|arm64.Build.0 = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|x64.ActiveCfg = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|x64.Build.0 = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|x86.ActiveCfg = Release|Any CPU - {DF4637DA-5F07-4903-8461-4E2DAB235F3C}.Release|x86.Build.0 = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|arm64.Build.0 = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|x64.ActiveCfg = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|x64.Build.0 = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|x86.ActiveCfg = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Debug|x86.Build.0 = Debug|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|Any CPU.Build.0 = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|arm64.ActiveCfg = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|arm64.Build.0 = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|x64.ActiveCfg = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|x64.Build.0 = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|x86.ActiveCfg = Release|Any CPU - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD}.Release|x86.Build.0 = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|arm64.Build.0 = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|x64.ActiveCfg = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|x64.Build.0 = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|x86.ActiveCfg = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Debug|x86.Build.0 = Debug|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|Any CPU.Build.0 = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|arm64.ActiveCfg = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|arm64.Build.0 = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|x64.ActiveCfg = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|x64.Build.0 = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|x86.ActiveCfg = Release|Any CPU - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38}.Release|x86.Build.0 = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|arm64.Build.0 = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|x64.ActiveCfg = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|x64.Build.0 = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|x86.ActiveCfg = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Debug|x86.Build.0 = Debug|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|Any CPU.Build.0 = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|arm64.ActiveCfg = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|arm64.Build.0 = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|x64.ActiveCfg = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|x64.Build.0 = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|x86.ActiveCfg = Release|Any CPU - {11BE4471-6C3D-4758-881A-97B6A16F21F6}.Release|x86.Build.0 = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|arm64.Build.0 = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|x64.ActiveCfg = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|x64.Build.0 = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Debug|x86.Build.0 = Debug|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|Any CPU.Build.0 = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|arm64.ActiveCfg = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|arm64.Build.0 = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|x64.ActiveCfg = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|x64.Build.0 = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|x86.ActiveCfg = Release|Any CPU - {FF413F1C-A998-4FA2-823F-52AC0916B35C}.Release|x86.Build.0 = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|arm64.Build.0 = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|x64.ActiveCfg = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|x64.Build.0 = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Debug|x86.Build.0 = Debug|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|Any CPU.Build.0 = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|arm64.ActiveCfg = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|arm64.Build.0 = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|x64.ActiveCfg = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|x64.Build.0 = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|x86.ActiveCfg = Release|Any CPU - {3A1EC883-EF9C-43E8-95E5-6B527428867B}.Release|x86.Build.0 = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|arm64.ActiveCfg = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|arm64.Build.0 = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|x64.ActiveCfg = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|x64.Build.0 = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|x86.ActiveCfg = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Debug|x86.Build.0 = Debug|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|Any CPU.Build.0 = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|arm64.ActiveCfg = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|arm64.Build.0 = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|x64.ActiveCfg = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|x64.Build.0 = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|x86.ActiveCfg = Release|Any CPU - {908B2263-B58B-4261-A125-B5F2DFF92799}.Release|x86.Build.0 = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|arm64.Build.0 = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|x64.ActiveCfg = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|x64.Build.0 = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|x86.ActiveCfg = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Debug|x86.Build.0 = Debug|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|Any CPU.Build.0 = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|arm64.ActiveCfg = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|arm64.Build.0 = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|x64.ActiveCfg = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|x64.Build.0 = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|x86.ActiveCfg = Release|Any CPU - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52}.Release|x86.Build.0 = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|arm64.Build.0 = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|x64.ActiveCfg = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|x64.Build.0 = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|x86.ActiveCfg = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Debug|x86.Build.0 = Debug|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|Any CPU.Build.0 = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|arm64.ActiveCfg = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|arm64.Build.0 = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|x64.ActiveCfg = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|x64.Build.0 = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|x86.ActiveCfg = Release|Any CPU - {A07D3B13-388B-444F-9E37-DDC0787C4690}.Release|x86.Build.0 = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|arm64.Build.0 = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|x64.ActiveCfg = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|x64.Build.0 = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|x86.ActiveCfg = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Debug|x86.Build.0 = Debug|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|Any CPU.Build.0 = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|arm64.ActiveCfg = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|arm64.Build.0 = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|x64.ActiveCfg = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|x64.Build.0 = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|x86.ActiveCfg = Release|Any CPU - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD}.Release|x86.Build.0 = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|arm64.Build.0 = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|x64.ActiveCfg = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|x64.Build.0 = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|x86.ActiveCfg = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Debug|x86.Build.0 = Debug|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|Any CPU.Build.0 = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|arm64.ActiveCfg = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|arm64.Build.0 = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|x64.ActiveCfg = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|x64.Build.0 = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|x86.ActiveCfg = Release|Any CPU - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E}.Release|x86.Build.0 = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|arm64.Build.0 = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|x64.ActiveCfg = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|x64.Build.0 = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|x86.ActiveCfg = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Debug|x86.Build.0 = Debug|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|Any CPU.Build.0 = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|arm64.ActiveCfg = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|arm64.Build.0 = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|x64.ActiveCfg = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|x64.Build.0 = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|x86.ActiveCfg = Release|Any CPU - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5}.Release|x86.Build.0 = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|arm64.Build.0 = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|x64.ActiveCfg = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|x64.Build.0 = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|x86.ActiveCfg = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Debug|x86.Build.0 = Debug|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|Any CPU.Build.0 = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|arm64.ActiveCfg = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|arm64.Build.0 = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|x64.ActiveCfg = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|x64.Build.0 = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|x86.ActiveCfg = Release|Any CPU - {6CCCF618-2E70-4870-B39F-32C016FE08F0}.Release|x86.Build.0 = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|Any CPU.Build.0 = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|arm64.ActiveCfg = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|arm64.Build.0 = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|x64.ActiveCfg = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|x64.Build.0 = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|x86.ActiveCfg = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Debug|x86.Build.0 = Debug|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|Any CPU.ActiveCfg = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|Any CPU.Build.0 = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|arm64.ActiveCfg = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|arm64.Build.0 = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|x64.ActiveCfg = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|x64.Build.0 = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|x86.ActiveCfg = Release|Any CPU - {558C46DE-DE16-41D5-8DB7-D6D748E32977}.Release|x86.Build.0 = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|arm64.Build.0 = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|x64.ActiveCfg = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|x64.Build.0 = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|x86.ActiveCfg = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Debug|x86.Build.0 = Debug|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|Any CPU.Build.0 = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|arm64.ActiveCfg = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|arm64.Build.0 = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|x64.ActiveCfg = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|x64.Build.0 = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|x86.ActiveCfg = Release|Any CPU - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD}.Release|x86.Build.0 = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|arm64.Build.0 = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|x64.ActiveCfg = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|x64.Build.0 = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|x86.ActiveCfg = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Debug|x86.Build.0 = Debug|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|Any CPU.Build.0 = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|arm64.ActiveCfg = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|arm64.Build.0 = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|x64.ActiveCfg = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|x64.Build.0 = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|x86.ActiveCfg = Release|Any CPU - {5C641396-7E92-4F5C-A5A1-B4CDF480539B}.Release|x86.Build.0 = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|arm64.Build.0 = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|x64.ActiveCfg = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|x64.Build.0 = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|x86.ActiveCfg = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Debug|x86.Build.0 = Debug|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|Any CPU.Build.0 = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|arm64.ActiveCfg = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|arm64.Build.0 = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|x64.ActiveCfg = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|x64.Build.0 = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|x86.ActiveCfg = Release|Any CPU - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8}.Release|x86.Build.0 = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|arm64.Build.0 = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|x64.Build.0 = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Debug|x86.Build.0 = Debug|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|Any CPU.Build.0 = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|arm64.ActiveCfg = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|arm64.Build.0 = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|x64.ActiveCfg = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|x64.Build.0 = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|x86.ActiveCfg = Release|Any CPU - {F599EAA6-399F-4A91-9B1F-D311305B43D9}.Release|x86.Build.0 = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|arm64.ActiveCfg = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|arm64.Build.0 = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|x64.ActiveCfg = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|x64.Build.0 = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|x86.ActiveCfg = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Debug|x86.Build.0 = Debug|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|Any CPU.Build.0 = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|arm64.ActiveCfg = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|arm64.Build.0 = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|x64.ActiveCfg = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|x64.Build.0 = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|x86.ActiveCfg = Release|Any CPU - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85}.Release|x86.Build.0 = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|x64.ActiveCfg = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|x64.Build.0 = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|x86.ActiveCfg = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Debug|x86.Build.0 = Debug|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|Any CPU.Build.0 = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|arm64.ActiveCfg = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|x64.ActiveCfg = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|x64.Build.0 = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|x86.ActiveCfg = Release|Any CPU - {E090F82D-8345-477E-92E8-F724F08ADC56}.Release|x86.Build.0 = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|arm64.Build.0 = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|x64.ActiveCfg = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|x64.Build.0 = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|x86.ActiveCfg = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Debug|x86.Build.0 = Debug|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|Any CPU.Build.0 = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|arm64.ActiveCfg = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|arm64.Build.0 = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|x64.ActiveCfg = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|x64.Build.0 = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|x86.ActiveCfg = Release|Any CPU - {514726D2-3D2E-44C1-B056-163E37DE3E8B}.Release|x86.Build.0 = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|arm64.Build.0 = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|x64.ActiveCfg = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|x64.Build.0 = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|x86.ActiveCfg = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Debug|x86.Build.0 = Debug|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|Any CPU.Build.0 = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|arm64.ActiveCfg = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|arm64.Build.0 = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|x64.ActiveCfg = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|x64.Build.0 = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|x86.ActiveCfg = Release|Any CPU - {835A4E0F-A697-4B69-9736-3E99D163C4B9}.Release|x86.Build.0 = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|arm64.ActiveCfg = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|arm64.Build.0 = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|x64.ActiveCfg = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|x64.Build.0 = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|x86.ActiveCfg = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Debug|x86.Build.0 = Debug|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|Any CPU.Build.0 = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|arm64.ActiveCfg = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|arm64.Build.0 = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|x64.ActiveCfg = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|x64.Build.0 = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|x86.ActiveCfg = Release|Any CPU - {148A5B4F-C8A3-4468-92F6-51DB5641FB49}.Release|x86.Build.0 = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|arm64.Build.0 = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|x64.Build.0 = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Debug|x86.Build.0 = Debug|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|Any CPU.Build.0 = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|arm64.ActiveCfg = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|arm64.Build.0 = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|x64.ActiveCfg = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|x64.Build.0 = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|x86.ActiveCfg = Release|Any CPU - {6D365C86-3158-49F5-A21D-506C1E06E870}.Release|x86.Build.0 = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|x64.ActiveCfg = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|x64.Build.0 = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|x86.ActiveCfg = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Debug|x86.Build.0 = Debug|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|Any CPU.Build.0 = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|arm64.ActiveCfg = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|x64.ActiveCfg = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|x64.Build.0 = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|x86.ActiveCfg = Release|Any CPU - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00}.Release|x86.Build.0 = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|x64.ActiveCfg = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|x64.Build.0 = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|x86.ActiveCfg = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Debug|x86.Build.0 = Debug|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|Any CPU.Build.0 = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|arm64.ActiveCfg = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|x64.ActiveCfg = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|x64.Build.0 = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|x86.ActiveCfg = Release|Any CPU - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC}.Release|x86.Build.0 = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|x64.ActiveCfg = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|x64.Build.0 = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|x86.ActiveCfg = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Debug|x86.Build.0 = Debug|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|Any CPU.Build.0 = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|arm64.ActiveCfg = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|x64.ActiveCfg = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|x64.Build.0 = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|x86.ActiveCfg = Release|Any CPU - {40F493E2-FE59-4787-BE44-3AED39D585BF}.Release|x86.Build.0 = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|arm64.Build.0 = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|x64.ActiveCfg = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|x64.Build.0 = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Debug|x86.Build.0 = Debug|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|Any CPU.Build.0 = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|arm64.ActiveCfg = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|arm64.Build.0 = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|x64.ActiveCfg = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|x64.Build.0 = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|x86.ActiveCfg = Release|Any CPU - {6F335C66-C1D6-45FA-8529-6503B7CD42CC}.Release|x86.Build.0 = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|arm64.ActiveCfg = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|arm64.Build.0 = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|x64.ActiveCfg = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|x64.Build.0 = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|x86.ActiveCfg = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Debug|x86.Build.0 = Debug|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|Any CPU.Build.0 = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|arm64.ActiveCfg = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|arm64.Build.0 = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|x64.ActiveCfg = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|x64.Build.0 = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|x86.ActiveCfg = Release|Any CPU - {71A54D7F-245F-43C2-B429-342D80AC6F23}.Release|x86.Build.0 = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|arm64.ActiveCfg = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|arm64.Build.0 = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|x64.ActiveCfg = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|x64.Build.0 = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|x86.ActiveCfg = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Debug|x86.Build.0 = Debug|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|Any CPU.Build.0 = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|arm64.ActiveCfg = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|arm64.Build.0 = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|x64.ActiveCfg = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|x64.Build.0 = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|x86.ActiveCfg = Release|Any CPU - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950}.Release|x86.Build.0 = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|arm64.Build.0 = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|x64.ActiveCfg = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|x64.Build.0 = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Debug|x86.Build.0 = Debug|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|Any CPU.Build.0 = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|arm64.ActiveCfg = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|arm64.Build.0 = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|x64.ActiveCfg = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|x64.Build.0 = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|x86.ActiveCfg = Release|Any CPU - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC}.Release|x86.Build.0 = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|arm64.Build.0 = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|x64.Build.0 = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Debug|x86.Build.0 = Debug|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|Any CPU.Build.0 = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|arm64.ActiveCfg = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|arm64.Build.0 = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|x64.ActiveCfg = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|x64.Build.0 = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|x86.ActiveCfg = Release|Any CPU - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F}.Release|x86.Build.0 = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|arm64.ActiveCfg = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|arm64.Build.0 = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|x64.ActiveCfg = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|x64.Build.0 = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|x86.ActiveCfg = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Debug|x86.Build.0 = Debug|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|Any CPU.Build.0 = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|arm64.ActiveCfg = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|arm64.Build.0 = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|x64.ActiveCfg = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|x64.Build.0 = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|x86.ActiveCfg = Release|Any CPU - {FD819B29-9EFE-4102-BD0A-375A63051458}.Release|x86.Build.0 = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|arm64.Build.0 = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|x64.ActiveCfg = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|x64.Build.0 = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|x86.ActiveCfg = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Debug|x86.Build.0 = Debug|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|Any CPU.Build.0 = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|arm64.ActiveCfg = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|arm64.Build.0 = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|x64.ActiveCfg = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|x64.Build.0 = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|x86.ActiveCfg = Release|Any CPU - {53EA8180-8942-4D16-B92A-C5D3813D47CE}.Release|x86.Build.0 = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|arm64.Build.0 = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|x64.ActiveCfg = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|x64.Build.0 = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|x86.ActiveCfg = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Debug|x86.Build.0 = Debug|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|Any CPU.Build.0 = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|arm64.ActiveCfg = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|arm64.Build.0 = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|x64.ActiveCfg = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|x64.Build.0 = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|x86.ActiveCfg = Release|Any CPU - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2}.Release|x86.Build.0 = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|arm64.Build.0 = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|x64.ActiveCfg = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|x64.Build.0 = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|x86.ActiveCfg = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Debug|x86.Build.0 = Debug|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|Any CPU.Build.0 = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|arm64.ActiveCfg = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|arm64.Build.0 = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|x64.ActiveCfg = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|x64.Build.0 = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|x86.ActiveCfg = Release|Any CPU - {C397F73C-CADC-460E-9B27-71230B9C291E}.Release|x86.Build.0 = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|arm64.Build.0 = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|x64.ActiveCfg = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|x64.Build.0 = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|x86.ActiveCfg = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Debug|x86.Build.0 = Debug|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|Any CPU.Build.0 = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|arm64.ActiveCfg = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|arm64.Build.0 = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|x64.ActiveCfg = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|x64.Build.0 = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|x86.ActiveCfg = Release|Any CPU - {3F0C05F5-47EF-4896-8D32-4C80C4563286}.Release|x86.Build.0 = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|arm64.Build.0 = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|x64.ActiveCfg = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|x64.Build.0 = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|x86.ActiveCfg = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Debug|x86.Build.0 = Debug|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|Any CPU.Build.0 = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|arm64.ActiveCfg = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|arm64.Build.0 = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|x64.ActiveCfg = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|x64.Build.0 = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|x86.ActiveCfg = Release|Any CPU - {9B240135-3D1E-4EE6-B870-D810F3C856FB}.Release|x86.Build.0 = Release|Any CPU - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|arm64.ActiveCfg = Debug|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|x64.ActiveCfg = Debug|x64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|x64.Build.0 = Debug|x64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|x86.ActiveCfg = Debug|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|x86.Build.0 = Debug|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Debug|x86.Deploy.0 = Debug|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|Any CPU.ActiveCfg = Release|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|arm64.ActiveCfg = Release|ARM64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|arm64.Build.0 = Release|ARM64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|x64.ActiveCfg = Release|x64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|x64.Build.0 = Release|x64 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|x86.ActiveCfg = Release|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|x86.Build.0 = Release|Win32 - {7C27E72F-54D0-4820-8CFA-5E4BE640974B}.Release|x86.Deploy.0 = Release|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|arm64.ActiveCfg = Debug|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|x64.ActiveCfg = Debug|x64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|x64.Build.0 = Debug|x64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|x86.ActiveCfg = Debug|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|x86.Build.0 = Debug|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Debug|x86.Deploy.0 = Debug|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|Any CPU.ActiveCfg = Release|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|arm64.ActiveCfg = Release|ARM64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|arm64.Build.0 = Release|ARM64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|x64.ActiveCfg = Release|x64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|x64.Build.0 = Release|x64 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|x86.ActiveCfg = Release|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|x86.Build.0 = Release|Win32 - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E}.Release|x86.Deploy.0 = Release|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|arm64.ActiveCfg = Debug|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|x64.ActiveCfg = Debug|x64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|x64.Build.0 = Debug|x64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|x86.ActiveCfg = Debug|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|x86.Build.0 = Debug|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Debug|x86.Deploy.0 = Debug|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|Any CPU.ActiveCfg = Release|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|arm64.ActiveCfg = Release|ARM64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|arm64.Build.0 = Release|ARM64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|x64.ActiveCfg = Release|x64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|x64.Build.0 = Release|x64 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|x86.ActiveCfg = Release|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|x86.Build.0 = Release|Win32 - {B54A8F61-60DE-4AD9-87CA-D102F230678E}.Release|x86.Deploy.0 = Release|Win32 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Debug|Any CPU.ActiveCfg = Debug|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Debug|arm64.ActiveCfg = Debug|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Debug|arm64.Build.0 = Debug|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Debug|x64.ActiveCfg = Debug|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Debug|x86.ActiveCfg = Debug|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Release|Any CPU.ActiveCfg = Release|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Release|arm64.ActiveCfg = Release|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Release|arm64.Build.0 = Release|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Release|x64.ActiveCfg = Release|arm64 - {C681D730-4505-42C6-9E6C-87F757C4FB32}.Release|x86.ActiveCfg = Release|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Debug|Any CPU.ActiveCfg = Debug|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Debug|arm64.ActiveCfg = Debug|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Debug|arm64.Build.0 = Debug|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Debug|x64.ActiveCfg = Debug|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Debug|x86.ActiveCfg = Debug|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Release|Any CPU.ActiveCfg = Release|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Release|arm64.ActiveCfg = Release|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Release|arm64.Build.0 = Release|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Release|x64.ActiveCfg = Release|arm64 - {D6C54D8B-043F-4877-B751-60E7390F9EC6}.Release|x86.ActiveCfg = Release|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Debug|Any CPU.ActiveCfg = Debug|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Debug|arm64.ActiveCfg = Debug|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Debug|arm64.Build.0 = Debug|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Debug|x64.ActiveCfg = Debug|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Debug|x86.ActiveCfg = Debug|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Release|Any CPU.ActiveCfg = Release|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Release|arm64.ActiveCfg = Release|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Release|arm64.Build.0 = Release|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Release|x64.ActiveCfg = Release|arm64 - {5244BC49-2568-4701-80A6-EAB8950AB5FA}.Release|x86.ActiveCfg = Release|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Debug|Any CPU.ActiveCfg = Debug|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Debug|arm64.ActiveCfg = Debug|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Debug|arm64.Build.0 = Debug|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Debug|x64.ActiveCfg = Debug|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Debug|x86.ActiveCfg = Debug|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Release|Any CPU.ActiveCfg = Release|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Release|arm64.ActiveCfg = Release|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Release|arm64.Build.0 = Release|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Release|x64.ActiveCfg = Release|arm64 - {6F1B115C-1903-40CB-837D-7961AB610F4E}.Release|x86.ActiveCfg = Release|arm64 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|Any CPU.ActiveCfg = Debug|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|arm64.ActiveCfg = Debug|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|x64.ActiveCfg = Debug|x64 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|x64.Build.0 = Debug|x64 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|x86.ActiveCfg = Debug|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Debug|x86.Build.0 = Debug|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|Any CPU.ActiveCfg = Release|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|arm64.ActiveCfg = Release|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|x64.ActiveCfg = Release|x64 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|x64.Build.0 = Release|x64 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|x86.ActiveCfg = Release|x86 - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF}.Release|x86.Build.0 = Release|x86 - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|arm64.Build.0 = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|x64.ActiveCfg = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|x64.Build.0 = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|x86.ActiveCfg = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Debug|x86.Build.0 = Debug|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|Any CPU.Build.0 = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|arm64.ActiveCfg = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|arm64.Build.0 = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|x64.ActiveCfg = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|x64.Build.0 = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|x86.ActiveCfg = Release|Any CPU - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D}.Release|x86.Build.0 = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|arm64.Build.0 = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|x64.ActiveCfg = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|x64.Build.0 = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|x86.ActiveCfg = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Debug|x86.Build.0 = Debug|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|Any CPU.Build.0 = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|arm64.ActiveCfg = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|arm64.Build.0 = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|x64.ActiveCfg = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|x64.Build.0 = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|x86.ActiveCfg = Release|Any CPU - {8EB0B983-8851-4565-B92F-366F1B126E61}.Release|x86.Build.0 = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|arm64.ActiveCfg = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|arm64.Build.0 = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|x64.ActiveCfg = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|x64.Build.0 = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Debug|x86.Build.0 = Debug|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|Any CPU.Build.0 = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|arm64.ActiveCfg = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|arm64.Build.0 = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|x64.ActiveCfg = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|x64.Build.0 = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|x86.ActiveCfg = Release|Any CPU - {93D3CC76-9FA9-4198-B49D-54BA918105EE}.Release|x86.Build.0 = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|Any CPU.Build.0 = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|arm64.ActiveCfg = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|arm64.Build.0 = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|x64.ActiveCfg = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|x64.Build.0 = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|x86.ActiveCfg = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Debug|x86.Build.0 = Debug|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|Any CPU.ActiveCfg = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|Any CPU.Build.0 = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|arm64.ActiveCfg = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|arm64.Build.0 = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|x64.ActiveCfg = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|x64.Build.0 = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|x86.ActiveCfg = Release|Any CPU - {825BCF97-67A9-4834-B3A8-C3DC97A90E41}.Release|x86.Build.0 = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|arm64.Build.0 = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|x64.ActiveCfg = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|x64.Build.0 = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Debug|x86.Build.0 = Debug|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|Any CPU.Build.0 = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|arm64.ActiveCfg = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|arm64.Build.0 = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|x64.ActiveCfg = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|x64.Build.0 = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|x86.ActiveCfg = Release|Any CPU - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF}.Release|x86.Build.0 = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|arm64.Build.0 = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|x64.ActiveCfg = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|x64.Build.0 = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|x86.ActiveCfg = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Debug|x86.Build.0 = Debug|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|Any CPU.Build.0 = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|arm64.ActiveCfg = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|arm64.Build.0 = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|x64.ActiveCfg = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|x64.Build.0 = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|x86.ActiveCfg = Release|Any CPU - {5D5A3B60-A014-447C-9126-B1FA6C821C8D}.Release|x86.Build.0 = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|arm64.ActiveCfg = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|arm64.Build.0 = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|x64.ActiveCfg = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|x64.Build.0 = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|x86.ActiveCfg = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Debug|x86.Build.0 = Debug|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|Any CPU.Build.0 = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|arm64.ActiveCfg = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|arm64.Build.0 = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|x64.ActiveCfg = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|x64.Build.0 = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|x86.ActiveCfg = Release|Any CPU - {C3FFA4E4-0E7E-4866-A15F-034245BFD800}.Release|x86.Build.0 = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|arm64.ActiveCfg = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|arm64.Build.0 = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|x64.ActiveCfg = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|x64.Build.0 = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|x86.ActiveCfg = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Debug|x86.Build.0 = Debug|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|Any CPU.Build.0 = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|arm64.ActiveCfg = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|arm64.Build.0 = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|x64.ActiveCfg = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|x64.Build.0 = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|x86.ActiveCfg = Release|Any CPU - {97996D39-7722-4AFC-A41A-AD61CA7A413D}.Release|x86.Build.0 = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|arm64.Build.0 = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|x64.Build.0 = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Debug|x86.Build.0 = Debug|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|Any CPU.Build.0 = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|arm64.ActiveCfg = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|arm64.Build.0 = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|x64.ActiveCfg = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|x64.Build.0 = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|x86.ActiveCfg = Release|Any CPU - {37144E52-611B-40E8-807C-2821F5A814CB}.Release|x86.Build.0 = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|arm64.ActiveCfg = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|arm64.Build.0 = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|x64.ActiveCfg = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|x64.Build.0 = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|x86.ActiveCfg = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Debug|x86.Build.0 = Debug|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|Any CPU.Build.0 = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|arm64.ActiveCfg = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|arm64.Build.0 = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|x64.ActiveCfg = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|x64.Build.0 = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|x86.ActiveCfg = Release|Any CPU - {559FE354-7E08-4310-B4F3-AE30F34DEED5}.Release|x86.Build.0 = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|arm64.Build.0 = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|x64.ActiveCfg = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|x64.Build.0 = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|x86.ActiveCfg = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Debug|x86.Build.0 = Debug|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|Any CPU.Build.0 = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|arm64.ActiveCfg = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|arm64.Build.0 = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|x64.ActiveCfg = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|x64.Build.0 = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|x86.ActiveCfg = Release|Any CPU - {EA7D844B-C180-41C7-9D55-273AD88BF71F}.Release|x86.Build.0 = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|arm64.ActiveCfg = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|arm64.Build.0 = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|x64.ActiveCfg = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|x64.Build.0 = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Debug|x86.Build.0 = Debug|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|Any CPU.Build.0 = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|arm64.ActiveCfg = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|arm64.Build.0 = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|x64.ActiveCfg = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|x64.Build.0 = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|x86.ActiveCfg = Release|Any CPU - {2E28881D-A188-47AF-800A-B5877AD8C288}.Release|x86.Build.0 = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|arm64.Build.0 = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|x64.ActiveCfg = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|x64.Build.0 = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|x86.ActiveCfg = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Debug|x86.Build.0 = Debug|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|Any CPU.Build.0 = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|arm64.ActiveCfg = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|arm64.Build.0 = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|x64.ActiveCfg = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|x64.Build.0 = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|x86.ActiveCfg = Release|Any CPU - {A53696E8-6065-41BA-84FB-E89E0DACFF6C}.Release|x86.Build.0 = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|Any CPU.Build.0 = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|arm64.ActiveCfg = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|arm64.Build.0 = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|x64.ActiveCfg = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|x64.Build.0 = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|x86.ActiveCfg = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Debug|x86.Build.0 = Debug|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|Any CPU.ActiveCfg = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|Any CPU.Build.0 = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|arm64.ActiveCfg = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|arm64.Build.0 = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|x64.ActiveCfg = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|x64.Build.0 = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|x86.ActiveCfg = Release|Any CPU - {109C702D-DACE-4F82-A490-15E5AFA94005}.Release|x86.Build.0 = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|arm64.ActiveCfg = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|arm64.Build.0 = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|x64.ActiveCfg = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|x64.Build.0 = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|x86.ActiveCfg = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Debug|x86.Build.0 = Debug|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|Any CPU.Build.0 = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|arm64.ActiveCfg = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|arm64.Build.0 = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|x64.ActiveCfg = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|x64.Build.0 = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|x86.ActiveCfg = Release|Any CPU - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11}.Release|x86.Build.0 = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|arm64.Build.0 = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|x64.ActiveCfg = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|x64.Build.0 = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|x86.ActiveCfg = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Debug|x86.Build.0 = Debug|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|Any CPU.Build.0 = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|arm64.ActiveCfg = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|arm64.Build.0 = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|x64.ActiveCfg = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|x64.Build.0 = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|x86.ActiveCfg = Release|Any CPU - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3}.Release|x86.Build.0 = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|arm64.Build.0 = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|x64.ActiveCfg = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|x64.Build.0 = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|x86.ActiveCfg = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Debug|x86.Build.0 = Debug|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|Any CPU.Build.0 = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|arm64.ActiveCfg = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|arm64.Build.0 = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|x64.ActiveCfg = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|x64.Build.0 = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|x86.ActiveCfg = Release|Any CPU - {F18E97AE-3A3F-424D-8DC2-4D001A167F98}.Release|x86.Build.0 = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|arm64.Build.0 = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|x64.ActiveCfg = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|x64.Build.0 = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|x86.ActiveCfg = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Debug|x86.Build.0 = Debug|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|Any CPU.Build.0 = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|arm64.ActiveCfg = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|arm64.Build.0 = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|x64.ActiveCfg = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|x64.Build.0 = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|x86.ActiveCfg = Release|Any CPU - {8C3E422A-F281-4B93-A567-88C7A1ED0412}.Release|x86.Build.0 = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|arm64.Build.0 = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|x64.ActiveCfg = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|x64.Build.0 = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|x86.ActiveCfg = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Debug|x86.Build.0 = Debug|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|Any CPU.Build.0 = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|arm64.ActiveCfg = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|arm64.Build.0 = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|x64.ActiveCfg = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|x64.Build.0 = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|x86.ActiveCfg = Release|Any CPU - {EB14F068-AD55-4970-B9B4-1FBE33704243}.Release|x86.Build.0 = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|arm64.Build.0 = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|x64.ActiveCfg = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|x64.Build.0 = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|x86.ActiveCfg = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Debug|x86.Build.0 = Debug|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|Any CPU.Build.0 = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|arm64.ActiveCfg = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|arm64.Build.0 = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|x64.ActiveCfg = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|x64.Build.0 = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|x86.ActiveCfg = Release|Any CPU - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04}.Release|x86.Build.0 = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|arm64.Build.0 = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|x64.ActiveCfg = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|x64.Build.0 = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|x86.ActiveCfg = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Debug|x86.Build.0 = Debug|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|Any CPU.Build.0 = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|arm64.ActiveCfg = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|arm64.Build.0 = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|x64.ActiveCfg = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|x64.Build.0 = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|x86.ActiveCfg = Release|Any CPU - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85}.Release|x86.Build.0 = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|arm64.Build.0 = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|x64.ActiveCfg = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|x64.Build.0 = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|x86.ActiveCfg = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Debug|x86.Build.0 = Debug|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|Any CPU.Build.0 = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|arm64.ActiveCfg = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|arm64.Build.0 = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|x64.ActiveCfg = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|x64.Build.0 = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|x86.ActiveCfg = Release|Any CPU - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7}.Release|x86.Build.0 = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|arm64.Build.0 = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|x64.ActiveCfg = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|x64.Build.0 = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|x86.ActiveCfg = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Debug|x86.Build.0 = Debug|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|Any CPU.Build.0 = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|arm64.ActiveCfg = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|arm64.Build.0 = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|x64.ActiveCfg = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|x64.Build.0 = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|x86.ActiveCfg = Release|Any CPU - {9716D0D0-2251-44DD-8596-67D253EEF41C}.Release|x86.Build.0 = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|arm64.ActiveCfg = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|arm64.Build.0 = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|x64.ActiveCfg = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|x64.Build.0 = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|x86.ActiveCfg = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Debug|x86.Build.0 = Debug|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|Any CPU.Build.0 = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|arm64.ActiveCfg = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|arm64.Build.0 = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|x64.ActiveCfg = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|x64.Build.0 = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|x86.ActiveCfg = Release|Any CPU - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40}.Release|x86.Build.0 = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|arm64.Build.0 = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|x64.ActiveCfg = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|x64.Build.0 = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|x86.ActiveCfg = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Debug|x86.Build.0 = Debug|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|Any CPU.Build.0 = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|arm64.ActiveCfg = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|arm64.Build.0 = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|x64.ActiveCfg = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|x64.Build.0 = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|x86.ActiveCfg = Release|Any CPU - {8EE73488-2B92-42BD-96C9-0DD65405C828}.Release|x86.Build.0 = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|arm64.ActiveCfg = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|arm64.Build.0 = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|x64.ActiveCfg = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|x64.Build.0 = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|x86.ActiveCfg = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Debug|x86.Build.0 = Debug|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|Any CPU.Build.0 = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|arm64.ActiveCfg = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|arm64.Build.0 = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|x64.ActiveCfg = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|x64.Build.0 = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|x86.ActiveCfg = Release|Any CPU - {41FF4F96-98D2-4482-A2A7-4B179E80D285}.Release|x86.Build.0 = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|arm64.ActiveCfg = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|arm64.Build.0 = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|x64.ActiveCfg = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|x64.Build.0 = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|x86.ActiveCfg = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Debug|x86.Build.0 = Debug|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|Any CPU.Build.0 = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|arm64.ActiveCfg = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|arm64.Build.0 = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|x64.ActiveCfg = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|x64.Build.0 = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|x86.ActiveCfg = Release|Any CPU - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F}.Release|x86.Build.0 = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|Any CPU.Build.0 = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|arm64.ActiveCfg = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|arm64.Build.0 = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|x64.ActiveCfg = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|x64.Build.0 = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|x86.ActiveCfg = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Debug|x86.Build.0 = Debug|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|Any CPU.ActiveCfg = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|Any CPU.Build.0 = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|arm64.ActiveCfg = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|arm64.Build.0 = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|x64.ActiveCfg = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|x64.Build.0 = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|x86.ActiveCfg = Release|Any CPU - {487EF7BE-5009-4C70-B79E-45519BDD9603}.Release|x86.Build.0 = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|arm64.Build.0 = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|x64.ActiveCfg = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|x64.Build.0 = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|x86.ActiveCfg = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Debug|x86.Build.0 = Debug|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|Any CPU.Build.0 = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|arm64.ActiveCfg = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|arm64.Build.0 = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|x64.ActiveCfg = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|x64.Build.0 = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|x86.ActiveCfg = Release|Any CPU - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0}.Release|x86.Build.0 = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|arm64.Build.0 = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|x64.ActiveCfg = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|x64.Build.0 = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|x86.ActiveCfg = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Debug|x86.Build.0 = Debug|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|Any CPU.Build.0 = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|arm64.ActiveCfg = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|arm64.Build.0 = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|x64.ActiveCfg = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|x64.Build.0 = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|x86.ActiveCfg = Release|Any CPU - {B34CB502-0286-4939-B25F-45998528A802}.Release|x86.Build.0 = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|arm64.Build.0 = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|x64.ActiveCfg = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|x64.Build.0 = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|x86.ActiveCfg = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Debug|x86.Build.0 = Debug|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|Any CPU.Build.0 = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|arm64.ActiveCfg = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|arm64.Build.0 = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|x64.ActiveCfg = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|x64.Build.0 = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|x86.ActiveCfg = Release|Any CPU - {7F079E92-32D5-4257-B95B-CFFB0D49C160}.Release|x86.Build.0 = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|arm64.ActiveCfg = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|arm64.Build.0 = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|x64.ActiveCfg = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|x64.Build.0 = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|x86.ActiveCfg = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Debug|x86.Build.0 = Debug|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|Any CPU.Build.0 = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|arm64.ActiveCfg = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|arm64.Build.0 = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|x64.ActiveCfg = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|x64.Build.0 = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|x86.ActiveCfg = Release|Any CPU - {89896261-C5DD-4901-BCA7-7A5F718BC008}.Release|x86.Build.0 = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|arm64.Build.0 = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|x64.Build.0 = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Debug|x86.Build.0 = Debug|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|Any CPU.Build.0 = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|arm64.ActiveCfg = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|arm64.Build.0 = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|x64.ActiveCfg = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|x64.Build.0 = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|x86.ActiveCfg = Release|Any CPU - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E}.Release|x86.Build.0 = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|arm64.ActiveCfg = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|arm64.Build.0 = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|x64.ActiveCfg = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|x64.Build.0 = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|x86.ActiveCfg = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Debug|x86.Build.0 = Debug|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|Any CPU.Build.0 = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|arm64.ActiveCfg = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|arm64.Build.0 = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|x64.ActiveCfg = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|x64.Build.0 = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|x86.ActiveCfg = Release|Any CPU - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD}.Release|x86.Build.0 = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|arm64.Build.0 = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|x64.ActiveCfg = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|x64.Build.0 = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|x86.ActiveCfg = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Debug|x86.Build.0 = Debug|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|Any CPU.Build.0 = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|arm64.ActiveCfg = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|arm64.Build.0 = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|x64.ActiveCfg = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|x64.Build.0 = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|x86.ActiveCfg = Release|Any CPU - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9}.Release|x86.Build.0 = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|arm64.ActiveCfg = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|arm64.Build.0 = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|x64.Build.0 = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Debug|x86.Build.0 = Debug|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|Any CPU.Build.0 = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|arm64.ActiveCfg = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|arm64.Build.0 = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|x64.ActiveCfg = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|x64.Build.0 = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|x86.ActiveCfg = Release|Any CPU - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9}.Release|x86.Build.0 = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|arm64.Build.0 = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|x64.ActiveCfg = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|x64.Build.0 = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|x86.ActiveCfg = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Debug|x86.Build.0 = Debug|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|Any CPU.Build.0 = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|arm64.ActiveCfg = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|arm64.Build.0 = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|x64.ActiveCfg = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|x64.Build.0 = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|x86.ActiveCfg = Release|Any CPU - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853}.Release|x86.Build.0 = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|arm64.Build.0 = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|x64.ActiveCfg = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|x64.Build.0 = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|x86.ActiveCfg = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Debug|x86.Build.0 = Debug|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|Any CPU.Build.0 = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|arm64.ActiveCfg = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|arm64.Build.0 = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|x64.ActiveCfg = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|x64.Build.0 = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|x86.ActiveCfg = Release|Any CPU - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF}.Release|x86.Build.0 = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|arm64.ActiveCfg = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|arm64.Build.0 = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|x64.ActiveCfg = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|x64.Build.0 = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|x86.ActiveCfg = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Debug|x86.Build.0 = Debug|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|Any CPU.Build.0 = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|arm64.ActiveCfg = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|arm64.Build.0 = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|x64.ActiveCfg = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|x64.Build.0 = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|x86.ActiveCfg = Release|Any CPU - {BA649043-EF2B-42DC-B422-A46127BE8296}.Release|x86.Build.0 = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|arm64.Build.0 = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|x64.ActiveCfg = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|x64.Build.0 = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Debug|x86.Build.0 = Debug|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|Any CPU.Build.0 = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|arm64.ActiveCfg = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|arm64.Build.0 = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|x64.ActiveCfg = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|x64.Build.0 = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|x86.ActiveCfg = Release|Any CPU - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08}.Release|x86.Build.0 = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|arm64.Build.0 = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|x64.ActiveCfg = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|x64.Build.0 = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|x86.ActiveCfg = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Debug|x86.Build.0 = Debug|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|Any CPU.Build.0 = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|arm64.ActiveCfg = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|arm64.Build.0 = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|x64.ActiveCfg = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|x64.Build.0 = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|x86.ActiveCfg = Release|Any CPU - {A8E2AB77-8F57-47C2-A961-2F316793CAFF}.Release|x86.Build.0 = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|arm64.ActiveCfg = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|arm64.Build.0 = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|x64.ActiveCfg = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|x64.Build.0 = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|x86.ActiveCfg = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Debug|x86.Build.0 = Debug|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|Any CPU.Build.0 = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|arm64.ActiveCfg = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|arm64.Build.0 = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|x64.ActiveCfg = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|x64.Build.0 = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|x86.ActiveCfg = Release|Any CPU - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB}.Release|x86.Build.0 = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|arm64.ActiveCfg = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|arm64.Build.0 = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|x64.Build.0 = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Debug|x86.Build.0 = Debug|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|Any CPU.Build.0 = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|arm64.ActiveCfg = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|arm64.Build.0 = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|x64.ActiveCfg = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|x64.Build.0 = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|x86.ActiveCfg = Release|Any CPU - {10173568-A65E-44E5-8C6F-4AA49D0577A1}.Release|x86.Build.0 = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|arm64.ActiveCfg = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|arm64.Build.0 = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|x64.ActiveCfg = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|x64.Build.0 = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|x86.ActiveCfg = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Debug|x86.Build.0 = Debug|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|Any CPU.Build.0 = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|arm64.ActiveCfg = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|arm64.Build.0 = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|x64.ActiveCfg = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|x64.Build.0 = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|x86.ActiveCfg = Release|Any CPU - {97C7D2A4-87E5-4A4A-A170-D736427D5C21}.Release|x86.Build.0 = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|arm64.Build.0 = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|x64.ActiveCfg = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|x64.Build.0 = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|x86.ActiveCfg = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Debug|x86.Build.0 = Debug|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|Any CPU.Build.0 = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|arm64.ActiveCfg = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|arm64.Build.0 = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|x64.ActiveCfg = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|x64.Build.0 = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|x86.ActiveCfg = Release|Any CPU - {4730F56D-24EF-4BB2-AA75-862E31205F3A}.Release|x86.Build.0 = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|arm64.ActiveCfg = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|arm64.Build.0 = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|x64.ActiveCfg = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|x64.Build.0 = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|x86.ActiveCfg = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Debug|x86.Build.0 = Debug|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|Any CPU.Build.0 = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|arm64.ActiveCfg = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|arm64.Build.0 = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|x64.ActiveCfg = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|x64.Build.0 = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|x86.ActiveCfg = Release|Any CPU - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2}.Release|x86.Build.0 = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|arm64.Build.0 = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|x64.ActiveCfg = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|x64.Build.0 = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|x86.ActiveCfg = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Debug|x86.Build.0 = Debug|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|Any CPU.Build.0 = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|arm64.ActiveCfg = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|arm64.Build.0 = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|x64.ActiveCfg = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|x64.Build.0 = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|x86.ActiveCfg = Release|Any CPU - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931}.Release|x86.Build.0 = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|arm64.Build.0 = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|x64.ActiveCfg = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|x64.Build.0 = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|x86.ActiveCfg = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Debug|x86.Build.0 = Debug|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|Any CPU.Build.0 = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|arm64.ActiveCfg = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|arm64.Build.0 = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|x64.ActiveCfg = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|x64.Build.0 = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|x86.ActiveCfg = Release|Any CPU - {A05652B3-953E-4915-9D7F-0E361D988815}.Release|x86.Build.0 = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|arm64.ActiveCfg = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|arm64.Build.0 = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|x64.ActiveCfg = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|x64.Build.0 = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|x86.ActiveCfg = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Debug|x86.Build.0 = Debug|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|Any CPU.Build.0 = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|arm64.ActiveCfg = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|arm64.Build.0 = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|x64.ActiveCfg = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|x64.Build.0 = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|x86.ActiveCfg = Release|Any CPU - {AE4D272D-6F13-42C8-9404-C149188AFA33}.Release|x86.Build.0 = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|arm64.Build.0 = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|x64.ActiveCfg = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|x64.Build.0 = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|x86.ActiveCfg = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Debug|x86.Build.0 = Debug|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|Any CPU.Build.0 = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|arm64.ActiveCfg = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|arm64.Build.0 = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|x64.ActiveCfg = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|x64.Build.0 = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|x86.ActiveCfg = Release|Any CPU - {5D438258-CB19-4282-814F-974ABBC71411}.Release|x86.Build.0 = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|arm64.Build.0 = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|x64.Build.0 = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Debug|x86.Build.0 = Debug|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|Any CPU.Build.0 = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|arm64.ActiveCfg = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|arm64.Build.0 = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|x64.ActiveCfg = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|x64.Build.0 = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|x86.ActiveCfg = Release|Any CPU - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E}.Release|x86.Build.0 = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|arm64.Build.0 = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|x64.ActiveCfg = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|x64.Build.0 = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|x86.ActiveCfg = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Debug|x86.Build.0 = Debug|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|Any CPU.Build.0 = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|arm64.ActiveCfg = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|arm64.Build.0 = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|x64.ActiveCfg = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|x64.Build.0 = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|x86.ActiveCfg = Release|Any CPU - {66FA1041-5556-43A0-9CA3-F9937F085F6E}.Release|x86.Build.0 = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|arm64.Build.0 = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|x64.ActiveCfg = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|x64.Build.0 = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|x86.ActiveCfg = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Debug|x86.Build.0 = Debug|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|Any CPU.Build.0 = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|arm64.ActiveCfg = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|arm64.Build.0 = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|x64.ActiveCfg = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|x64.Build.0 = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|x86.ActiveCfg = Release|Any CPU - {37FC77EA-AC44-4D08-B002-8EFF415C424A}.Release|x86.Build.0 = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|arm64.ActiveCfg = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|arm64.Build.0 = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|x64.ActiveCfg = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|x64.Build.0 = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|x86.ActiveCfg = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Debug|x86.Build.0 = Debug|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|Any CPU.Build.0 = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|arm64.ActiveCfg = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|arm64.Build.0 = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|x64.ActiveCfg = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|x64.Build.0 = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|x86.ActiveCfg = Release|Any CPU - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3}.Release|x86.Build.0 = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|arm64.Build.0 = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|x64.ActiveCfg = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|x64.Build.0 = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|x86.ActiveCfg = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Debug|x86.Build.0 = Debug|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|Any CPU.Build.0 = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|arm64.ActiveCfg = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|arm64.Build.0 = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|x64.ActiveCfg = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|x64.Build.0 = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|x86.ActiveCfg = Release|Any CPU - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A}.Release|x86.Build.0 = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|arm64.Build.0 = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|x64.ActiveCfg = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|x64.Build.0 = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|x86.ActiveCfg = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Debug|x86.Build.0 = Debug|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|Any CPU.Build.0 = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|arm64.ActiveCfg = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|arm64.Build.0 = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|x64.ActiveCfg = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|x64.Build.0 = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|x86.ActiveCfg = Release|Any CPU - {055F86AA-FB37-40CC-B39E-C29CE7547BB7}.Release|x86.Build.0 = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|arm64.ActiveCfg = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|arm64.Build.0 = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|x64.Build.0 = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Debug|x86.Build.0 = Debug|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|Any CPU.Build.0 = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|arm64.ActiveCfg = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|arm64.Build.0 = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|x64.ActiveCfg = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|x64.Build.0 = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|x86.ActiveCfg = Release|Any CPU - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6}.Release|x86.Build.0 = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|arm64.Build.0 = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|x64.ActiveCfg = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|x64.Build.0 = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|x86.ActiveCfg = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Debug|x86.Build.0 = Debug|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|Any CPU.Build.0 = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|arm64.ActiveCfg = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|arm64.Build.0 = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|x64.ActiveCfg = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|x64.Build.0 = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|x86.ActiveCfg = Release|Any CPU - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C}.Release|x86.Build.0 = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|arm64.Build.0 = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|x64.ActiveCfg = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|x64.Build.0 = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|x86.ActiveCfg = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Debug|x86.Build.0 = Debug|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|Any CPU.Build.0 = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|arm64.ActiveCfg = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|arm64.Build.0 = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|x64.ActiveCfg = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|x64.Build.0 = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|x86.ActiveCfg = Release|Any CPU - {A939893A-B3CD-48F6-80D3-340C8A6E275B}.Release|x86.Build.0 = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|arm64.Build.0 = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|x64.ActiveCfg = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|x64.Build.0 = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|x86.ActiveCfg = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Debug|x86.Build.0 = Debug|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|Any CPU.Build.0 = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|arm64.ActiveCfg = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|arm64.Build.0 = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x64.ActiveCfg = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x64.Build.0 = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x86.ActiveCfg = Release|Any CPU - {F232B503-D412-45EE-8B31-EFD46B9FA302}.Release|x86.Build.0 = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|arm64.Build.0 = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|x64.ActiveCfg = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|x64.Build.0 = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|x86.ActiveCfg = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Debug|x86.Build.0 = Debug|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|Any CPU.Build.0 = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|arm64.ActiveCfg = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|arm64.Build.0 = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|x64.ActiveCfg = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|x64.Build.0 = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|x86.ActiveCfg = Release|Any CPU - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E}.Release|x86.Build.0 = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|arm64.Build.0 = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|x64.ActiveCfg = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|x64.Build.0 = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|x86.ActiveCfg = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Debug|x86.Build.0 = Debug|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|Any CPU.Build.0 = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|arm64.ActiveCfg = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|arm64.Build.0 = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|x64.ActiveCfg = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|x64.Build.0 = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|x86.ActiveCfg = Release|Any CPU - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E}.Release|x86.Build.0 = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|arm64.ActiveCfg = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|arm64.Build.0 = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x64.ActiveCfg = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x64.Build.0 = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x86.ActiveCfg = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Debug|x86.Build.0 = Debug|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|Any CPU.Build.0 = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|arm64.ActiveCfg = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|arm64.Build.0 = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x64.ActiveCfg = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x64.Build.0 = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x86.ActiveCfg = Release|Any CPU - {433F91E4-E39D-4EB0-B798-2998B3969A2C}.Release|x86.Build.0 = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|arm64.Build.0 = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x64.Build.0 = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Debug|x86.Build.0 = Debug|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|Any CPU.Build.0 = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|arm64.ActiveCfg = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|arm64.Build.0 = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x64.ActiveCfg = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x64.Build.0 = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x86.ActiveCfg = Release|Any CPU - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13}.Release|x86.Build.0 = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|arm64.Build.0 = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|x64.ActiveCfg = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|x64.Build.0 = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|x86.ActiveCfg = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Debug|x86.Build.0 = Debug|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|Any CPU.Build.0 = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|arm64.ActiveCfg = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|arm64.Build.0 = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|x64.ActiveCfg = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|x64.Build.0 = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|x86.ActiveCfg = Release|Any CPU - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52}.Release|x86.Build.0 = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|arm64.ActiveCfg = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|arm64.Build.0 = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|x64.ActiveCfg = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|x64.Build.0 = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|x86.ActiveCfg = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Debug|x86.Build.0 = Debug|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|Any CPU.Build.0 = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|arm64.ActiveCfg = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|arm64.Build.0 = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|x64.ActiveCfg = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|x64.Build.0 = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|x86.ActiveCfg = Release|Any CPU - {8D2CC6ED-5105-4F52-8757-C21F4DE78589}.Release|x86.Build.0 = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|arm64.Build.0 = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|x64.ActiveCfg = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|x64.Build.0 = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|x86.ActiveCfg = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Debug|x86.Build.0 = Debug|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|Any CPU.Build.0 = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|arm64.ActiveCfg = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|arm64.Build.0 = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|x64.ActiveCfg = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|x64.Build.0 = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|x86.ActiveCfg = Release|Any CPU - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734}.Release|x86.Build.0 = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|arm64.Build.0 = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|x64.ActiveCfg = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|x64.Build.0 = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|x86.ActiveCfg = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Debug|x86.Build.0 = Debug|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|Any CPU.Build.0 = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|arm64.ActiveCfg = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|arm64.Build.0 = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|x64.ActiveCfg = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|x64.Build.0 = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|x86.ActiveCfg = Release|Any CPU - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4}.Release|x86.Build.0 = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|arm64.ActiveCfg = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|arm64.Build.0 = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|x64.ActiveCfg = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|x64.Build.0 = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|x86.ActiveCfg = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Debug|x86.Build.0 = Debug|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|Any CPU.Build.0 = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|arm64.ActiveCfg = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|arm64.Build.0 = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|x64.ActiveCfg = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|x64.Build.0 = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|x86.ActiveCfg = Release|Any CPU - {4D8DE54A-4F32-4881-B07B-DDC79619E573}.Release|x86.Build.0 = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|arm64.ActiveCfg = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|arm64.Build.0 = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|x64.ActiveCfg = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|x64.Build.0 = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|x86.ActiveCfg = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Debug|x86.Build.0 = Debug|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|Any CPU.Build.0 = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|arm64.ActiveCfg = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|arm64.Build.0 = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|x64.ActiveCfg = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|x64.Build.0 = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|x86.ActiveCfg = Release|Any CPU - {9536C284-65B4-4884-BB50-06D629095C3E}.Release|x86.Build.0 = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|arm64.ActiveCfg = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|arm64.Build.0 = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|x64.ActiveCfg = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|x64.Build.0 = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|x86.ActiveCfg = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Debug|x86.Build.0 = Debug|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|Any CPU.Build.0 = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|arm64.ActiveCfg = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|arm64.Build.0 = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|x64.ActiveCfg = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|x64.Build.0 = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|x86.ActiveCfg = Release|Any CPU - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B}.Release|x86.Build.0 = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|arm64.ActiveCfg = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|arm64.Build.0 = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|x64.ActiveCfg = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|x64.Build.0 = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|x86.ActiveCfg = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Debug|x86.Build.0 = Debug|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|Any CPU.Build.0 = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|arm64.ActiveCfg = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|arm64.Build.0 = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|x64.ActiveCfg = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|x64.Build.0 = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|x86.ActiveCfg = Release|Any CPU - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683}.Release|x86.Build.0 = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|arm64.ActiveCfg = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|arm64.Build.0 = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|x64.ActiveCfg = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|x64.Build.0 = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|x86.ActiveCfg = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Debug|x86.Build.0 = Debug|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|Any CPU.Build.0 = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|arm64.ActiveCfg = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|arm64.Build.0 = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|x64.ActiveCfg = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|x64.Build.0 = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|x86.ActiveCfg = Release|Any CPU - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63}.Release|x86.Build.0 = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|arm64.Build.0 = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|x64.ActiveCfg = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|x64.Build.0 = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Debug|x86.Build.0 = Debug|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|Any CPU.Build.0 = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|arm64.ActiveCfg = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|arm64.Build.0 = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|x64.ActiveCfg = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|x64.Build.0 = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|x86.ActiveCfg = Release|Any CPU - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {0F84F170-57D0-496B-8E2C-7984178EF69F} = {C28A32F6-8314-412E-9F3B-CBD31C23E878} - {03C2290A-1C48-489A-81DB-F3447B0DA595} = {0F84F170-57D0-496B-8E2C-7984178EF69F} - {2B94628A-CFFB-447E-8026-A126C33B0917} = {0F84F170-57D0-496B-8E2C-7984178EF69F} - {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {819B136D-B8B6-46AE-8C4F-5469BBBFC46B} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {D4FBDF11-7A65-4205-8AF6-ABC190EFCF50} = {819B136D-B8B6-46AE-8C4F-5469BBBFC46B} - {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {2C022280-340C-43DC-B63D-5A644F0ECBF2} = {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} - {B6081DA9-738E-4088-92DD-7FFA200523C9} = {2C022280-340C-43DC-B63D-5A644F0ECBF2} - {BE70E100-E6C4-4686-8592-73E2A04E877F} = {B6081DA9-738E-4088-92DD-7FFA200523C9} - {60D51C98-2CC0-40DF-B338-44154EFEE2FF} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {6DE916F5-E78F-446C-89CB-9240AED2A2E2} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {7546E2DD-2CF4-4240-8045-2533DF539458} = {6DE916F5-E78F-446C-89CB-9240AED2A2E2} - {B55A5DE1-5AF3-4B18-AF04-C1735B071DA6} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {210B7FF8-ADD2-4E11-831A-41B28F423E44} = {B55A5DE1-5AF3-4B18-AF04-C1735B071DA6} - {627BE8B3-59E6-4F1D-8C9C-76B804D41724} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {AB0ED518-C27C-42D9-8D66-5F974033F855} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {18E65289-27FC-4EC6-BFE8-9FA852381319} = {AB0ED518-C27C-42D9-8D66-5F974033F855} - {5CF8E05A-C8DD-4551-8542-844A217B39F2} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {74CF6CCE-B922-4FEF-87AA-38C85D42A4A2} = {5CF8E05A-C8DD-4551-8542-844A217B39F2} - {A39335E5-7A26-4CFD-BF3B-2CFE75113498} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {EB593520-0853-4642-A404-675FC318D181} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {EA034D9C-3281-426B-A363-FF1C05D12483} = {EB593520-0853-4642-A404-675FC318D181} - {C2751270-6970-4CC8-8D8C-81A4B8D26446} = {EA034D9C-3281-426B-A363-FF1C05D12483} - {C63C5E92-1511-45A5-A160-0FCC9B3E3CDB} = {EB593520-0853-4642-A404-675FC318D181} - {E2083951-98E7-4C1C-AB3A-935EA6311018} = {C63C5E92-1511-45A5-A160-0FCC9B3E3CDB} - {B59D558B-AC58-4BA4-B5AF-AE51C8531B28} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {A345753F-B4FA-43E4-8275-151FA5B70728} = {B59D558B-AC58-4BA4-B5AF-AE51C8531B28} - {08B240FC-AE5D-478A-963D-890ADE70B0B5} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {34A797ED-AC07-476D-BEB1-E86DBBF2395A} = {08B240FC-AE5D-478A-963D-890ADE70B0B5} - {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {78DD1AC3-0981-4109-861B-C3E2F1FC3281} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} - {D5D2C620-42B7-4ECF-A892-295BB124A833} = {78DD1AC3-0981-4109-861B-C3E2F1FC3281} - {E5963C9F-20A6-4385-B364-814D2581FADF} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {27223011-E8E9-4178-9377-44A7B3CBCC21} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {8CDA0BDC-05C2-451F-9990-2BEF471684BF} = {27223011-E8E9-4178-9377-44A7B3CBCC21} - {380430A1-C02F-4943-8A52-FDFA9F7735F0} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {5B27FAB7-E5FE-4FF2-8F39-900E177D5E39} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {392701C6-0BDB-4505-ADB8-1475770A2421} = {5B27FAB7-E5FE-4FF2-8F39-900E177D5E39} - {682157DB-17F2-40D6-B0ED-11B6C6CB064B} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {DAF8C29D-5FAE-414F-8630-43CA8ECDCCD1} = {682157DB-17F2-40D6-B0ED-11B6C6CB064B} - {64D54BBB-13D1-4655-A149-CFB754820BD2} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {5BF0F5D9-8502-4431-BFFD-CA8B9D21142A} = {64D54BBB-13D1-4655-A149-CFB754820BD2} - {ECB76EBA-0512-4449-95AA-7258F543BA2E} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {1D6348B5-0616-41A6-90ED-09D34C452926} = {ECB76EBA-0512-4449-95AA-7258F543BA2E} - {2DB7E3C7-D213-4609-95DD-72561F23AB58} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {83C6944F-8F6C-4698-A09A-25DB92BA1AD2} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {456056B5-3888-47AB-AFD7-4F16A8A1454F} = {83C6944F-8F6C-4698-A09A-25DB92BA1AD2} - {44663691-023E-48D0-9757-A106974E8AAE} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {4DE12851-6ABC-4675-84B8-0E0EFA142F79} = {44663691-023E-48D0-9757-A106974E8AAE} - {13E7C397-F40B-4791-B853-F7430AF88D00} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {412D4C15-F48F-4DB1-940A-131D1AA87088} = {13E7C397-F40B-4791-B853-F7430AF88D00} - {A400C938-46E2-4B84-B06E-487B13D22E1B} = {412D4C15-F48F-4DB1-940A-131D1AA87088} - {3D330C1E-D773-4BA8-9E91-123544B0D672} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {563714CA-0022-4A95-BDBB-0953541193CA} = {3D330C1E-D773-4BA8-9E91-123544B0D672} - {DCBBDB52-4A49-4141-8F4D-81C0FFFB7BD5} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {E55659A7-5489-4E86-B11C-2E41697555F7} = {DCBBDB52-4A49-4141-8F4D-81C0FFFB7BD5} - {1A304CA0-7795-4684-88E5-E66402966927} = {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} - {A0FFAF00-D628-4BDB-BE68-8DBA21FBBEA2} = {1A304CA0-7795-4684-88E5-E66402966927} - {627F94BE-AD74-4188-9F61-12E5096DA826} = {A0FFAF00-D628-4BDB-BE68-8DBA21FBBEA2} - {BC0E5F62-06EE-407D-83C6-490785E9A011} = {1A304CA0-7795-4684-88E5-E66402966927} - {F5EAE3E3-951B-46B7-A6B0-0BC76CCB83C5} = {BC0E5F62-06EE-407D-83C6-490785E9A011} - {225AEDCF-7162-4A86-AC74-06B84660B379} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {606C2615-3E08-4A08-993F-FBD90F4CD021} = {225AEDCF-7162-4A86-AC74-06B84660B379} - {BFDD5ACE-A1F0-4C33-8DA1-06CB5CA53177} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {62043A86-BC6F-432E-9AFD-F3B616192D8D} = {BFDD5ACE-A1F0-4C33-8DA1-06CB5CA53177} - {9934060B-1957-40FF-83E1-5C15344E7A33} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {EEC636DE-4C4D-4F16-9D57-0AD1762CCB4D} = {9934060B-1957-40FF-83E1-5C15344E7A33} - {D685AF51-2CE2-4CD8-86AA-FB0EDD47533F} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {600CB408-C94D-4F69-83DB-D99EF6DAE0E1} = {D685AF51-2CE2-4CD8-86AA-FB0EDD47533F} - {0322CF4A-9701-4E7E-9827-BC7DFFA78842} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {3AEEC6C0-65ED-43D1-BA42-F7E6913BB69A} = {0322CF4A-9701-4E7E-9827-BC7DFFA78842} - {5F51EB21-20E2-4793-A137-2E18D50696C5} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {9CE2DD5F-BC82-4EEB-BF7B-70E75677566A} = {5F51EB21-20E2-4793-A137-2E18D50696C5} - {7ACD11D4-4682-4936-AFF6-DAC64C636612} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {E071FB7E-E650-44B0-9529-D5D1685AEA62} = {7ACD11D4-4682-4936-AFF6-DAC64C636612} - {79C7F0D4-7B1A-46BF-8932-5C2E971C5925} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {6A31248F-5F64-4A73-856C-8DC6492E6AC7} = {79C7F0D4-7B1A-46BF-8932-5C2E971C5925} - {644AAC18-8E13-4392-8891-3814E355C819} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {928C9877-6BF3-447D-9E33-ACF833151D77} = {644AAC18-8E13-4392-8891-3814E355C819} - {70AD2DB0-47D7-492F-817A-34BCAFD861C4} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {51D0FA50-6970-4C19-B31B-3D6CCDF6C028} = {70AD2DB0-47D7-492F-817A-34BCAFD861C4} - {D21F1804-4690-4B00-BC6A-2147C14BF1B2} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {451C6023-83D5-4809-9F71-6A23ED725A03} = {D21F1804-4690-4B00-BC6A-2147C14BF1B2} - {9578BB4F-D805-4581-9AAE-A66002BFDA1F} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {A47371F8-F47E-4AF3-9F2E-068F28CE6587} = {9578BB4F-D805-4581-9AAE-A66002BFDA1F} - {3691F0FE-6A8D-4F99-95EB-2D3AD3F9B712} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {4C056678-59A0-4D37-BE70-B98D764C7EA4} = {3691F0FE-6A8D-4F99-95EB-2D3AD3F9B712} - {DA5E4C5A-E62C-47CD-9557-65F747638BAD} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {81A35CF9-214F-4351-9561-334F32B41C3A} = {DA5E4C5A-E62C-47CD-9557-65F747638BAD} - {B27FBAC2-ADA3-4A05-B232-64011B6B2DA3} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {66A0F71A-FFB5-4763-913E-FB4A4F17EAA2} = {B27FBAC2-ADA3-4A05-B232-64011B6B2DA3} - {50D97D17-79CF-4917-AD70-F79146FE8808} = {66A0F71A-FFB5-4763-913E-FB4A4F17EAA2} - {AB316CF4-D9C3-427E-8460-7C5235BED45E} = {B27FBAC2-ADA3-4A05-B232-64011B6B2DA3} - {135B4B7B-D641-4A45-87F4-15C6A8CAA7F5} = {AB316CF4-D9C3-427E-8460-7C5235BED45E} - {0408482E-7934-49CA-A590-7E21AF4BE1BF} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {A9027A02-135B-4149-947A-79F5B73A7F28} = {0408482E-7934-49CA-A590-7E21AF4BE1BF} - {54C42F57-5447-4C21-9812-4AF665567566} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {352D08E0-782E-4AE3-99B2-7BC5B2C3F227} = {54C42F57-5447-4C21-9812-4AF665567566} - {3ACCF669-89AB-4B02-809E-E94C81271BFF} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {DEED8B59-B811-471F-936A-D8D71AA97CE1} = {3ACCF669-89AB-4B02-809E-E94C81271BFF} - {DF5E3AC1-94B3-4B8A-B534-9D30924A8E6B} = {1A304CA0-7795-4684-88E5-E66402966927} - {B2660D8F-8990-46C7-9B41-F3F94C6402F6} = {DF5E3AC1-94B3-4B8A-B534-9D30924A8E6B} - {4F99BF26-E900-487C-828F-145166926DE2} = {2C022280-340C-43DC-B63D-5A644F0ECBF2} - {31E763AD-996E-44EF-A70E-1B8187922C98} = {4F99BF26-E900-487C-828F-145166926DE2} - {989F2C7A-807F-41DA-AA5F-08147E8FF433} = {1A304CA0-7795-4684-88E5-E66402966927} - {3974EB1C-077A-4A79-B295-87B62446C266} = {989F2C7A-807F-41DA-AA5F-08147E8FF433} - {9AA5D0E4-B341-4570-B3E4-081E6653471D} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {CE49768E-1D4C-4724-9D35-1D0F73E49C9D} = {9AA5D0E4-B341-4570-B3E4-081E6653471D} - {B7ED4805-AD3E-4D76-BC5B-700A31488493} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {AB3A72FB-5DF6-4F95-BAA8-19CF5BC97760} = {B7ED4805-AD3E-4D76-BC5B-700A31488493} - {BF4B36D6-D1FA-41A3-9CB3-2E1D2894E2AD} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {06492CD6-4C51-41F3-9D1A-0A95F914F871} = {BF4B36D6-D1FA-41A3-9CB3-2E1D2894E2AD} - {C59FBB3C-3A7F-4744-A823-1EB92C5B23A2} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {62BE5BF4-24BB-4013-ACE8-3D76521FA77C} = {C59FBB3C-3A7F-4744-A823-1EB92C5B23A2} - {7321E95C-0A37-45BD-B458-1BA4412A14AC} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {021E9BF3-2D3D-4169-834E-718ABE0E5B68} = {7321E95C-0A37-45BD-B458-1BA4412A14AC} - {E5CA56AF-64B6-47B4-BCB7-EF95B53D14E1} = {021E9BF3-2D3D-4169-834E-718ABE0E5B68} - {C73F3203-4E8C-46BC-A299-1A5BB81DA2C3} = {021E9BF3-2D3D-4169-834E-718ABE0E5B68} - {78C5ACC3-6718-4682-B350-737EDA1E4F35} = {B55A5DE1-5AF3-4B18-AF04-C1735B071DA6} - {DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {4FDDC525-4E60-4CAF-83A3-261C5B43721F} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} - {89472057-8BB2-44A8-B0FC-D9F3ADB1181C} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {D40C86C9-0E5D-4974-84D8-A835B58B2A8F} = {89472057-8BB2-44A8-B0FC-D9F3ADB1181C} - {D69B5668-86EF-4CC5-814B-113BAF740DD0} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {0674F69B-FAC8-43E5-8711-A476936F459F} = {D69B5668-86EF-4CC5-814B-113BAF740DD0} - {D9403AE4-77D1-44DE-8785-280C342D215A} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {5DEF52C0-B440-4DAC-8A2D-920C7016C580} = {D9403AE4-77D1-44DE-8785-280C342D215A} - {D67E977E-75DF-41EE-8315-6DBF5C2B7357} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} - {EE74FCEC-542A-4B66-B0A9-49B28049C203} = {D67E977E-75DF-41EE-8315-6DBF5C2B7357} - {737D2BC0-092E-404B-BB73-EACAEDBF0E65} = {EE74FCEC-542A-4B66-B0A9-49B28049C203} - {7004082D-53E9-45C2-B2DE-EB3CE448B64F} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {478D4BE2-F4AC-45EF-BEE4-35399DECCABF} = {7004082D-53E9-45C2-B2DE-EB3CE448B64F} - {ADAC3089-7247-4137-A8CB-8114D58C9B93} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {183F99F9-0C0B-4790-8152-637B4AE68622} = {ADAC3089-7247-4137-A8CB-8114D58C9B93} - {EA2941E6-5868-47CD-97AB-2DB1D5F18D97} = {DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4} - {F8C6AE5D-ED8B-4CCD-9E4C-28AD16EF075B} = {EA2941E6-5868-47CD-97AB-2DB1D5F18D97} - {AE3F1191-648A-4813-81C5-E8527E716BB7} = {DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4} - {32FE10AE-CC85-407A-8720-624CDD3EB890} = {AE3F1191-648A-4813-81C5-E8527E716BB7} - {425D32AE-C933-4E4B-AC96-B2DCD9FA2B24} = {AE3F1191-648A-4813-81C5-E8527E716BB7} - {2E944A89-5614-425E-A87A-5F455EDB78D7} = {DFDEED51-6B9B-41B9-A684-9F3FFC07C9B4} - {FE930950-64DC-45A3-8128-2D68F97EBB19} = {2E944A89-5614-425E-A87A-5F455EDB78D7} - {81410464-9C9E-4DDE-824C-BCD0DA8E6523} = {2E944A89-5614-425E-A87A-5F455EDB78D7} - {68C2D913-06D4-4EAC-9283-78465BF214E1} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {D2CA01D0-954A-4F90-AF9B-F081DA9F40E3} = {68C2D913-06D4-4EAC-9283-78465BF214E1} - {F4B3C10B-F713-45D1-84EF-DD503BA09D20} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {7AA8771B-F1F3-409E-960A-EEF00B94135A} = {F4B3C10B-F713-45D1-84EF-DD503BA09D20} - {E6639EAB-40B0-4BB6-A56B-25ECC4B6D3D9} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {0B490CDE-C350-41A0-9DEA-CDA5FB72205D} = {E6639EAB-40B0-4BB6-A56B-25ECC4B6D3D9} - {822D1519-77F0-484A-B9AB-F694C2CC25F1} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {99F9BBC5-46AE-40DC-A675-5E56ACA3C5C8} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {AB39F04A-A96E-4BE1-99F2-54B804104BA1} = {99F9BBC5-46AE-40DC-A675-5E56ACA3C5C8} - {9121A7EA-5751-4811-9FE3-E183BB8709FB} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {EE23169F-C3A7-4A03-8FB7-C1F1B76301A9} = {9121A7EA-5751-4811-9FE3-E183BB8709FB} - {03CD847C-2230-4092-BF1C-DE54634805AD} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {D47B73A3-740E-4B9A-B123-A42299F1F266} = {03CD847C-2230-4092-BF1C-DE54634805AD} - {14A4E3F5-04BB-4062-84AE-1A887C307B17} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {6906D7DE-CE06-4A6A-81BB-D783C605A184} = {14A4E3F5-04BB-4062-84AE-1A887C307B17} - {2AB4FE8F-94FF-4C6E-B12F-9E40A9FAF9AB} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {F90D4383-89FC-4215-B2AB-BBB242CC5E45} = {2AB4FE8F-94FF-4C6E-B12F-9E40A9FAF9AB} - {A274799D-3D1F-4AE5-A154-4BF6C80A8D94} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {D5DF181B-E759-4797-ABAF-0BFDEC2A883D} = {A274799D-3D1F-4AE5-A154-4BF6C80A8D94} - {7B382EC7-57B6-4C0C-8B27-5F63B5184193} = {A274799D-3D1F-4AE5-A154-4BF6C80A8D94} - {562D5067-8CD8-4F19-BCBB-873204932C61} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {58FFC6CE-5958-460C-A520-32CF3FD0BE61} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {DE6F167E-F41C-414D-923E-8E51E992A830} = {58FFC6CE-5958-460C-A520-32CF3FD0BE61} - {839C479D-64DC-4A59-85E4-04E5A2CC9631} = {58FFC6CE-5958-460C-A520-32CF3FD0BE61} - {26196065-4F78-435E-B500-2967A63D277D} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {ADB4912C-BCD5-400F-BD20-37410BA76EF8} = {26196065-4F78-435E-B500-2967A63D277D} - {13683DEB-FB7E-4F20-ACB2-015381943541} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {1721A1A3-D8A0-4CEE-A11D-4D168F93F0D7} = {13683DEB-FB7E-4F20-ACB2-015381943541} - {4510DA15-69F3-411E-86F2-7AD04FFB9823} = {B59D558B-AC58-4BA4-B5AF-AE51C8531B28} - {B46A45E2-27E8-4C85-920B-1BFF45B7EBEB} = {B59D558B-AC58-4BA4-B5AF-AE51C8531B28} - {6CBF1AA9-1073-4A97-B867-FB534C6829C1} = {6DE916F5-E78F-446C-89CB-9240AED2A2E2} - {0508E463-0269-40C9-B5C2-3B600FB2A28B} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {A71B95EE-1BFF-49BA-BA5F-121EFAE41667} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} - {881FE4C3-1553-4CA1-B430-DDD37B3493AB} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {DAAB40E7-73DD-4BF1-BCB7-FE3E20F2F7C1} = {881FE4C3-1553-4CA1-B430-DDD37B3493AB} - {DE5C0805-1C4A-4C70-B613-89EE2EA0B757} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {FB86B2B2-60B2-477A-9D78-2530A0089660} = {DE5C0805-1C4A-4C70-B613-89EE2EA0B757} - {58915BB2-CEF5-4CA3-8886-A61156564505} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D} = {58915BB2-CEF5-4CA3-8886-A61156564505} - {39086512-EBC8-4061-BE34-DCCA5D1BA585} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {34F24889-22D2-40A1-A2AB-A43B9061FE0D} = {39086512-EBC8-4061-BE34-DCCA5D1BA585} - {512EFCA7-1590-492A-8D06-84744F79DA91} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B} = {512EFCA7-1590-492A-8D06-84744F79DA91} - {515282B6-6EF9-46E0-8EF1-DBD1CD948D9E} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {02A85F31-A092-4322-A3D9-91E894D9ECD2} = {515282B6-6EF9-46E0-8EF1-DBD1CD948D9E} - {33CAD745-5912-47D3-BAF3-5AE580FED275} = {D67E977E-75DF-41EE-8315-6DBF5C2B7357} - {9E01AF6A-F748-4490-B45B-8558D1E701B4} = {33CAD745-5912-47D3-BAF3-5AE580FED275} - {94174359-D57E-467E-8AC7-167A10260F34} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {94F7E7AE-4AEF-44EC-B9F2-ABD1A5AC9E4A} = {94174359-D57E-467E-8AC7-167A10260F34} - {B4B39C18-70F5-4C07-9871-4E124F63F1F7} = {1A304CA0-7795-4684-88E5-E66402966927} - {B2D225EF-BE70-4FA0-B631-0A4D24DB7BD7} = {B4B39C18-70F5-4C07-9871-4E124F63F1F7} - {01EED30B-3DC5-4591-A4C2-B17C6D36B1DE} = {1A304CA0-7795-4684-88E5-E66402966927} - {EDFF668F-1DB2-4EC7-BB6F-9DDBF70437CB} = {01EED30B-3DC5-4591-A4C2-B17C6D36B1DE} - {4B6BA2CC-8DE7-4070-A912-D51375998553} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {18FCF9CD-8545-41FC-9E4B-0F18B593863D} = {4B6BA2CC-8DE7-4070-A912-D51375998553} - {F94AF7F5-7DB1-4716-B4B5-A7DAB066AF2F} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {5FF36127-063D-4D3E-9429-3BFD32713FEE} = {F94AF7F5-7DB1-4716-B4B5-A7DAB066AF2F} - {5BFA4A13-895A-4680-BCC6-3BDA8F048A29} = {5FF36127-063D-4D3E-9429-3BFD32713FEE} - {0338EC37-E5AD-47DA-9502-24A5F7433ADE} = {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} - {2637A22F-182F-4659-A394-C9BC1514B321} = {0338EC37-E5AD-47DA-9502-24A5F7433ADE} - {A6D39EEA-CC08-4ECF-BD2E-134D845876FB} = {2637A22F-182F-4659-A394-C9BC1514B321} - {95F132DA-D9B6-4181-8D1B-A58D935B1827} = {A6D39EEA-CC08-4ECF-BD2E-134D845876FB} - {85EFA9E2-A041-438B-BAF9-928C74571141} = {2637A22F-182F-4659-A394-C9BC1514B321} - {9443F095-DA20-4EED-BC97-5BF92470D972} = {85EFA9E2-A041-438B-BAF9-928C74571141} - {EA798F59-BCF8-4013-AF6B-9611FDC9919C} = {2637A22F-182F-4659-A394-C9BC1514B321} - {C10C8A03-9ECC-4CDC-9D8E-9E0FDF12E4EE} = {EA798F59-BCF8-4013-AF6B-9611FDC9919C} - {9EA5219C-3C11-45D4-BD43-8BE05FB2812A} = {08B240FC-AE5D-478A-963D-890ADE70B0B5} - {9DF052F3-D239-4BB5-B41E-DA93A086B4F8} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {CBA2A020-E44D-4AFF-ADB8-E6414E7EAD94} = {9DF052F3-D239-4BB5-B41E-DA93A086B4F8} - {418848BA-83AE-49E4-9EEC-7AFB5591D8E8} = {9DF052F3-D239-4BB5-B41E-DA93A086B4F8} - {59ECEDFE-72E7-495D-BECB-784B0018544E} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {61F6B56C-0764-4585-9C3F-63A0CF05E56E} = {59ECEDFE-72E7-495D-BECB-784B0018544E} - {60B11F05-CA3B-4AD1-BAC1-912C19D37395} = {59ECEDFE-72E7-495D-BECB-784B0018544E} - {5FE1FBC1-8CE3-4355-9866-44FE1307C5F1} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {8DE6625B-C9E4-4949-A75C-89E3FF556724} = {5FE1FBC1-8CE3-4355-9866-44FE1307C5F1} - {0CE1CC26-98CE-4022-A81C-E32AAFC9B819} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {6276A9A0-791B-49C1-AD8F-50AC47CDC196} = {0CE1CC26-98CE-4022-A81C-E32AAFC9B819} - {B81C7FA1-870F-4F21-A928-A5BE18754E6E} = {6276A9A0-791B-49C1-AD8F-50AC47CDC196} - {2AEACF69-7F68-414A-B49D-2C627D37D0F6} = {6276A9A0-791B-49C1-AD8F-50AC47CDC196} - {0C610220-E00C-4752-98A0-44A3D4B96A21} = {13683DEB-FB7E-4F20-ACB2-015381943541} - {1FD5F261-6384-4AE1-A6DA-4D08A0BCE1CF} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {09F72EF0-2BDE-4B73-B116-A87E38C432FE} = {1FD5F261-6384-4AE1-A6DA-4D08A0BCE1CF} - {44161B20-CC30-403A-AC94-247592ED7590} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE} = {44161B20-CC30-403A-AC94-247592ED7590} - {E33C36A1-481C-4A93-BCBE-22CCBA53349B} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {E167A806-EEFA-4BCF-A14D-D985BAEA9387} = {E33C36A1-481C-4A93-BCBE-22CCBA53349B} - {15A90CE7-886D-4005-8C14-CF29123344E1} = {E33C36A1-481C-4A93-BCBE-22CCBA53349B} - {E50C2015-42A4-4E71-94B9-62773D369FEE} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {16898702-3E33-41C1-B8D8-4CE3F1D46BD9} = {E50C2015-42A4-4E71-94B9-62773D369FEE} - {70B719CD-C70E-4417-B1EE-FD24B5AFB0B7} = {16898702-3E33-41C1-B8D8-4CE3F1D46BD9} - {552EB148-0518-41A6-905D-4696A6438E80} = {64D54BBB-13D1-4655-A149-CFB754820BD2} - {789E23FE-E8F4-4935-AF43-4A84D25AD130} = {5B27FAB7-E5FE-4FF2-8F39-900E177D5E39} - {9546F4D5-9625-480F-B5BB-5D6FF9369885} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {DA626A01-8198-4E1A-A1EE-0EA4AB0B02C1} = {9546F4D5-9625-480F-B5BB-5D6FF9369885} - {F421D0C4-6EF7-48B7-9213-AFD21322E08B} = {9546F4D5-9625-480F-B5BB-5D6FF9369885} - {696BE515-B3AB-4925-969C-350F1BDA5C30} = {682157DB-17F2-40D6-B0ED-11B6C6CB064B} - {3CB3CA43-6D65-4DDE-B5E3-A9E0DF957E38} = {7004082D-53E9-45C2-B2DE-EB3CE448B64F} - {FE22EB98-C12E-4FAE-A7C2-DF65890F3084} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {87181A18-6A53-43E6-A6B1-1F867C9D3E45} = {FE22EB98-C12E-4FAE-A7C2-DF65890F3084} - {3B85171E-9A55-4605-B9B1-56F77E47137B} = {FE22EB98-C12E-4FAE-A7C2-DF65890F3084} - {8275510E-0E6C-45A8-99DF-4F106BC7F075} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {DF5EDCB1-139C-4804-9D00-C5E7DCEC104F} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {58C5FE49-3060-4D9E-B76C-352790FCD1D8} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {4F39F27E-0E21-4093-8818-D974D4716C14} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {BC0CC534-0285-4471-B99E-584BEFEC94DB} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {97F5B320-B18E-4275-B0E9-BB5FABDA952F} = {380430A1-C02F-4943-8A52-FDFA9F7735F0} - {E9216C2B-A12B-48C3-8F5D-C67C5D75EF02} = {97F5B320-B18E-4275-B0E9-BB5FABDA952F} - {28B6FDEF-3DC0-42E0-8913-C7D33CE93368} = {97F5B320-B18E-4275-B0E9-BB5FABDA952F} - {22F70908-5E62-4185-B76B-F0C5B952F8AE} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {2F08930D-5646-4D74-AAA2-9E51C93D1192} = {881FE4C3-1553-4CA1-B430-DDD37B3493AB} - {0CD27C71-4A3C-4AA0-8258-F7430F875984} = {2F08930D-5646-4D74-AAA2-9E51C93D1192} - {BCD032DD-D088-4F72-B80F-48D0EA845F87} = {881FE4C3-1553-4CA1-B430-DDD37B3493AB} - {58955E85-0D55-45FF-97EE-BDD096522954} = {BCD032DD-D088-4F72-B80F-48D0EA845F87} - {D708256C-4A68-4B15-AAE5-6EFA41223A70} = {BCD032DD-D088-4F72-B80F-48D0EA845F87} - {8DAC59BE-CB96-4F04-909C-56C22E7665EB} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {E763DA15-8F4E-446C-99B8-309053C75598} = {7A331A1C-E2C4-4E37-B0A0-B5AA10661229} - {3ADC50B9-2EBB-422A-8424-F9FC67841CA1} = {E763DA15-8F4E-446C-99B8-309053C75598} - {05A169C7-4F20-4516-B10A-B13C5649D346} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {ECAA6AB0-CFF3-4D1B-AA25-2A0F72730987} = {68C2D913-06D4-4EAC-9283-78465BF214E1} - {C8415333-2A64-4FF0-8FC9-652694A11A77} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {9EF96554-7BDB-4679-B08E-7D98FAE6A2AA} = {C8415333-2A64-4FF0-8FC9-652694A11A77} - {7391E144-5087-4E64-94D8-E0700D57739C} = {C8415333-2A64-4FF0-8FC9-652694A11A77} - {ED6E6F06-D620-41BC-8F12-01480BF49381} = {E6639EAB-40B0-4BB6-A56B-25ECC4B6D3D9} - {3DC5D8DB-5DA3-4793-B090-9CB89A158B51} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {F80F007A-AEE5-478A-8A5E-2A4EEDA9FD42} = {3DC5D8DB-5DA3-4793-B090-9CB89A158B51} - {31B7F6ED-C7B6-4FDB-ADA9-4E5B6B8FCAB6} = {3DC5D8DB-5DA3-4793-B090-9CB89A158B51} - {C1409A8F-555A-4A88-B803-C6D3E8B6C3B0} = {2DB7E3C7-D213-4609-95DD-72561F23AB58} - {72AA2B1F-1FE7-48B5-968D-89E492F2139D} = {C1409A8F-555A-4A88-B803-C6D3E8B6C3B0} - {AA465A56-D9D0-4684-95B0-192F4436C582} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {670B30E8-4E6F-453F-A5B7-B6DB3D83FE42} = {AA465A56-D9D0-4684-95B0-192F4436C582} - {F0540D2E-1A56-4AFE-9DC4-EA7E5CB8E10B} = {5CF8E05A-C8DD-4551-8542-844A217B39F2} - {8CB43443-E02C-4D04-9E96-A4916E5C83C2} = {C59FBB3C-3A7F-4744-A823-1EB92C5B23A2} - {3957A90B-1DB9-4AA0-A8B8-E7B0B42B0101} = {3D330C1E-D773-4BA8-9E91-123544B0D672} - {529AB96D-853D-41B4-ABE6-D0DED4A50DFD} = {DCBBDB52-4A49-4141-8F4D-81C0FFFB7BD5} - {402C3AC9-1B1D-4523-AB80-A992CEA85F57} = {225AEDCF-7162-4A86-AC74-06B84660B379} - {66ADF274-B5C4-4D0A-91D9-F7FB76ADBF85} = {AA465A56-D9D0-4684-95B0-192F4436C582} - {EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {4DDE5F1F-B014-4096-9F8B-E5F2C96DF997} = {EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1} - {F6BE35A7-1D5C-416B-8B32-61CAA2A95FF0} = {BF4B36D6-D1FA-41A3-9CB3-2E1D2894E2AD} - {C713DCA1-B36D-44BD-ACFA-F562782AD40E} = {3D330C1E-D773-4BA8-9E91-123544B0D672} - {A2701184-BD48-4B72-AA6E-8DD1DE2F217F} = {54C42F57-5447-4C21-9812-4AF665567566} - {17DD5861-0635-46D0-84BA-6B163150AA4F} = {54C42F57-5447-4C21-9812-4AF665567566} - {2DF639CC-DFF2-44D2-9585-D1E925B5A117} = {17DD5861-0635-46D0-84BA-6B163150AA4F} - {C71CF302-0FFA-4610-9197-033B277F3065} = {17DD5861-0635-46D0-84BA-6B163150AA4F} - {09D2D765-A792-415E-B19A-18948A1C8969} = {3ACCF669-89AB-4B02-809E-E94C81271BFF} - {E7CADFE4-CDD0-4DE3-90ED-7184A969F47B} = {BF4B36D6-D1FA-41A3-9CB3-2E1D2894E2AD} - {822FF16C-A4E0-40A0-AE65-530752575261} = {E7CADFE4-CDD0-4DE3-90ED-7184A969F47B} - {71DE18B5-87F9-4D03-89BB-C3E243576F92} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {3A554C0B-2956-4152-BF31-2C8CAE5D2717} = {71DE18B5-87F9-4D03-89BB-C3E243576F92} - {9F21A235-436E-4020-A076-1DF4F89D0CA0} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {9E0B9A09-167E-4DF7-8AA4-F9323A306F90} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {F1B75625-567A-4AF3-BB68-75A4CF93F2B8} = {9E0B9A09-167E-4DF7-8AA4-F9323A306F90} - {0F5F1299-7303-49B8-BEBF-9FF3B522CE0F} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {473C0171-0AD1-473B-B1A0-93636FD77BA6} = {0F5F1299-7303-49B8-BEBF-9FF3B522CE0F} - {F910B1B0-3641-4F3B-8336-5230FAB8FAD5} = {0F5F1299-7303-49B8-BEBF-9FF3B522CE0F} - {D15A9C48-00F1-423B-B14D-6EACE976E2F0} = {F910B1B0-3641-4F3B-8336-5230FAB8FAD5} - {39B8B1ED-790E-4FF5-8D68-B1153655F87B} = {F910B1B0-3641-4F3B-8336-5230FAB8FAD5} - {7A3BDEED-70A7-4F2A-82D8-6A8752CE2859} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {886DDAF8-052A-4AC5-87FD-96EBCBAC2B7C} = {7A3BDEED-70A7-4F2A-82D8-6A8752CE2859} - {83E043A0-50FF-48AB-AA1D-EE88B64A1E4F} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {30BB8038-D162-4171-9404-4041FC7A5BA7} = {83E043A0-50FF-48AB-AA1D-EE88B64A1E4F} - {64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {5750A285-B528-4A6C-953F-7838824E5F81} = {64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C} - {C4C7C4FC-F83C-4DFA-803A-6E88001DF0F2} = {64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C} - {85179BD4-F1B1-4FDB-ABA9-3FDB0F5FF1B3} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {5D91E19A-E6EB-4ED7-BAC8-B41DEB9F4704} = {85179BD4-F1B1-4FDB-ABA9-3FDB0F5FF1B3} - {BCF3D807-5368-4201-8313-34493E60020B} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {5EBE548A-E450-466B-B448-D6662E659E58} = {BCF3D807-5368-4201-8313-34493E60020B} - {58C3FE63-C364-4AF8-B575-2F65A7565B1F} = {BCF3D807-5368-4201-8313-34493E60020B} - {8B6F219F-CE89-4704-8586-F9953F5FF4AB} = {BCF3D807-5368-4201-8313-34493E60020B} - {2AFCDBA1-0697-4134-BF22-17C145EB2710} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {8A2FFCF4-548A-4527-AB0A-CE2F3402FB0D} = {2AFCDBA1-0697-4134-BF22-17C145EB2710} - {62F3EF13-4A89-4912-A22C-31981278B074} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {CE8BC4CA-0068-439A-A012-6B1E764CD5D7} = {62F3EF13-4A89-4912-A22C-31981278B074} - {3D551023-1D98-479D-A41E-EBD0C05A06FF} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {861CA437-6402-4E45-9E1F-35A509E61568} = {3D551023-1D98-479D-A41E-EBD0C05A06FF} - {049030CA-4D78-4B24-A112-28C61AB2509C} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {5EE9EEE3-C472-4A6D-8DB8-C82998584E2C} = {049030CA-4D78-4B24-A112-28C61AB2509C} - {B714B9AB-0A8F-4FB0-902E-6B73CA60DAB8} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {805264B9-36C9-49D6-BA34-63D0050C9D6E} = {B714B9AB-0A8F-4FB0-902E-6B73CA60DAB8} - {2654DB24-E7E6-45B0-B350-3226D2D0FDC7} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {C2645178-0B55-47D4-B9CA-A6FFA14E616E} = {2654DB24-E7E6-45B0-B350-3226D2D0FDC7} - {D38C4227-7692-4C66-B8C2-8A411B46DCE3} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {8192DC13-6878-43C1-B657-96420C3BA9F8} = {D38C4227-7692-4C66-B8C2-8A411B46DCE3} - {A127217D-26AF-43C4-96A0-7080EB6F1D65} = {B7ED4805-AD3E-4D76-BC5B-700A31488493} - {19BE6DF6-24F5-4F58-86C8-A9D8368427A7} = {A127217D-26AF-43C4-96A0-7080EB6F1D65} - {68E93233-6FF3-41FE-8161-3B7F457473C8} = {A127217D-26AF-43C4-96A0-7080EB6F1D65} - {8AAFAD2A-B273-4DB5-8DC9-3CA832248A82} = {B7ED4805-AD3E-4D76-BC5B-700A31488493} - {897EECDD-628F-4233-B1BF-A13F687057BC} = {8AAFAD2A-B273-4DB5-8DC9-3CA832248A82} - {E7F7B6E9-3374-4C37-8FDA-CB3682442D51} = {8AAFAD2A-B273-4DB5-8DC9-3CA832248A82} - {41B519F7-CF19-4FB4-B96C-E38A7EF45F70} = {DE5C0805-1C4A-4C70-B613-89EE2EA0B757} - {122907A1-AD5F-40B3-9D61-05A3F8CF859D} = {41B519F7-CF19-4FB4-B96C-E38A7EF45F70} - {5A3DF44F-53B3-4EC0-A0EF-EFE78190C48D} = {41B519F7-CF19-4FB4-B96C-E38A7EF45F70} - {364376C6-E886-482E-B79C-366E5DAB8A5B} = {3D551023-1D98-479D-A41E-EBD0C05A06FF} - {BDC1141A-DA5D-48D4-B0A7-61612D4F8024} = {364376C6-E886-482E-B79C-366E5DAB8A5B} - {4D08EC2C-A488-414E-8739-341E197773DB} = {364376C6-E886-482E-B79C-366E5DAB8A5B} - {07AAFECB-4C42-4533-80D5-0452989FA0F7} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {81143573-811E-4F61-9331-6B7173DBA67C} = {07AAFECB-4C42-4533-80D5-0452989FA0F7} - {F4160B93-03F2-4C0F-BEBA-C89F02CACD17} = {81143573-811E-4F61-9331-6B7173DBA67C} - {35AA4E31-D157-4AD2-B04F-EE3956795420} = {07AAFECB-4C42-4533-80D5-0452989FA0F7} - {21F89E50-DF06-435E-872B-7639BCE695DF} = {07AAFECB-4C42-4533-80D5-0452989FA0F7} - {DF86A07D-A370-4CBD-97DD-DCB09466545F} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {8C828211-F2EC-4BFD-B922-98F73D9DAB5E} = {DF86A07D-A370-4CBD-97DD-DCB09466545F} - {8EFA9CC7-D03D-4535-898C-F3B80BB19F21} = {DF86A07D-A370-4CBD-97DD-DCB09466545F} - {2E690E42-B20F-4702-9478-1707EEC7C02F} = {8EFA9CC7-D03D-4535-898C-F3B80BB19F21} - {9C7F31F8-B782-4016-9B0E-72C8CB42334C} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {6DEB6C24-3A35-4E72-BCA8-33344EEE0119} = {9C7F31F8-B782-4016-9B0E-72C8CB42334C} - {922869D9-B9FF-4828-8C6F-FCA7963DB011} = {9C7F31F8-B782-4016-9B0E-72C8CB42334C} - {ECF7A440-D5FC-473F-958C-FE27643844D8} = {58915BB2-CEF5-4CA3-8886-A61156564505} - {92820F5C-4018-4F10-A14B-0AEE619202EE} = {58915BB2-CEF5-4CA3-8886-A61156564505} - {2C76F024-8C85-4672-AC23-ACEA0FA5E9B5} = {39086512-EBC8-4061-BE34-DCCA5D1BA585} - {C520CDA2-BA0C-4427-8B26-F6B3C2FEB5A5} = {39086512-EBC8-4061-BE34-DCCA5D1BA585} - {91DD8440-7A66-4880-A0CE-BC6009D2DCFF} = {D9403AE4-77D1-44DE-8785-280C342D215A} - {A837D64D-435A-473F-8828-8E1DD95D8E4B} = {D9403AE4-77D1-44DE-8785-280C342D215A} - {4BA8A846-5B24-4F46-90B9-FFEFB889C028} = {512EFCA7-1590-492A-8D06-84744F79DA91} - {3CCE49CA-4145-401F-8963-AC28F0908678} = {512EFCA7-1590-492A-8D06-84744F79DA91} - {A1628BC4-134A-4854-9F98-B841520F1497} = {049030CA-4D78-4B24-A112-28C61AB2509C} - {C69E36EC-3972-4CDF-A467-94CBD7C691A1} = {049030CA-4D78-4B24-A112-28C61AB2509C} - {B4FCACA3-FD16-4B89-9D3D-E19C141CE926} = {9934060B-1957-40FF-83E1-5C15344E7A33} - {C9E481E5-F77D-4462-8E85-1F7FF2DCAA97} = {9934060B-1957-40FF-83E1-5C15344E7A33} - {5930AA76-C824-45F0-9D30-7EE4CB231E7A} = {C9E481E5-F77D-4462-8E85-1F7FF2DCAA97} - {5BE39E84-020F-405D-99AF-5D46928785AF} = {C9E481E5-F77D-4462-8E85-1F7FF2DCAA97} - {8C289D6B-712F-442F-A010-218784BFA4D4} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {D8DE9D37-4733-45F0-9F9D-B5A184CA1ED8} = {8C289D6B-712F-442F-A010-218784BFA4D4} - {99CB7560-3B6F-447B-880A-C5A53F1E56F9} = {8C289D6B-712F-442F-A010-218784BFA4D4} - {605D0C19-6E99-4A73-B336-1AD700AE93C0} = {512EFCA7-1590-492A-8D06-84744F79DA91} - {73BC406B-4D98-4BE0-A756-19F0F3D2B587} = {8AAFAD2A-B273-4DB5-8DC9-3CA832248A82} - {2292C14D-151C-4AB7-AA91-7F0165E2073E} = {73BC406B-4D98-4BE0-A756-19F0F3D2B587} - {45211BB8-4F51-427D-ADA2-7478E3398A60} = {27223011-E8E9-4178-9377-44A7B3CBCC21} - {F8410622-2764-4B05-BEC4-8D25CABBC45A} = {45211BB8-4F51-427D-ADA2-7478E3398A60} - {2E4D61F1-F504-450E-B4C2-11C5214E7200} = {9AA5D0E4-B341-4570-B3E4-081E6653471D} - {5EC5F788-458B-4957-8E33-ADD82DB6E420} = {2E4D61F1-F504-450E-B4C2-11C5214E7200} - {491D5D41-4424-4642-AF7C-A7DD186CD282} = {9AA5D0E4-B341-4570-B3E4-081E6653471D} - {7135BA54-DE2E-42CD-8261-1A88907843FC} = {491D5D41-4424-4642-AF7C-A7DD186CD282} - {A72BB350-8903-4914-9583-A156B66419EB} = {491D5D41-4424-4642-AF7C-A7DD186CD282} - {7CBB1320-BF86-4B32-9D2B-273A45057727} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {186AF4F9-9AFF-4395-9340-006F78D85DFB} = {7CBB1320-BF86-4B32-9D2B-273A45057727} - {F6BC5402-310D-4B1F-A018-99FD1D6C183A} = {7CBB1320-BF86-4B32-9D2B-273A45057727} - {6BB8474D-B8E1-4B77-AA44-253ACA5E686D} = {F6BC5402-310D-4B1F-A018-99FD1D6C183A} - {8E5588B6-0557-41CF-9A0B-1A0B412754E1} = {7CBB1320-BF86-4B32-9D2B-273A45057727} - {48BEABD3-2446-466C-8694-D34EF0949369} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {F0F3E6B1-5BB5-444E-B965-F2A9FFAB26CF} = {48BEABD3-2446-466C-8694-D34EF0949369} - {609FEA30-36D6-4FEB-AF07-7BE2BCD4D00B} = {48BEABD3-2446-466C-8694-D34EF0949369} - {A01B523B-35CA-4C14-B792-3887F8741E99} = {48BEABD3-2446-466C-8694-D34EF0949369} - {166E48ED-9738-4E13-8618-0D805F6F0F65} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} - {AC0CBDEB-B750-4B81-AEC3-F218A384FB16} = {166E48ED-9738-4E13-8618-0D805F6F0F65} - {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B} = {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1} - {399AC9FB-7DCA-4868-B299-2EE4C88D41AD} = {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1} - {C2FDF6AA-A8BD-40A6-81AD-14687927E9FC} = {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1} - {91BD5675-6674-4053-AD04-19F28DD3BAE5} = {C2FDF6AA-A8BD-40A6-81AD-14687927E9FC} - {4F8ED87D-E4D9-4941-94D7-D529D83DDBA0} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {56BA4AB2-B915-46DC-AE67-234D60BFEDBC} = {4F8ED87D-E4D9-4941-94D7-D529D83DDBA0} - {532D447F-0CDE-4BA6-B181-DD1FB4B07BF0} = {4F8ED87D-E4D9-4941-94D7-D529D83DDBA0} - {2D6567CC-2BAE-4208-BBD0-F8D2F6E57154} = {4F8ED87D-E4D9-4941-94D7-D529D83DDBA0} - {9ECF118E-D7A5-4805-B698-DE9013BB91C6} = {4F8ED87D-E4D9-4941-94D7-D529D83DDBA0} - {5BF572A5-24AF-4815-BF0C-F57DA650207D} = {9ECF118E-D7A5-4805-B698-DE9013BB91C6} - {036FB9FC-7F26-4982-B94E-2C32B4C836E1} = {D67E977E-75DF-41EE-8315-6DBF5C2B7357} - {559F1CCF-7E01-4E27-AB45-2E3B6B4984E1} = {036FB9FC-7F26-4982-B94E-2C32B4C836E1} - {EE65018D-FA12-461D-B2C5-44CA6E385530} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {A8E1962B-688E-44B3-81F3-BBB9891534CE} = {EE65018D-FA12-461D-B2C5-44CA6E385530} - {8A745E35-8098-4EB4-AC55-587B9F0DC4BE} = {EE65018D-FA12-461D-B2C5-44CA6E385530} - {8C4006DF-FF48-46B6-A124-10B1EEAA266E} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {F5C54062-B19C-4291-A816-F1B5A167369A} = {8C4006DF-FF48-46B6-A124-10B1EEAA266E} - {056535BC-3E30-49E2-BE3B-630C62E641A5} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {088C37A5-30D2-40FB-B031-D163CFBED006} = {056535BC-3E30-49E2-BE3B-630C62E641A5} - {B5F938FB-37DF-4201-9537-E043513701D7} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {2C155AA6-B549-4FCA-A9A0-34F28A9A4160} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {1CF04156-B477-4B88-A25B-15D4E6F587D7} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {AC688973-3FAD-4A04-99C9-414782E5AE42} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {58BAA9A7-4A2A-459A-BD41-086E8F83022D} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {F4F604C5-C4BB-4217-94DB-2A51EC4AAEA4} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {185D4D67-FFE4-4673-8F3A-AD77EA2D3931} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {D8BA7FEB-2720-4CCD-8C7F-FAAC5D8D0633} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {975E7F46-8044-463E-89E1-56EB0F7913B8} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {BAD5E853-2C9D-41D5-844D-470BC33B43E8} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {9C2BD6C2-803D-4D19-BD40-860F1B340DC7} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {A8096362-6304-4DAF-A091-978BE764FF30} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {0FD49F5F-2950-43B8-8467-78596A4421AC} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {773877FC-7C04-48F9-BC1D-9B4231D9B6D1} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {7DFECECC-E30C-4217-9746-86A8D652E110} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {B8825E86-B8EA-4666-B681-C443D027C95D} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {3936CFC3-AA2D-40CF-A5CB-3C676D99BB90} = {B8825E86-B8EA-4666-B681-C443D027C95D} - {70F83D54-91BF-4BED-8A82-F310D640C9F8} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {4BCC89AB-3429-4C38-AFF9-DBBD605075F6} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {12EFA8EE-25FC-4CAD-98AC-B2B97368579A} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {CA6DD42B-2DBC-4061-91E8-C91FA8F4C410} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {199639E9-0FAA-49C4-A75F-95EE71F32CC0} = {CA6DD42B-2DBC-4061-91E8-C91FA8F4C410} - {F634FAC8-1CE5-4AD2-8A8B-92CFBB127D3A} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {039266E2-5F43-4B94-86DA-8BDD7BE8885F} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {EA846E30-4F38-4315-844F-D5BC20F74B07} = {515282B6-6EF9-46E0-8EF1-DBD1CD948D9E} - {3BEA35BC-784F-4892-AF1F-90177B8362A1} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {9D70EEB0-1E6D-4C07-8B5F-5D7E4CD5EE55} = {3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9} - {2A92D94B-9825-42D3-AB33-52E3010D74E2} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {E27910E1-6CCE-41B2-97DD-AE874007B592} = {2A92D94B-9825-42D3-AB33-52E3010D74E2} - {72879779-4CAC-4CB0-A052-FF60EB386B7A} = {2A92D94B-9825-42D3-AB33-52E3010D74E2} - {5BD69C96-623F-427B-9AAF-67C0817A9A9A} = {CA6DD42B-2DBC-4061-91E8-C91FA8F4C410} - {D10BA44E-219B-4528-98F5-0CB0FCF17017} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {EAF56BE6-683A-4C34-AC2D-22770EC13915} = {819B136D-B8B6-46AE-8C4F-5469BBBFC46B} - {6DA1B006-0D5B-4C92-8ED6-9F1FB99C187A} = {D685AF51-2CE2-4CD8-86AA-FB0EDD47533F} - {332A8F84-FC5B-44A5-95A2-379B69C6E755} = {0322CF4A-9701-4E7E-9827-BC7DFFA78842} - {A28B3D43-619F-44A9-9463-78F0E2474351} = {5F51EB21-20E2-4793-A137-2E18D50696C5} - {926D431D-D95F-42BA-817B-DFEAF697E007} = {7ACD11D4-4682-4936-AFF6-DAC64C636612} - {00D4573D-B61D-48C2-BCB4-027A19EB3247} = {79C7F0D4-7B1A-46BF-8932-5C2E971C5925} - {46AB5306-4FF5-4A4B-8009-DFCFAB178442} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {EFDFAA40-91FA-4896-BC6B-06A30CE44DEC} = {46AB5306-4FF5-4A4B-8009-DFCFAB178442} - {5500EB93-4F36-4929-9730-E593DBC2B7F5} = {46AB5306-4FF5-4A4B-8009-DFCFAB178442} - {0F346D2C-FF9F-4F1A-AB0D-BA6F1F731596} = {70AD2DB0-47D7-492F-817A-34BCAFD861C4} - {19F3DD0C-2FA6-47A5-83A3-F66D7CAA5F70} = {D21F1804-4690-4B00-BC6A-2147C14BF1B2} - {FFA69E3E-1168-49F1-AF95-D16C08E34BC5} = {9578BB4F-D805-4581-9AAE-A66002BFDA1F} - {DE9982E8-CBC6-4CD7-B322-AC0D792F7136} = {3691F0FE-6A8D-4F99-95EB-2D3AD3F9B712} - {687BD42C-54CD-4E80-A877-6E278AE21105} = {DA5E4C5A-E62C-47CD-9557-65F747638BAD} - {F0A4EEF4-EBD5-4F01-96D0-183478ECC797} = {056535BC-3E30-49E2-BE3B-630C62E641A5} - {BD57D455-9B11-4BA6-9F1D-6B289284642D} = {056535BC-3E30-49E2-BE3B-630C62E641A5} - {0C6E7B48-5D25-4E83-8958-B26DDC8E2BB3} = {3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9} - {16F6B07A-3ECA-4BFB-ABDF-DE1D224D2AF3} = {3B0F71CD-980F-48DF-AEDA-A5CDF001F7A9} - {6D9C0B4C-A902-4F37-921F-1A5B14405463} = {4B6BA2CC-8DE7-4070-A912-D51375998553} - {59BDE9D7-C177-4A40-B1EF-267FB260A59C} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {9FF8728F-B953-4481-9B9F-11351CA0BFE6} = {59BDE9D7-C177-4A40-B1EF-267FB260A59C} - {586ECE45-FD14-4520-9823-0A9B043FCC6E} = {59BDE9D7-C177-4A40-B1EF-267FB260A59C} - {6BDD94A4-91DF-40F5-A1CE-88D46F26084F} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {08D53E58-4AAE-40C4-8497-63EC8664F304} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {5D3C520F-0CA7-4759-A563-40496545FA48} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {4F2C221D-7D0B-46B3-9362-2D68F92ECF29} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {D0E73F40-0DA9-42A9-8A88-EED8D5EFBEFB} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {6DE03095-7EAC-41DF-8AE4-3018ED29BC61} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {18CE63FC-3BFE-47DF-A8D7-9D716FEB04C9} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {A4C26078-B6D8-4FD8-87A6-7C15A3482038} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {F1A6BA04-853E-43B5-B27E-54558603837B} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038} - {3163C56E-99BC-4BD1-8880-4F94A2407741} = {F1A6BA04-853E-43B5-B27E-54558603837B} - {776BFCDC-8591-4E3D-BD0D-858A188A033D} = {66A0F71A-FFB5-4763-913E-FB4A4F17EAA2} - {ED34C082-619E-4CCB-9D26-4E2375633FA2} = {AB316CF4-D9C3-427E-8460-7C5235BED45E} - {CF9D35EC-CA9B-481D-BAAC-5D4654732AB9} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {31B7D2B1-47AF-432B-BF07-73916EF238EE} = {CF9D35EC-CA9B-481D-BAAC-5D4654732AB9} - {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {A2A2BBB7-990D-4EDE-BDF7-C8AD5C67E5F9} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {1EA4C71B-CF8C-45A4-90A9-2F7F78A94173} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {256DCEBC-1E1D-46B2-9031-E358E850F3C5} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {1D1E165C-435A-4716-8769-31A51632D7C2} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {AD25BD40-D6D6-4D82-A700-FE2376EE27A8} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {817D138C-19D8-4264-8FAF-660B05AC030D} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {1FE68FDC-F122-4605-B49D-FDC8C17324A5} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {C4CE88C8-1E48-49FC-A344-D6EE92FC9894} = {C75B1FB3-6BB7-411A-B76C-06E5E0C3D957} - {45A7FB48-3811-4DAF-989C-141EE4AEFB03} = {62F3EF13-4A89-4912-A22C-31981278B074} - {A75C9764-FC22-4AE1-9704-5519CB556FC3} = {62F3EF13-4A89-4912-A22C-31981278B074} - {86741306-CF87-4AEA-9015-188A3CECBFBC} = {A75C9764-FC22-4AE1-9704-5519CB556FC3} - {2FBBC39E-DA8E-4B92-9A0D-3DF6D5BA9EAC} = {EB593520-0853-4642-A404-675FC318D181} - {6592343C-B7B7-4687-8942-1C2241414A02} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {618D85A4-F111-41AB-A9B6-BBBB8A395209} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {DA64A7BF-F869-414C-A096-076723E55C61} = {618D85A4-F111-41AB-A9B6-BBBB8A395209} - {974EA46A-4658-4767-A9AA-A0FF143CF725} = {14A4E3F5-04BB-4062-84AE-1A887C307B17} - {06C034BE-0079-4AC3-815B-D71AC44DF3A3} = {974EA46A-4658-4767-A9AA-A0FF143CF725} - {9DD484F7-062B-43D4-AC70-0E226BA168FF} = {974EA46A-4658-4767-A9AA-A0FF143CF725} - {7FD32066-C831-4E29-978C-9A2215E85C67} = {2AB4FE8F-94FF-4C6E-B12F-9E40A9FAF9AB} - {88C2C45B-ED16-4B85-8498-E3F13679629D} = {7FD32066-C831-4E29-978C-9A2215E85C67} - {E19E55A2-1562-47A7-8EA6-B51F2CA0CC4C} = {99F9BBC5-46AE-40DC-A675-5E56ACA3C5C8} - {F6B80862-7D74-4362-B5E2-AEBF116F2B19} = {E19E55A2-1562-47A7-8EA6-B51F2CA0CC4C} - {602CE06C-E973-401D-8877-90957E613646} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {BECDA951-C285-485D-BFE6-F770BC8C9EB2} = {602CE06C-E973-401D-8877-90957E613646} - {E1CE011A-47BD-496D-B9EB-2766C198A619} = {BECDA951-C285-485D-BFE6-F770BC8C9EB2} - {3BB0B48C-4ED8-48C2-B8DF-8B92354CAFB5} = {602CE06C-E973-401D-8877-90957E613646} - {966E6A8A-4D9C-4B9E-92DB-06F5144F5DC8} = {A39335E5-7A26-4CFD-BF3B-2CFE75113498} - {9819CE5A-0E8F-42C4-B628-F6B3A1B2550F} = {966E6A8A-4D9C-4B9E-92DB-06F5144F5DC8} - {3FE077EF-DD37-4652-B71C-3174D4C485E2} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {A641BE9F-113E-4F2F-8DC0-995E97C5BD27} = {3FE077EF-DD37-4652-B71C-3174D4C485E2} - {7F67C1C2-7352-414F-9149-1F16D53C7435} = {A641BE9F-113E-4F2F-8DC0-995E97C5BD27} - {046AFDDE-B31B-4205-B059-0E8E194E954D} = {3FE077EF-DD37-4652-B71C-3174D4C485E2} - {0AEE12FF-FDFF-4A75-A77E-93B1E24E5587} = {3FE077EF-DD37-4652-B71C-3174D4C485E2} - {3FBD8F55-38A8-4263-A98D-AD723C6D9C44} = {0AEE12FF-FDFF-4A75-A77E-93B1E24E5587} - {7E4C524F-94E1-4F7F-9498-FD503BC97CEF} = {0AEE12FF-FDFF-4A75-A77E-93B1E24E5587} - {8A241C1B-18FA-4237-A354-29D7010C1067} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {119D3F97-535C-45BF-AC4C-FEDFE0FA5D7E} = {8A241C1B-18FA-4237-A354-29D7010C1067} - {148D77C2-C6DA-45FA-90A6-761EE01066D5} = {8A241C1B-18FA-4237-A354-29D7010C1067} - {A43BC0BA-9C01-4AEC-B763-5E5AA8C8DBAB} = {148D77C2-C6DA-45FA-90A6-761EE01066D5} - {451FF6F1-E6B4-42FF-A8AA-2731F3C4CCF4} = {148D77C2-C6DA-45FA-90A6-761EE01066D5} - {5F0044F2-4C66-46A8-BD79-075F001AA034} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {7BAE6185-D148-4388-B65F-34FD22CCD824} = {5F0044F2-4C66-46A8-BD79-075F001AA034} - {197EB396-53AA-4C29-8A59-3FEACD3703B6} = {7BAE6185-D148-4388-B65F-34FD22CCD824} - {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} = {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} - {7A88CF78-413B-4EC7-A2E5-853C7E8075A5} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {0D162D66-86E8-40AA-84EA-AA1EDA2482BC} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {294EC05D-B818-4CD5-AF6E-95B3F23607FC} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {892333B9-689B-4E51-82FF-CC5376961A36} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {4D4CB590-9F66-4D75-B439-D3B445975A55} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {3D423A77-84D4-4214-8F6F-CD532A56A126} = {0338EC37-E5AD-47DA-9502-24A5F7433ADE} - {4C8F04E9-24EC-496B-88FA-62DE096F1C3D} = {3D423A77-84D4-4214-8F6F-CD532A56A126} - {257A6551-7987-4C5C-BE6F-376094477371} = {3E3F7422-36C0-47E4-8B4E-052C2E8EB439} - {350A2B0C-246F-4CC1-A194-32DF8C4427A2} = {A6D39EEA-CC08-4ECF-BD2E-134D845876FB} - {5236B5B7-E2CD-4D20-A65C-D5803E78885F} = {350A2B0C-246F-4CC1-A194-32DF8C4427A2} - {CACBB755-08B6-4176-9390-CAD3F9962E80} = {350A2B0C-246F-4CC1-A194-32DF8C4427A2} - {B84D149A-3DD6-47EA-B78E-D36EF2379D6B} = {A0FFAF00-D628-4BDB-BE68-8DBA21FBBEA2} - {75F3739D-9404-44B0-8F1F-1BDE4542047A} = {DF5E3AC1-94B3-4B8A-B534-9D30924A8E6B} - {5095E70C-6DEE-486E-A9D0-E8849214EE4E} = {5BC5A805-DCA0-41DF-91B8-520B5DAD57DA} - {A6A95BEF-7E21-4D3D-921B-F77267219D27} = {5095E70C-6DEE-486E-A9D0-E8849214EE4E} - {4DC9C494-9867-4319-937E-5FBC0E5F5A51} = {B6081DA9-738E-4088-92DD-7FFA200523C9} - {245939DA-D68D-4B5C-A95E-D3B6923614FF} = {2C022280-340C-43DC-B63D-5A644F0ECBF2} - {39CB00C0-D775-4DEC-BEAA-94234BA8A1FE} = {245939DA-D68D-4B5C-A95E-D3B6923614FF} - {CD9041EE-8C47-4C6F-8A21-6EDCBC0D409E} = {2C022280-340C-43DC-B63D-5A644F0ECBF2} - {DEA32B7F-E9B4-4E87-8B47-30555D286D93} = {CD9041EE-8C47-4C6F-8A21-6EDCBC0D409E} - {6248B017-2912-4989-9994-2685C4D88E9A} = {CD9041EE-8C47-4C6F-8A21-6EDCBC0D409E} - {4C93CC04-1EE4-48EA-8FAE-DC2283528BEB} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {AA2F0EF8-FB46-4F05-89D4-025F348ABDD2} = {4C93CC04-1EE4-48EA-8FAE-DC2283528BEB} - {FED63417-432B-49CD-AB4B-44ADA837C2E7} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {898F7E0B-1671-42CB-9DFB-689AFF212ED3} = {FED63417-432B-49CD-AB4B-44ADA837C2E7} - {65EE0531-4533-407F-A9CA-2EBCDC444397} = {898F7E0B-1671-42CB-9DFB-689AFF212ED3} - {0B200A66-B809-4ED3-A790-CB1C2E80975E} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {A4EECF29-6E66-4E7F-B781-A169B0C2AB29} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {52433D20-35EA-48CC-BB4A-4DFE3023670B} = {A4EECF29-6E66-4E7F-B781-A169B0C2AB29} - {8562A154-B802-411B-897C-89621C4B05CB} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {C911DC19-9556-4DCC-9794-AD907137348F} = {8562A154-B802-411B-897C-89621C4B05CB} - {F31AC68C-2D71-492C-BA4B-41FE503FFD56} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {4E6AFAD6-C0B7-47AD-8C16-D903CCA4AE73} = {F31AC68C-2D71-492C-BA4B-41FE503FFD56} - {4FB3DFA0-3124-474B-A908-694DF4FC1ABB} = {F31AC68C-2D71-492C-BA4B-41FE503FFD56} - {192363C9-2D7B-47BD-A1A3-C6FEC6DF5D9D} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {4655E193-E5F4-449B-B1A3-6358AC8D3A27} = {192363C9-2D7B-47BD-A1A3-C6FEC6DF5D9D} - {7A29AAAB-2B4B-4D47-A315-23A0E830E214} = {192363C9-2D7B-47BD-A1A3-C6FEC6DF5D9D} - {755D9C6A-F036-4122-8334-96F0CC70F370} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {AB8C9BF4-3134-449B-BA3F-BAFDE9394491} = {755D9C6A-F036-4122-8334-96F0CC70F370} - {3CE23673-047A-47AA-A028-7F2942805870} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {7B1E6D8C-2658-4FD2-8BB2-672E9E56872F} = {3CE23673-047A-47AA-A028-7F2942805870} - {BE2C2FE4-7BC7-4A4B-A8B8-19FF0648DEFD} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {EBE144DD-577E-4E98-BFEB-94E479753927} = {BE2C2FE4-7BC7-4A4B-A8B8-19FF0648DEFD} - {A1B75FC7-A777-4412-A635-D0C9ED8FE7A0} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {DD63EA3C-929C-48FF-8E8A-8F3CC553E93B} = {A1B75FC7-A777-4412-A635-D0C9ED8FE7A0} - {34E40892-48C1-4D3D-AB49-FAC3C4C00B42} = {755D9C6A-F036-4122-8334-96F0CC70F370} - {E5BE8CB1-57A8-48FD-9904-76A8C6B540BC} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {A8A42FB4-1B51-4290-9291-445D3A489758} = {E5BE8CB1-57A8-48FD-9904-76A8C6B540BC} - {3C8D5C14-F27B-4657-93C2-AC0E94EE683F} = {E5BE8CB1-57A8-48FD-9904-76A8C6B540BC} - {9883418F-C427-426E-9021-E3F1BAF33E6B} = {5FF36127-063D-4D3E-9429-3BFD32713FEE} - {49016328-4D32-46E4-A4D2-94686ED38EA2} = {166E48ED-9738-4E13-8618-0D805F6F0F65} - {A34041A8-20B9-4DE8-B336-8A900BDAD4EF} = {49016328-4D32-46E4-A4D2-94686ED38EA2} - {31405D54-645D-490B-9041-88119D8B1B47} = {49016328-4D32-46E4-A4D2-94686ED38EA2} - {689FE2B6-EDEE-477D-9F4F-91B0B2E73F4D} = {49016328-4D32-46E4-A4D2-94686ED38EA2} - {C3722C5D-E159-4AB3-AF60-769185B31B47} = {166E48ED-9738-4E13-8618-0D805F6F0F65} - {10959BB7-197C-4DE1-A2F2-CA9445E3591F} = {C3722C5D-E159-4AB3-AF60-769185B31B47} - {3297D10B-B32A-4F70-8200-2B727C759C8D} = {C3722C5D-E159-4AB3-AF60-769185B31B47} - {8EAE1C36-4A33-4A96-BACD-3FDC35844249} = {49016328-4D32-46E4-A4D2-94686ED38EA2} - {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} = {33CAD745-5912-47D3-BAF3-5AE580FED275} - {C0B46E28-F6BB-45C7-A7B1-9E294FCB0895} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {B49E037F-1F0A-46CA-9977-1987465C306C} = {33CAD745-5912-47D3-BAF3-5AE580FED275} - {D07B2752-8919-4CFE-8438-DFAFE91A4AB0} = {B49E037F-1F0A-46CA-9977-1987465C306C} - {ABC4EF1D-3525-41A9-929D-0FF7CEED4DDB} = {33CAD745-5912-47D3-BAF3-5AE580FED275} - {65EC29AD-91CA-49BA-B1FC-D3DF127BE887} = {ABC4EF1D-3525-41A9-929D-0FF7CEED4DDB} - {45A023F9-C7E7-42CA-968B-5FCE9EC626BC} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {8A6992D5-478C-49E4-936F-EA97E5850A7D} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {7107FC61-E540-4946-A090-A0E0D8357505} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {514D41F9-8D97-49A6-8C7A-74545358E2CD} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {1B635E97-715B-4F8D-AE58-4553C7B07016} = {EE74FCEC-542A-4B66-B0A9-49B28049C203} - {F8AB0D33-1082-4F41-90E7-77C06EDD983D} = {1B635E97-715B-4F8D-AE58-4553C7B07016} - {4BBD404C-5588-49C4-A320-C5B1D3532B18} = {EE74FCEC-542A-4B66-B0A9-49B28049C203} - {647F0202-165F-4E98-A798-B2B3113050EC} = {4BBD404C-5588-49C4-A320-C5B1D3532B18} - {0C3C1602-BE06-4DDE-835F-A0DE1563808B} = {D69B5668-86EF-4CC5-814B-113BAF740DD0} - {1F6EC9ED-55DB-42E9-BA01-F7C3A27581FF} = {89472057-8BB2-44A8-B0FC-D9F3ADB1181C} - {C69630AA-7BCC-401E-B0EE-AACFCF55F6A8} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {51A02E3E-6932-479C-A287-CC6C3611B715} = {C69630AA-7BCC-401E-B0EE-AACFCF55F6A8} - {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {7542D11F-2401-457C-992B-0473ADBD7842} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {ADFCDE19-5A3D-482D-8133-B7F419D96668} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {B43F63FE-0957-42A1-8431-B2D6E4F2958E} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {F9ED6D85-7A8D-45A6-808F-5BC0AAFC22D2} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {73788491-F1D6-41C7-838B-F9E8060E7FB9} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {6E3A74C9-EF79-45A0-AA3A-76411AA06A05} = {47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44} - {2C7F02B9-2994-4B5B-BB97-0896BCB64101} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {AB6F5423-8D5E-4A9A-BA18-3AD004CD6753} = {2C7F02B9-2994-4B5B-BB97-0896BCB64101} - {3EE7F5FE-4376-442D-BA77-82AD531DBFBF} = {47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44} - {71568623-71F9-4110-ACE2-093CD0DA911C} = {47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44} - {EDE77D0C-321A-49FD-95D7-56ED41242A93} = {47EF1A9F-89DB-4EBA-9BC1-1D4E0E12DE44} - {8BDEC645-73BD-453B-8A5C-D616BC4EA08D} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {EE9D0952-6060-4723-B329-94A2950A6762} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {132D43A2-067A-4E24-A520-45B9F14DCB8E} = {EE9D0952-6060-4723-B329-94A2950A6762} - {2EC4E939-513F-44CD-A956-498966EAC929} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {987E1C29-F124-40C8-8E6F-1B2B6A4CB62A} = {A5946454-4788-4871-8F23-A9471D55F115} - {3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04} - {48E64014-B249-4644-8AEB-CDEE8ABA0DC2} = {3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643} - {6126DCE4-9692-4EE2-B240-C65743572995} = {0508E463-0269-40C9-B5C2-3B600FB2A28B} - {46FB7E93-1294-4068-B80A-D4864F78277A} = {6126DCE4-9692-4EE2-B240-C65743572995} - {25FA84DB-EEA7-4068-8E2D-F3D48B281C16} = {6126DCE4-9692-4EE2-B240-C65743572995} - {19974360-4A63-425A-94DB-C2C940A3A97A} = {6126DCE4-9692-4EE2-B240-C65743572995} - {ADF9C126-F322-4E34-AFD3-E626A4487206} = {6126DCE4-9692-4EE2-B240-C65743572995} - {3D3C7D9B-E356-4DC6-80B1-3F6D7F15EE31} = {6126DCE4-9692-4EE2-B240-C65743572995} - {8A59AF88-4A82-46ED-977D-D909001F8107} = {6126DCE4-9692-4EE2-B240-C65743572995} - {E235DAAD-FE73-469E-B16F-F2B8E872E217} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {CE5D01C2-6BBD-4F33-A1C4-A1479DA99CAD} = {E235DAAD-FE73-469E-B16F-F2B8E872E217} - {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} = {E763DA15-8F4E-446C-99B8-309053C75598} - {C3A0F425-669F-46A8-893F-CF449A6DAE56} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} - {19189670-E206-471D-94F8-7D3D545E5020} = {00B2DD87-7E2A-4460-BE1B-5E18B1062B7F} - {E9408723-E6A9-4715-B906-3B25B0238ABA} = {6276A9A0-791B-49C1-AD8F-50AC47CDC196} - {8DA61885-B95E-4BA1-A752-C79B6597FC44} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {D62AF49B-F9FE-4794-AC39-A473FF13CA81} = {D67E977E-75DF-41EE-8315-6DBF5C2B7357} - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {1EAC8125-1765-4E2D-8CBE-56DC98A1C8C1} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {CAC1267B-8778-4257-AAC6-CAF481723B01} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {7F87406C-A3C8-4139-A68D-E4C344294A67} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {1533E271-F61B-441B-8B74-59FB61DF0552} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {7E268085-1046-4362-80CB-2977FF826DCA} = {D62AF49B-F9FE-4794-AC39-A473FF13CA81} - {7D2B0799-A634-42AC-AE77-5D167BA51389} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {9788C76F-658B-4441-88F8-22C6B86FAD27} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {1970D5CD-D9A4-4673-A297-179BB04199F4} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {A40350FE-4334-4007-B1C3-6BEB1B070309} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {A40350FE-4334-4007-B1C3-6BEB1B070308} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {F1792637-28B9-4F2A-B318-FA923C365049} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {C1E7F837-6988-43E2-9E1C-7302DB484F99} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {2A91479A-4ABE-4BB7-9A5E-CA3B9CCFC69E} = {C1E7F837-6988-43E2-9E1C-7302DB484F99} - {7CB09412-C9B0-47E8-A8C3-311AA4CFDE04} = {C1E7F837-6988-43E2-9E1C-7302DB484F99} - {22D7D74B-565D-4047-97B4-F149B1A13350} = {2A91479A-4ABE-4BB7-9A5E-CA3B9CCFC69E} - {B06040BC-DA28-4923-8CAC-20EB517D471B} = {22D7D74B-565D-4047-97B4-F149B1A13350} - {55CACC1F-FE96-47C8-8073-91F4CAA55C75} = {2A91479A-4ABE-4BB7-9A5E-CA3B9CCFC69E} - {7509AA1E-3093-4BEE-984F-E11579E98A11} = {7CB09412-C9B0-47E8-A8C3-311AA4CFDE04} - {DAAB6B35-CBD2-4573-B633-CDD42F583A0E} = {16898702-3E33-41C1-B8D8-4CE3F1D46BD9} - {498A4F54-F11A-46C5-A58D-09DE56C6A034} = {AEB1933E-9369-4305-B20E-F186F888158F} - {AEB1933E-9369-4305-B20E-F186F888158F} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {B9D37BCF-80D1-489D-9FC6-55191FDBB033} = {AEB1933E-9369-4305-B20E-F186F888158F} - {8C15FD04-7F90-43FC-B488-023432FE3CE1} = {FED63417-432B-49CD-AB4B-44ADA837C2E7} - {37329855-01B8-4B03-9765-1A941B06E43C} = {8C15FD04-7F90-43FC-B488-023432FE3CE1} - {D3246226-BC1A-47F1-8E3E-C3380A8F13FB} = {8C15FD04-7F90-43FC-B488-023432FE3CE1} - {B06ADD57-E855-4D8C-85DC-B323509AE540} = {898F7E0B-1671-42CB-9DFB-689AFF212ED3} - {BAD47859-95DF-4C8F-9AF7-C48B68F478A1} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038} - {010A9638-F20E-4FE6-A186-85732BFC9CB0} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038} - {3D34C81F-2CB5-459E-87E9-0CC04757A2A0} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {04CFE286-6D32-41EF-8887-4B5F8086A365} = {6126DCE4-9692-4EE2-B240-C65743572995} - {FEF97646-9BC9-4D1B-A939-784D915C18A4} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0} - {839CE175-E0D9-43B9-9FA8-F32C47E7F56B} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0} - {50BF2926-7435-4F4B-88A9-3D0EDEB67FC8} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0} - {16B899B4-A4F4-4EF7-93BB-355861977A12} = {3D34C81F-2CB5-459E-87E9-0CC04757A2A0} - {3EAB9890-2C01-444C-ACA0-D77B29CDE08B} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {3E29454A-C4DC-44B7-AF0A-A782AD2E73BC} = {3EAB9890-2C01-444C-ACA0-D77B29CDE08B} - {43E3B132-2486-44A3-92C6-39E39724FAFD} = {3EAB9890-2C01-444C-ACA0-D77B29CDE08B} - {7B739F28-21DE-435D-9EA6-579064932350} = {17DD5861-0635-46D0-84BA-6B163150AA4F} - {F502ED22-EB37-4EF8-BFA0-3EFB3E2BE20C} = {7B739F28-21DE-435D-9EA6-579064932350} - {0EBEE047-CBAD-4A69-8095-E3961B863446} = {7B739F28-21DE-435D-9EA6-579064932350} - {B4F76DF0-1638-42DA-B46A-30DC16AECEAB} = {7B739F28-21DE-435D-9EA6-579064932350} - {DFC4F588-B4B4-484B-AB93-B36721374AD3} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {48FF1D87-5066-4294-B802-2D1B478C6EB6} = {DFC4F588-B4B4-484B-AB93-B36721374AD3} - {563A3FFA-32DA-4ADA-891C-E00897BD919E} = {48FF1D87-5066-4294-B802-2D1B478C6EB6} - {DC5DE087-5C93-4441-9D62-1743A50E5086} = {48FF1D87-5066-4294-B802-2D1B478C6EB6} - {F00CE8C1-5715-4683-A8E5-C467B712AD46} = {DFC4F588-B4B4-484B-AB93-B36721374AD3} - {56B45580-B089-424E-A847-A6115D591950} = {DFC4F588-B4B4-484B-AB93-B36721374AD3} - {4382555A-E4CD-4DFC-B59B-408FD4E93530} = {56B45580-B089-424E-A847-A6115D591950} - {545751D5-71FC-4889-A3A0-BBD731DBA18A} = {56B45580-B089-424E-A847-A6115D591950} - {E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972} = {DFC4F588-B4B4-484B-AB93-B36721374AD3} - {5D6F99C5-D292-4459-B8BD-8E4AD42E1B21} = {E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972} - {E2461809-D2EA-436D-B5C3-8A9EE0A283B8} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {C1CDD339-B51B-42BE-99F2-F39A4EC0D404} = {BB3D6EDD-AE71-4D25-B61B-7EBF7A1BA1D1} - {BB3D6EDD-AE71-4D25-B61B-7EBF7A1BA1D1} = {1A304CA0-7795-4684-88E5-E66402966927} - {399EF81E-C3B5-4D86-8BF1-DC7926252A63} = {05A169C7-4F20-4516-B10A-B13C5649D346} - {0F39820F-F4A5-41C6-9809-D79B68F032EF} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {8DFA596B-BD00-404E-9445-BCFAC65BDC34} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {4FB95E16-918B-49C1-9F65-49D07CDE072C} = {8DFA596B-BD00-404E-9445-BCFAC65BDC34} - {8001580F-B702-404B-A0FD-13538DDB9672} = {8DFA596B-BD00-404E-9445-BCFAC65BDC34} - {43ED0D49-E29A-4B12-8D10-531E006038E5} = {0F39820F-F4A5-41C6-9809-D79B68F032EF} - {A7B8F295-AD6E-42C1-A215-17337033EBE9} = {0F39820F-F4A5-41C6-9809-D79B68F032EF} - {A19F94D3-0C6A-429D-811A-7A750AAD122A} = {43ED0D49-E29A-4B12-8D10-531E006038E5} - {20CA28CC-FCDB-49F3-8452-5036E0BADCA7} = {43ED0D49-E29A-4B12-8D10-531E006038E5} - {3CC4AA4E-F7E6-4BAE-B2B7-BCEC9509F68D} = {A7B8F295-AD6E-42C1-A215-17337033EBE9} - {14DBB385-A1B1-49B2-A737-4DF90E127E5A} = {A7B8F295-AD6E-42C1-A215-17337033EBE9} - {5FD94164-7D13-4618-93AD-7346B0EA0CDD} = {C1409A8F-555A-4A88-B803-C6D3E8B6C3B0} - {5C50FA92-5488-4470-B42E-48EFEBA51D5A} = {34465A80-3BAF-4059-81B3-9090C0DB598F} - {34465A80-3BAF-4059-81B3-9090C0DB598F} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6} - {9B8F871E-ED33-4D2F-AA49-E39D9299EC85} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {7F295396-DBBD-40A5-A645-10004D1324DA} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {22EA0993-8DFC-40C2-8481-8E85E21EFB56} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {8F33439F-5532-45D6-8A44-20EF9104AA9D} = {5F0044F2-4C66-46A8-BD79-075F001AA034} - {B739074E-6652-4F5B-B37E-775DC2245FEC} = {8F33439F-5532-45D6-8A44-20EF9104AA9D} - {3B375FFC-1E38-453E-A26D-A510CCD3339E} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {71287382-95EF-490D-A285-87196E29E88A} = {562D5067-8CD8-4F19-BCBB-873204932C61} - {B4226BE2-DCB7-40C5-93F2-94C9BD6F4394} = {71287382-95EF-490D-A285-87196E29E88A} - {8F6F73F7-0DDA-4AA3-9887-2FB0141786AC} = {B4226BE2-DCB7-40C5-93F2-94C9BD6F4394} - {1A5582DD-06F4-4427-BFDC-B021A84A01BC} = {B4226BE2-DCB7-40C5-93F2-94C9BD6F4394} - {E18EF144-9C2C-4366-B54C-09ACF7692A4F} = {B4226BE2-DCB7-40C5-93F2-94C9BD6F4394} - {C445B129-0A4D-41F5-8347-6534B6B12303} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {3F752B48-2936-4FCA-B0DC-4AB0F788F897} = {DCBBDB52-4A49-4141-8F4D-81C0FFFB7BD5} - {262FF30C-34B4-462D-B5E2-0DABB9196E40} = {C1409A8F-555A-4A88-B803-C6D3E8B6C3B0} - {0A064174-8E5C-4F97-B941-A4E302661DF2} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {5AC2A052-1D4F-4C2F-BCF5-3F07A3E31857} = {0A064174-8E5C-4F97-B941-A4E302661DF2} - {0DBACF8E-2EDB-47FC-B998-B76522637B2E} = {5AC2A052-1D4F-4C2F-BCF5-3F07A3E31857} - {7F99E967-3DC1-4198-9D55-47CD9471D0B6} = {0A064174-8E5C-4F97-B941-A4E302661DF2} - {DF4637DA-5F07-4903-8461-4E2DAB235F3C} = {7F99E967-3DC1-4198-9D55-47CD9471D0B6} - {AAB50C64-39AA-4AED-8E9C-50D68E7751AD} = {7F99E967-3DC1-4198-9D55-47CD9471D0B6} - {9647D8B7-4616-4E05-B258-BAD5CAEEDD38} = {EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1} - {11BE4471-6C3D-4758-881A-97B6A16F21F6} = {EB5E294B-9ED5-43BF-AFA9-1CD2327F3DC1} - {022B4B80-E813-4256-8034-11A68146F4EF} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {FF413F1C-A998-4FA2-823F-52AC0916B35C} = {022B4B80-E813-4256-8034-11A68146F4EF} - {3A1EC883-EF9C-43E8-95E5-6B527428867B} = {022B4B80-E813-4256-8034-11A68146F4EF} - {908B2263-B58B-4261-A125-B5F2DFF92799} = {022B4B80-E813-4256-8034-11A68146F4EF} - {E3DAEBD3-CD36-493F-877F-460E8FFEAC52} = {EE9D0952-6060-4723-B329-94A2950A6762} - {17F28812-983E-4415-A55D-842DD7EC6887} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {A07D3B13-388B-444F-9E37-DDC0787C4690} = {17F28812-983E-4415-A55D-842DD7EC6887} - {09FFBC53-3EFF-45C4-9822-5D66089CD6AD} = {17F28812-983E-4415-A55D-842DD7EC6887} - {3044DFA5-DE4F-44D8-8DD8-EDF547BE513E} = {C445B129-0A4D-41F5-8347-6534B6B12303} - {4BD6F0DB-BE9C-4C54-B52A-D20B88855ED5} = {C445B129-0A4D-41F5-8347-6534B6B12303} - {6CCCF618-2E70-4870-B39F-32C016FE08F0} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {B730328F-D9E9-4EAA-B28E-4631A14095F9} = {C445B129-0A4D-41F5-8347-6534B6B12303} - {44963D50-8B58-44E6-918D-788BCB406695} = {B730328F-D9E9-4EAA-B28E-4631A14095F9} - {3EC71A0E-6515-4A5A-B759-F0BCF1BCFC56} = {44963D50-8B58-44E6-918D-788BCB406695} - {558C46DE-DE16-41D5-8DB7-D6D748E32977} = {3EC71A0E-6515-4A5A-B759-F0BCF1BCFC56} - {B1AA24A4-5E02-4DC1-B57F-6EB03F91E4DD} = {44963D50-8B58-44E6-918D-788BCB406695} - {5C641396-7E92-4F5C-A5A1-B4CDF480539B} = {088C37A5-30D2-40FB-B031-D163CFBED006} - {323C3EB6-1D15-4B3D-918D-699D7F64DED9} = {627BE8B3-59E6-4F1D-8C9C-76B804D41724} - {092EA9F6-84D4-41EF-A618-BDA50A0E10A8} = {323C3EB6-1D15-4B3D-918D-699D7F64DED9} - {F599EAA6-399F-4A91-9B1F-D311305B43D9} = {323C3EB6-1D15-4B3D-918D-699D7F64DED9} - {17459B97-1AA3-4154-83D3-C6BDC9FA3F85} = {022B4B80-E813-4256-8034-11A68146F4EF} - {4FC50620-4C8B-495F-859C-BFACAD158033} = {2637A22F-182F-4659-A394-C9BC1514B321} - {E090F82D-8345-477E-92E8-F724F08ADC56} = {4FC50620-4C8B-495F-859C-BFACAD158033} - {514726D2-3D2E-44C1-B056-163E37DE3E8B} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {48526D13-69E2-4409-A57B-C3FA3C64B4F7} = {9F21A235-436E-4020-A076-1DF4F89D0CA0} - {835A4E0F-A697-4B69-9736-3E99D163C4B9} = {48526D13-69E2-4409-A57B-C3FA3C64B4F7} - {148A5B4F-C8A3-4468-92F6-51DB5641FB49} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {6D365C86-3158-49F5-A21D-506C1E06E870} = {7D2B0799-A634-42AC-AE77-5D167BA51389} - {4DA84F2B-1948-439B-85AB-E99E31331A9C} = {A4C26078-B6D8-4FD8-87A6-7C15A3482038} - {B5D98AEB-9409-4280-8225-9C1EC6A791B2} = {4DA84F2B-1948-439B-85AB-E99E31331A9C} - {2A150BE3-D7DC-4E2A-8399-6EBAB77DEF00} = {B5D98AEB-9409-4280-8225-9C1EC6A791B2} - {D5F4D764-887D-4EB3-8D00-FCBE23FFDBBC} = {B5D98AEB-9409-4280-8225-9C1EC6A791B2} - {40F493E2-FE59-4787-BE44-3AED39D585BF} = {F43CC5EA-6032-4A11-A9B2-6D48CB5EB082} - {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} = {41B519F7-CF19-4FB4-B96C-E38A7EF45F70} - {6F335C66-C1D6-45FA-8529-6503B7CD42CC} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {71A54D7F-245F-43C2-B429-342D80AC6F23} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {75F11BE7-E2AF-43E0-B7B3-1B86D70AD950} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {DD02AEBD-FA05-40AE-AEA7-3E0BE6C5B2DC} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {B2D7BD12-5BDF-47F5-A55B-4A09D705731F} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {FD819B29-9EFE-4102-BD0A-375A63051458} = {97F9F7E9-56DA-49FE-B672-499E68EBB9DA} - {18AE79DF-54D1-423A-99A1-2F54CAC3F4EC} = {8EFA9CC7-D03D-4535-898C-F3B80BB19F21} - {53EA8180-8942-4D16-B92A-C5D3813D47CE} = {18AE79DF-54D1-423A-99A1-2F54CAC3F4EC} - {B5E22428-DAD8-4275-B8F0-14EC2174DDFE} = {C9E481E5-F77D-4462-8E85-1F7FF2DCAA97} - {B73AF959-3560-4DB2-9BC7-E1F4441D6AA2} = {B5E22428-DAD8-4275-B8F0-14EC2174DDFE} - {C397F73C-CADC-460E-9B27-71230B9C291E} = {B5E22428-DAD8-4275-B8F0-14EC2174DDFE} - {3F0C05F5-47EF-4896-8D32-4C80C4563286} = {B5E22428-DAD8-4275-B8F0-14EC2174DDFE} - {83FA6123-6EC3-47F3-A0DC-A10225B5EB16} = {45211BB8-4F51-427D-ADA2-7478E3398A60} - {9B240135-3D1E-4EE6-B870-D810F3C856FB} = {83FA6123-6EC3-47F3-A0DC-A10225B5EB16} - {5E46DC83-C39C-4E3A-B242-C064607F4367} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {7C27E72F-54D0-4820-8CFA-5E4BE640974B} = {D30A658D-61F6-444B-9AC7-F66A1A1B86B6} - {7324770C-0871-4D73-BE3D-5E2F3E9E1B1E} = {D30A658D-61F6-444B-9AC7-F66A1A1B86B6} - {B54A8F61-60DE-4AD9-87CA-D102F230678E} = {D30A658D-61F6-444B-9AC7-F66A1A1B86B6} - {D30A658D-61F6-444B-9AC7-F66A1A1B86B6} = {5E46DC83-C39C-4E3A-B242-C064607F4367} - {31854B06-DC6B-4416-97C3-559CC390B8B4} = {5E46DC83-C39C-4E3A-B242-C064607F4367} - {C681D730-4505-42C6-9E6C-87F757C4FB32} = {31854B06-DC6B-4416-97C3-559CC390B8B4} - {D6C54D8B-043F-4877-B751-60E7390F9EC6} = {31854B06-DC6B-4416-97C3-559CC390B8B4} - {5244BC49-2568-4701-80A6-EAB8950AB5FA} = {31854B06-DC6B-4416-97C3-559CC390B8B4} - {6F1B115C-1903-40CB-837D-7961AB610F4E} = {5E46DC83-C39C-4E3A-B242-C064607F4367} - {56DFE643-7F0F-40C8-9F7F-8EA5357781EF} = {3CBC4802-E9B8-48B7-BC8C-B0AFB9EEC643} - {E0BE6B86-F8DB-405D-AC05-78C8C9D3857D} = {C3722C5D-E159-4AB3-AF60-769185B31B47} - {8EB0B983-8851-4565-B92F-366F1B126E61} = {C3722C5D-E159-4AB3-AF60-769185B31B47} - {93D3CC76-9FA9-4198-B49D-54BA918105EE} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {6C06163A-80E9-49C1-817C-B391852BA563} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {CC45FA2D-128B-485D-BA6D-DFD9735CB3C3} = {6C06163A-80E9-49C1-817C-B391852BA563} - {825BCF97-67A9-4834-B3A8-C3DC97A90E41} = {CC45FA2D-128B-485D-BA6D-DFD9735CB3C3} - {DC349A25-0DBF-4468-99E1-B95C22D3A7EF} = {CC45FA2D-128B-485D-BA6D-DFD9735CB3C3} - {AA5ABFBC-177C-421E-B743-005E0FD1248B} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {5D5A3B60-A014-447C-9126-B1FA6C821C8D} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {B5AC1D8B-9D43-4261-AE0F-6B7574656F2C} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {C3FFA4E4-0E7E-4866-A15F-034245BFD800} = {B5AC1D8B-9D43-4261-AE0F-6B7574656F2C} - {5465F96F-33D5-454E-9C40-494E58AEEE5D} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {97996D39-7722-4AFC-A41A-AD61CA7A413D} = {5465F96F-33D5-454E-9C40-494E58AEEE5D} - {37144E52-611B-40E8-807C-2821F5A814CB} = {5465F96F-33D5-454E-9C40-494E58AEEE5D} - {559FE354-7E08-4310-B4F3-AE30F34DEED5} = {5465F96F-33D5-454E-9C40-494E58AEEE5D} - {94F95276-7CDF-44A8-B159-D09702EF6794} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {EA7D844B-C180-41C7-9D55-273AD88BF71F} = {94F95276-7CDF-44A8-B159-D09702EF6794} - {7A331A1C-E2C4-4E37-B0A0-B5AA10661229} = {8DAC59BE-CB96-4F04-909C-56C22E7665EB} - {DD076DDA-7956-4361-A7D4-2B8025AB3DFD} = {8DAC59BE-CB96-4F04-909C-56C22E7665EB} - {5CDB8ABC-9DD0-4A9F-8948-EED5FFE89F67} = {DD076DDA-7956-4361-A7D4-2B8025AB3DFD} - {151E6F9E-107B-4DDC-A2B1-95115801FD14} = {DD076DDA-7956-4361-A7D4-2B8025AB3DFD} - {B43BE3EB-9846-4484-88D8-05165202A0FC} = {DD076DDA-7956-4361-A7D4-2B8025AB3DFD} - {9A8AE587-A3DB-4211-8354-430C4CCBEB9B} = {B43BE3EB-9846-4484-88D8-05165202A0FC} - {2E28881D-A188-47AF-800A-B5877AD8C288} = {9A8AE587-A3DB-4211-8354-430C4CCBEB9B} - {A53696E8-6065-41BA-84FB-E89E0DACFF6C} = {9A8AE587-A3DB-4211-8354-430C4CCBEB9B} - {109C702D-DACE-4F82-A490-15E5AFA94005} = {151E6F9E-107B-4DDC-A2B1-95115801FD14} - {E3C5FAD2-8AB7-47C8-AAFD-8262551A5D11} = {151E6F9E-107B-4DDC-A2B1-95115801FD14} - {90CF4DC6-AC53-459F-9EAB-623A11EADAA3} = {B43BE3EB-9846-4484-88D8-05165202A0FC} - {F18E97AE-3A3F-424D-8DC2-4D001A167F98} = {B43BE3EB-9846-4484-88D8-05165202A0FC} - {8C3E422A-F281-4B93-A567-88C7A1ED0412} = {B43BE3EB-9846-4484-88D8-05165202A0FC} - {EB14F068-AD55-4970-B9B4-1FBE33704243} = {5CDB8ABC-9DD0-4A9F-8948-EED5FFE89F67} - {B7DAA48B-8E5E-4A5D-9FEB-E6D49AE76A04} = {41BB7BA4-AC08-4E9A-83EA-6D587A5B951C} - {489020F2-80D9-4468-A5D3-07E785837A5D} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {8FED7E65-A7DD-4F13-8980-BF03E77B6C85} = {489020F2-80D9-4468-A5D3-07E785837A5D} - {046F43BC-BEE4-48B7-8C09-ED0A1054A2D7} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {9716D0D0-2251-44DD-8596-67D253EEF41C} = {323C3EB6-1D15-4B3D-918D-699D7F64DED9} - {2299CCD8-8F9C-4F2B-A633-9BF4DA81022B} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {EFC8EA45-572D-4D8D-A597-9045A2D8EC40} = {2299CCD8-8F9C-4F2B-A633-9BF4DA81022B} - {8EE73488-2B92-42BD-96C9-0DD65405C828} = {1D865E78-7A66-4CA9-92EE-2B350E45281F} - {41FF4F96-98D2-4482-A2A7-4B179E80D285} = {1D865E78-7A66-4CA9-92EE-2B350E45281F} - {51D07AA9-6297-4F66-A7BD-71CE7E3F4A3F} = {0F84F170-57D0-496B-8E2C-7984178EF69F} - {487EF7BE-5009-4C70-B79E-45519BDD9603} = {412D4C15-F48F-4DB1-940A-131D1AA87088} - {1D865E78-7A66-4CA9-92EE-2B350E45281F} = {E5963C9F-20A6-4385-B364-814D2581FADF} - {3309FA1E-4E95-49E9-BE2A-827D01FD63C0} = {5465F96F-33D5-454E-9C40-494E58AEEE5D} - {B34CB502-0286-4939-B25F-45998528A802} = {AB4B9E75-719C-4589-B852-20FBFD727730} - {AB4B9E75-719C-4589-B852-20FBFD727730} = {0B200A66-B809-4ED3-A790-CB1C2E80975E} - {7F079E92-32D5-4257-B95B-CFFB0D49C160} = {7FD32066-C831-4E29-978C-9A2215E85C67} - {89896261-C5DD-4901-BCA7-7A5F718BC008} = {AB4B9E75-719C-4589-B852-20FBFD727730} - {F0FBA346-D8BC-4FAE-A4B2-85B33FA23055} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {AA7445F5-BD28-400C-8507-E2E0D3CF7D7E} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {A5946454-4788-4871-8F23-A9471D55F115} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {76C3E22D-092B-4E8A-81F0-DCF071BFF4CD} = {0BB58FB6-8B66-4C6D-BA8A-DF3AFAF9AB8F} - {0BB58FB6-8B66-4C6D-BA8A-DF3AFAF9AB8F} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {7CA0A9AF-9088-471C-B0B6-EBF43F21D3B9} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {91C3C03E-EA56-4ABA-9E73-A3DA4C2833D9} = {1D865E78-7A66-4CA9-92EE-2B350E45281F} - {F4A9CC79-5FE3-4F2B-9CC3-7F42DEDB4853} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {07FDBE0D-B7A1-43DE-B120-F699C30E7CEF} = {E19E55A2-1562-47A7-8EA6-B51F2CA0CC4C} - {BA649043-EF2B-42DC-B422-A46127BE8296} = {7B976D8F-EA31-4C0B-97BD-DFD9B3CC86FB} - {3A6FD623-F7F3-404B-8A39-CAFB40CA6A08} = {08D53E58-4AAE-40C4-8497-63EC8664F304} - {890B5210-48EF-488F-93A2-F13BCB07C780} = {4DA84F2B-1948-439B-85AB-E99E31331A9C} - {A8E2AB77-8F57-47C2-A961-2F316793CAFF} = {890B5210-48EF-488F-93A2-F13BCB07C780} - {F43CC5EA-6032-4A11-A9B2-6D48CB5EB082} = {4DA84F2B-1948-439B-85AB-E99E31331A9C} - {74377D3E-E0C6-41A4-89ED-11A9C00142A9} = {166E48ED-9738-4E13-8618-0D805F6F0F65} - {3C7C65BF-0C13-418E-90BD-EC9C3CD282CB} = {74377D3E-E0C6-41A4-89ED-11A9C00142A9} - {F057512B-55BF-4A8B-A027-A0505F8BA10C} = {4FDDC525-4E60-4CAF-83A3-261C5B43721F} - {10173568-A65E-44E5-8C6F-4AA49D0577A1} = {F057512B-55BF-4A8B-A027-A0505F8BA10C} - {97C7D2A4-87E5-4A4A-A170-D736427D5C21} = {F057512B-55BF-4A8B-A027-A0505F8BA10C} - {4730F56D-24EF-4BB2-AA75-862E31205F3A} = {225AEDCF-7162-4A86-AC74-06B84660B379} - {C406D9E0-1585-43F9-AA8F-D468AF84A996} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {7757E360-40F5-4C90-9D7F-E6B0E62BA9E2} = {C406D9E0-1585-43F9-AA8F-D468AF84A996} - {F0BF2260-5AE2-4248-81DE-AC5B9FC6A931} = {C406D9E0-1585-43F9-AA8F-D468AF84A996} - {A05652B3-953E-4915-9D7F-0E361D988815} = {0CE1CC26-98CE-4022-A81C-E32AAFC9B819} - {7BAEB9BF-28F4-4DFD-9A04-E5193683C261} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF} - {AE4D272D-6F13-42C8-9404-C149188AFA33} = {7BAEB9BF-28F4-4DFD-9A04-E5193683C261} - {5D438258-CB19-4282-814F-974ABBC71411} = {7BAEB9BF-28F4-4DFD-9A04-E5193683C261} - {F5AE525F-F435-40F9-A567-4D5EC3B50D6E} = {5FE1FBC1-8CE3-4355-9866-44FE1307C5F1} - {56291265-B7BF-4756-92AB-FC30F09381D1} = {822D1519-77F0-484A-B9AB-F694C2CC25F1} - {66FA1041-5556-43A0-9CA3-F9937F085F6E} = {56291265-B7BF-4756-92AB-FC30F09381D1} - {37FC77EA-AC44-4D08-B002-8EFF415C424A} = {64B2A28F-6D82-4F2B-B0BB-88DE5216DD2C} - {87D58D50-20D1-4091-88C5-8D88DCCC2DE3} = {6126DCE4-9692-4EE2-B240-C65743572995} - {F7BCD3AD-31E2-4223-B215-851C3D0AB78A} = {B55A5DE1-5AF3-4B18-AF04-C1735B071DA6} - {055F86AA-FB37-40CC-B39E-C29CE7547BB7} = {B8825E86-B8EA-4666-B681-C443D027C95D} - {137AD17B-066F-4ED4-80FA-8D21C7B76CA6} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {CAEB7F57-28A8-451C-95D0-45FCAA3C726C} = {C445B129-0A4D-41F5-8347-6534B6B12303} - {A939893A-B3CD-48F6-80D3-340C8A6E275B} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {F232B503-D412-45EE-8B31-EFD46B9FA302} = {AA5ABFBC-177C-421E-B743-005E0FD1248B} - {B0A8E5D4-BC5A-448E-B222-431B6B2EB58E} = {05A169C7-4F20-4516-B10A-B13C5649D346} - {15D08EA7-8C63-45FB-8B4D-C5F8E43B433E} = {05A169C7-4F20-4516-B10A-B13C5649D346} - {433F91E4-E39D-4EB0-B798-2998B3969A2C} = {6126DCE4-9692-4EE2-B240-C65743572995} - {8A021D6D-7935-4AB3-BB47-38D4FF9B0D13} = {6126DCE4-9692-4EE2-B240-C65743572995} - {6DEC24A8-A166-432F-8E3B-58FFCDA92F52} = {2299CCD8-8F9C-4F2B-A633-9BF4DA81022B} - {6469F11E-8CEE-4292-820B-324DFFC88EBC} = {0F39820F-F4A5-41C6-9809-D79B68F032EF} - {8D2CC6ED-5105-4F52-8757-C21F4DE78589} = {6469F11E-8CEE-4292-820B-324DFFC88EBC} - {9DC6B242-457B-4767-A84B-C3D23B76C642} = {2299CCD8-8F9C-4F2B-A633-9BF4DA81022B} - {D53F0EF7-0CDC-49B4-AA2D-229901B0A734} = {9DC6B242-457B-4767-A84B-C3D23B76C642} - {5B5F86CC-3598-463C-9F9B-F78FBB6642F4} = {8275510E-0E6C-45A8-99DF-4F106BC7F075} - {274100A5-5B2D-4EA2-AC42-A62257FC6BDC} = {017429CC-C5FB-48B4-9C46-034E29EE2F06} - {4D8DE54A-4F32-4881-B07B-DDC79619E573} = {274100A5-5B2D-4EA2-AC42-A62257FC6BDC} - {9536C284-65B4-4884-BB50-06D629095C3E} = {274100A5-5B2D-4EA2-AC42-A62257FC6BDC} - {6A19D94D-2BC6-4198-BE2E-342688FDBA4B} = {A1B75FC7-A777-4412-A635-D0C9ED8FE7A0} - {D8F7091E-A2D1-4E81-BA7C-97EAE392D683} = {A1B75FC7-A777-4412-A635-D0C9ED8FE7A0} - {757CBDE0-5D0A-4FD8-99F3-6C20BDDD4E63} = {5FE1FBC1-8CE3-4355-9866-44FE1307C5F1} - {B32FF7A7-9CB3-4DCD-AE97-3B2594DB9DAC} = {2299CCD8-8F9C-4F2B-A633-9BF4DA81022B} - {B9BBC1A8-7F58-4F43-94C3-5F3CB125CEF7} = {B32FF7A7-9CB3-4DCD-AE97-3B2594DB9DAC} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F} - EndGlobalSection -EndGlobal diff --git a/AspNetCore.slnx b/AspNetCore.slnx new file mode 100644 index 000000000000..60f5ca0d74fc --- /dev/null +++ b/AspNetCore.slnx @@ -0,0 +1,1284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 175a777570c3..8fa37e0b3554 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,7 +8,8 @@ Start a discussion on the [repository issue tracker](https://github.com/dotnet/a ## Bugs and feature requests? -❗ **IMPORTANT: If you want to report a security-related issue, please see the `Reporting security issues and bugs` section below.** +> [!IMPORTANT] +> **If you want to report a security-related issue, please see the `Reporting security issues and bugs` section below.** Before reporting a new issue, try to find an existing issue if one already exists. If it already exists, upvote (👍) it. Also, consider adding a comment with your unique scenarios and requirements related to that issue. Upvotes and clear details on the issue's impact help us prioritize the most important issues to be worked on sooner rather than later. If you can't find one, that's okay, we'd rather get a duplicate report than none. diff --git a/Development.md b/Development.md new file mode 100644 index 000000000000..bcc73ec8bafe --- /dev/null +++ b/Development.md @@ -0,0 +1,30 @@ +# Development Tips + +## Steps to Produce Release Mode Installers + +1. Install Visual Studio 2022 (C++ desktop development must be enabled). +1. Clone this repo and switch to a release tag. +1. Run `restore.cmd` to initialize. +1. Run `build.all.bat` to build everything out. + +The MSI files are `artifacts\installers\Release\*.msi`. + +## Steps to Set Up Local Development Environment + +The steps to set up local debugging environment are (assume you are on Windows x64 with VS2022/IIS/HTTP Bridge Module for IIS already installed), + +1. Clone this repo. +1. Switch to a release tag (like `httpbridge_v9.0.2-rc.1`). +1. Ensure VS2022 latest version is installed and execute restore.cmd. +1. Modify `build.debug.bat` to use the VS2022 edition you are using (Community or another), and execute it to build the debug bits. +1. Stop IIS via `iisreset /stop`. +1. Copy the files from `artifacts\bin\AspNetCoreModuleShim\x64\Debug` to `%ProgramFiles%\IIS\HTTP Bridge Module\V2` and overwrite the release bits. +1. Copy the files from `artifacts\bin\OutOfProcessRequestHandler\x64\Debug` to `%ProgramFiles%\IIS\HTTP Bridge Module\V2\xx.0.xxxxx` to replace the release bits. +1. Start IIS via `iisreset /start`. +1. Launch VS2022 and open `src\Servers\IIS\IISIntegration.slnf`. +1. Launch your web app in IIS and attach VS2022 debugger to the proper `w3wp.exe` process. +1. Set breakpoints in the code base to debug around. + +### Typical Locations to Debug + +* Breakpoints in `src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp` can be used to debug the actual token being passed. diff --git a/Directory.Build.BeforeCommonTargets.targets b/Directory.Build.BeforeCommonTargets.targets index f25d6a7ebff7..8ce4366421d1 100644 --- a/Directory.Build.BeforeCommonTargets.targets +++ b/Directory.Build.BeforeCommonTargets.targets @@ -6,7 +6,7 @@ Condition="'$(ExcludeFromSourceOnlyBuild)' == '' and '$(DotNetBuildSourceOnly)' == 'true' and '$(IsAspNetCoreApp)' != 'true' and - '$(MSBuildProjectName)' != '$(TargetingPackName)' and + '$(UsingMicrosoftDotNetSharedFrameworkSdk)' != 'true' and '$(IsAnalyzersProject)' != 'true' and '$(IsProjectTemplateProject)' != 'true'">true diff --git a/Directory.Build.props b/Directory.Build.props index 499cf17df265..2754f04d06c3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,4 @@ - true @@ -9,7 +8,9 @@ $(MSBuildThisFileDirectory) - https://github.com/dotnet/aspnetcore + https://github.com/dotnet/aspnetcore + $(DefaultRepositoryUrl) + $(DefaultRepositoryUrl) git @@ -48,15 +49,6 @@ '$(IsBenchmarkProject)' == 'true' OR '$(IsPublishedAppTestProject)' == 'true' OR $(IsUnitTestProject) ">false - - - false - true + net472 + + false @@ -130,6 +128,9 @@ $(WarningsNotAsErrors);xUnit1004 + + $(NoWarn);xUnit1030 + $(NoWarn);IL2121 @@ -201,18 +202,13 @@ limitations in the way the .NET SDK finds shared frameworks and targeting packs. It allows tests to use the shared frameworks and targeting packs that were just built. - However, source-build needs this to not happen while building projects that rely on the - AppHost framework pack. Source-build installs an SDK in a custom location outside this + However, the VMR needs this to not happen while building projects that rely on the + AppHost framework pack. The VMR installs an SDK in a custom location outside this repository, and setting NetCoreTargetingPackRoot to a different location causes source-build to restore the AppHost pack as a prebuilt rather than using the one that's present in the SDK. - Source-build doesn't run tests, so the property is simply conditioned out. + The dotnet product build doesn't run tests, so the property is simply conditioned out. --> $(LocalDotNetRoot)packs\ - - $(DotNetRoot)packs\ - @@ -239,6 +235,38 @@ .zip + + https://builds.dotnet.microsoft.com/dotnet/ + + https://ci.dot.net/public/ + https://ci.dot.net/internal/ + + true + $(ArtifactsShippingPackagesDir) + + + + + + + + + $(DotnetRuntimeSourceFeedKey) + + + + + + + + + + true @@ -252,9 +280,9 @@ - - $(MSBuildThisFileDirectory)Directory.Build.BeforeCommonTargets.targets - $(MSBuildThisFileDirectory)Directory.Build.BeforeCommonTargets.targets + + $(MSBuildThisFileDirectory)Directory.Build.BeforeCommonTargets.targets;$(CustomBeforeMicrosoftCommonTargets) + $(MSBuildThisFileDirectory)Directory.Build.BeforeCommonTargets.targets;$(CustomBeforeMicrosoftCommonCrossTargetingTargets) diff --git a/Directory.Build.targets b/Directory.Build.targets index 140420599154..a2245ab43544 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -119,7 +119,7 @@ false true - true + true @@ -172,6 +172,17 @@ SkipUnchangedFiles="$(SkipCopyUnchangedFiles)" /> + + + + + + + @@ -179,7 +190,9 @@ + + + + + + + + + - - - - - - - - diff --git a/README.md b/README.md index 48d103faf360..e235f7ae87cb 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,41 @@ -ASP.NET Core -============ +HTTP Bridge Module for IIS +========================== -[![.NET Foundation](https://img.shields.io/badge/.NET%20Foundation-blueviolet.svg)](https://www.dotnetfoundation.org/) -[![MIT License](https://img.shields.io/github/license/dotnet/aspnetcore?color=%230b0&style=flat-square)](https://github.com/dotnet/aspnetcore/blob/main/LICENSE.txt) [![Help Wanted](https://img.shields.io/github/issues/dotnet/aspnetcore/help%20wanted?color=%232EA043&label=help%20wanted&style=flat-square)](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [![Good First Issues](https://img.shields.io/github/issues/dotnet/aspnetcore/good%20first%20issue?color=%23512BD4&label=good%20first%20issue&style=flat-square)](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) -[![Discord](https://img.shields.io/discord/732297728826277939?style=flat-square&label=Discord&logo=discord&logoColor=white&color=7289DA)](https://aka.ms/dotnet-discord) +[![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads-pre/lextudio/httpbridge/total?style=flat-square)](https://github.com/lextudio/httpbridge/releases) +[![MIT License](https://img.shields.io/github/license/lextudio/httpbridge?color=%230b0&style=flat-square)](https://github.com/lextudio/httpbridge/blob/main/LICENSE.txt) [![Help Wanted](https://img.shields.io/github/issues/lextudio/httpbridge/help%20wanted?color=%232EA043&label=help%20wanted&style=flat-square)](https://github.com/lextudio/httpbridge/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [![Good First Issues](https://img.shields.io/github/issues/lextudio/httpbridge/good%20first%20issue?color=%23512BD4&label=good%20first%20issue&style=flat-square)](https://github.com/lextudio/httpbridge/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) -ASP.NET Core is an open-source and cross-platform framework for building modern cloud-based internet-connected applications, such as web apps, IoT apps, and mobile backends. ASP.NET Core apps run on [.NET](https://dot.net), a free, cross-platform, and open-source application runtime. It was architected to provide an optimized development framework for apps that are deployed to the cloud or run on-premises. It consists of modular components with minimal overhead, so you retain flexibility while constructing your solutions. You can develop and run your ASP.NET Core apps cross-platform on Windows, Mac, and Linux. [Learn more about ASP.NET Core](https://learn.microsoft.com/aspnet/core/). +HttpPlatformHandler was created by Microsoft Azure team and made publicly available in 2015. More history about this Microsoft product can be found [in this blog post](https://docs.lextudio.com/blog/the-rough-history-of-iis-httpplatformhandler/). -## Get started +As Microsoft didn't publish any new release after v1.2 and more issues related to this old release were reported by users, there is a need to give the user community something new. Our team at LeXtudio Inc. are experienced .NET developers with extensive IIS knowledge so we decided to give this a try. -Follow the [Getting Started](https://learn.microsoft.com/aspnet/core/getting-started) instructions. +We chose to fork and build upon ASP.NET Core module, which was initially a fork of HttpPlatformHandler itself, now is both open-source and well maintained by Microsoft ASP.NET Core team. By renaming many things through the code base, we are able to derive a slim module that just works for any programming languages/application servers. And most importantly we keep this new module backward compatible with HttpPlatformHandler v1.2. We used to call this project "HttpPlatformHandler v2" but now prefer to rename it to "HTTP Bridge Module for IIS" to better reflect its role as a generic bridging/compatibility layer and to avoid future confusion with any Microsoft offerings. -Also check out the [.NET Homepage](https://www.microsoft.com/net) for released versions of .NET, getting started guides, and learning resources. +"HTTP Bridge Module" is a drop‑in replacement for the original Microsoft HttpPlatformHandler 1.2 with continued community maintenance. The existing configuration schema remain unchanged so existing deployments can adopt the new module without altering their configuration files. -See the [Triage Process](https://github.com/dotnet/aspnetcore/blob/main/docs/TriageProcess.md) document for more information on how we handle incoming issues. +The changes we make are released under the MIT license. -## How to engage, contribute, and give feedback +## Get started -Some of the best ways to contribute are to try things out, file issues, join in design conversations, -and make pull-requests. +Find a release from [the Releases section](https://github.com/lextudio/httpbridge/releases) and you can see the installers (x86, x64, and ARM64). -* [Download our latest daily builds](./docs/DailyBuilds.md) -* Follow along with the development of ASP.NET Core: - * [Community Standup](https://live.asp.net): The community standup is held every week and streamed live on YouTube. You can view past standups in the linked playlist. - * [Roadmap](https://aka.ms/aspnet/roadmap): The schedule and milestone themes for ASP.NET Core. -* [Build ASP.NET Core source code](./docs/BuildFromSource.md) -* Check out the [contributing](CONTRIBUTING.md) page to see the best places to log issues and start discussions. +Install them accordingly to the IIS/IIS Express builds you are using, and then you can apply your previous knowledge/configuration of HttpPlatformHandler with this new HTTP Bridge Module. Existing `httpPlatform` schema elements continue to work. -## Reporting security issues and bugs +## FAQ -Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094.aspx). +### Why was the project renamed? -## Related projects +"HttpPlatformHandler v2" mimicked the original Microsoft product name and risked future confusion if Microsoft ships an updated official module. "HTTP Bridge Module for IIS" emphasizes its role as a community-maintained compatibility and bridging layer between IIS and arbitrary application servers while retaining full backward compatibility. For seamless upgrades we intentionally keep the original configuration schema names so existing `web.config` files do not require edits. -These are some other repos for related projects: +### Do I need to change my existing configuration? -* [Documentation](https://github.com/aspnet/Docs) - documentation sources for https://learn.microsoft.com/aspnet/core/ -* [Entity Framework Core](https://github.com/dotnet/efcore) - data access technology -* [Runtime](https://github.com/dotnet/runtime) - cross-platform runtime for cloud, mobile, desktop, and IoT apps -* [Razor](https://github.com/dotnet/razor) - the Razor compiler and tooling for working with Razor syntax (.cshtml, .razor) +No. Continue to use the existing `httpPlatform` section and attributes. Only project documentation and branding changed. -## Code of conduct +## Reporting bugs or asking questions -See [CODE-OF-CONDUCT](./CODE-OF-CONDUCT.md) +Bugs or questions can be reported to [the Issues section](https://github.com/lextudio/httpbridge/issues). -## Nightly builds +For commercial support inquiries, please contact LeXtudio Inc. via email support@lextudio.com or our [home page](https://lextudio.com). -This table includes links to download the latest builds of the ASP.NET Core Shared Framework. Also included are links to download the Windows Hosting Bundle, which includes the ASP.NET Core Shared Framework, the .NET Runtime Shared Framework, and the IIS plugin (ASP.NET Core Module). You can download the latest .NET Runtime builds [here](https://github.com/dotnet/runtime/blob/main/docs/project/dogfooding.md#nightly-builds-table), and the latest .NET SDK builds [here](https://github.com/dotnet/installer#table). **If you're unsure what you need, then install the SDK; it has everything except the IIS plugin.** +## Reporting security issues -| Platform | Shared Framework (Installer) | Shared Framework (Binaries) | Hosting Bundle (Installer) | -| :--------- | :----------: | :----------: | :----------: | -| **Windows x64** | [Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-x64.exe) | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-x64.zip) | [Installer](https://aka.ms/dotnet/9.0/daily/dotnet-hosting-win.exe) | -| **Windows x86** | [Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-x86.exe) | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-x86.zip) | [Installer](https://aka.ms/dotnet/9.0/daily/dotnet-hosting-win.exe) | -| **Windows arm64** | [Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-arm64.exe) | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-win-arm64.zip) | [Installer](https://aka.ms/dotnet/9.0/daily/dotnet-hosting-win.exe) | -| **macOS x64** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-osx-x64.tar.gz) | **N/A** | -| **macOS arm64** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-osx-arm64.tar.gz) | **N/A** | -| **Linux x64** | [Deb Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-x64.deb) - [RPM Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-x64.rpm) | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-x64.tar.gz) | **N/A** | -| **Linux arm** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-arm.tar.gz) | **N/A** | -| **Linux arm64** | [RPM Installer](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-aarch64.rpm) | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-arm64.tar.gz) | **N/A** | -| **Linux-musl-x64** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-musl-x64.tar.gz) | **N/A** | -| **Linux-musl-arm** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-musl-arm.tar.gz) | **N/A** | -| **Linux-musl-arm64** | **N/A** | [Binaries](https://aka.ms/dotnet/9.0/daily/aspnetcore-runtime-linux-musl-arm64.tar.gz) | **N/A** | +Security issues should be reported privately, via email, to LeXtudio Inc. support@lextudio.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. diff --git a/activate.sh b/activate.sh old mode 100644 new mode 100755 diff --git a/build.all.bat b/build.all.bat new file mode 100644 index 000000000000..0eded03d1b5f --- /dev/null +++ b/build.all.bat @@ -0,0 +1,14 @@ +@echo off +setlocal EnableDelayedExpansion + +call build.binaries.bat +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call build.installers.bat +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call pwsh -file sign.installers.ps1 +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +echo All build and signing steps completed successfully. +exit /b 0 diff --git a/build.binaries.bat b/build.binaries.bat new file mode 100644 index 000000000000..12b1fc11bfb7 --- /dev/null +++ b/build.binaries.bat @@ -0,0 +1,25 @@ +REM Use vswhere to locate MSBuild.exe +for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\\**\\Bin\\MSBuild.exe`) do set MSBUILD_PATH=%%i + +if not defined MSBUILD_PATH ( + echo Could not find MSBuild.exe via vswhere. Please ensure Visual Studio is installed. + exit /b 1 +) + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj /p:Platform=ARM64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj /p:Platform=Win32 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj /p:Platform=ARM64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj /p:Platform=Win32 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% diff --git a/build.debug.bat b/build.debug.bat new file mode 100644 index 000000000000..80fc7f21f596 --- /dev/null +++ b/build.debug.bat @@ -0,0 +1,9 @@ + +@echo off +for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\\**\\Bin\\MSBuild.exe`) do set MSBUILD_PATH=%%i +if not defined MSBUILD_PATH ( + echo MSBuild not found via vswhere. + exit /b 1 +) +"%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj /p:Platform=x64 /p:Configuration=Debug +"%MSBUILD_PATH%" src\Servers\IIS\AspNetCoreModuleV2\OutOfProcessRequestHandler\OutOfProcessRequestHandler.vcxproj /p:Platform=x64 /p:Configuration=Debug diff --git a/build.installers.bat b/build.installers.bat new file mode 100644 index 000000000000..1d46d6be7734 --- /dev/null +++ b/build.installers.bat @@ -0,0 +1,52 @@ +REM Use vswhere to locate MSBuild.exe +for /f "usebackq tokens=*" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\\**\\Bin\\MSBuild.exe`) do set MSBUILD_PATH=%%i + +if not defined MSBUILD_PATH ( + echo Could not find MSBuild.exe via vswhere. Please ensure Visual Studio is installed. + exit /b 1 +) + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /t:restore +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /t:clean /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /t:clean /p:Platform=arm64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /t:clean /p:Platform=x86 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /p:Platform=arm64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMIISExpressV2\AncmIISExpressV2.wixproj /p:Platform=x86 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /t:restore +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /t:clean /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /t:clean /p:Platform=arm64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /t:clean /p:Platform=x86 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /p:Platform=x64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /p:Platform=arm64 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +call "%MSBUILD_PATH%" src\Installers\Windows\AspNetCoreModule-Setup\ANCMV2\AncmV2.wixproj /p:Platform=x86 /p:Configuration=Release +if %ERRORLEVEL% neq 0 exit /b %ERRORLEVEL% + +echo All installer builds completed successfully. +exit /b 0 diff --git a/deploy.bat b/deploy.bat new file mode 100644 index 000000000000..5147235283b4 --- /dev/null +++ b/deploy.bat @@ -0,0 +1,6 @@ +iisreset /stop +copy artifacts\bin\OutOfProcessRequestHandler\Win32\Debug\httpbridge_outofprocess.dll "C:\Program Files (x86)\IIS Express\HTTP Bridge Module\V2\18.0.24105" +copy artifacts\bin\OutOfProcessRequestHandler\Win32\Debug\httpbridge_outofprocess.pdb "C:\Program Files (x86)\IIS Express\HTTP Bridge Module\V2\18.0.24105" +copy artifacts\bin\AspNetCoreModuleShim\Win32\Debug\httpbridge.dll "C:\Program Files (x86)\IIS Express\HTTP Bridge Module\V2" +copy artifacts\bin\AspNetCoreModuleShim\Win32\Debug\httpbridge.pdb "C:\Program Files (x86)\IIS Express\HTTP Bridge Module\V2" +iisreset /start diff --git a/deploy.debug.bat b/deploy.debug.bat new file mode 100644 index 000000000000..96c0cd6392f0 --- /dev/null +++ b/deploy.debug.bat @@ -0,0 +1,59 @@ +@echo off +echo Copying ASP.NET Core Module debug build files to IIS HTTP Bridge Module directory... + +set SOURCE_DIR1=C:\Users\Administrator\source\repos\httpbridge\artifacts\bin\OutOfProcessRequestHandler\x64\Debug +set SOURCE_DIR2=C:\Users\Administrator\source\repos\httpbridge\artifacts\bin\AspNetCoreModuleShim\x64\Debug +set TARGET_DIR1=C:\Program Files\IIS\HTTP Bridge Module\V2\19.0.25152 +set TARGET_DIR2=C:\Program Files\IIS\HTTP Bridge Module\V2 + +REM Check if source directories exist +if not exist "%SOURCE_DIR1%" ( + echo Error: Source directory not found: %SOURCE_DIR1% + exit /b 1 +) + +if not exist "%SOURCE_DIR2%" ( + echo Error: Source directory not found: %SOURCE_DIR2% + exit /b 1 +) + +REM Check if target directories exist, create if not +if not exist "%TARGET_DIR1%" ( + echo Target directory does not exist. Creating directory: %TARGET_DIR1% + mkdir "%TARGET_DIR1%" + if %errorlevel% NEQ 0 ( + echo Error: Failed to create target directory. Make sure you have administrator privileges. + exit /b %errorlevel% + ) +) + +if not exist "%TARGET_DIR2%" ( + echo Target directory does not exist. Creating directory: %TARGET_DIR2% + mkdir "%TARGET_DIR2%" + if %errorlevel% NEQ 0 ( + echo Error: Failed to create target directory. Make sure you have administrator privileges. + exit /b %errorlevel% + ) +) + +REM Copy OutOfProcessRequestHandler DLL and PDB files +echo Copying OutOfProcessRequestHandler files to %TARGET_DIR1%... +copy /Y "%SOURCE_DIR1%\*.dll" "%TARGET_DIR1%\" +copy /Y "%SOURCE_DIR1%\*.pdb" "%TARGET_DIR1%\" + +if %errorlevel% NEQ 0 ( + echo Error: Failed to copy OutOfProcessRequestHandler files. Make sure you have administrator privileges. + exit /b %errorlevel% +) + +REM Copy AspNetCoreModuleShim DLL and PDB files +echo Copying AspNetCoreModuleShim files to %TARGET_DIR2%... +copy /Y "%SOURCE_DIR2%\*.dll" "%TARGET_DIR2%\" +copy /Y "%SOURCE_DIR2%\*.pdb" "%TARGET_DIR2%\" + +if %errorlevel% NEQ 0 ( + echo Error: Failed to copy AspNetCoreModuleShim files. Make sure you have administrator privileges. + exit /b %errorlevel% +) + +echo All files copied successfully \ No newline at end of file diff --git a/docs/APIReviewPrinciples.md b/docs/APIReviewPrinciples.md new file mode 100644 index 000000000000..a00a2c78ff0e --- /dev/null +++ b/docs/APIReviewPrinciples.md @@ -0,0 +1,13 @@ +# API Review Conventions and Principles + +Welcome to the API Review Conventions and Principles document for the dotnet/aspnetcore repository. This document serves as a comprehensive guide to the conventions and principles that our team has established over time. It is designed to encapsulate our collective knowledge and best practices, ensuring consistency and quality in our API design. + +The primary goal of this document is to provide a reference for our team and contributors, helping them to understand and apply these principles when proposing new APIs. By adhering to these guidelines, we aim to foster a collaborative and informed API review process, ultimately enhancing the robustness and usability of our APIs. + +We encourage you to refer to this document regularly and contribute to its evolution as we continue to refine our API review process. We also encourage you to follow the [.NET framework design guidelines](https://learn.microsoft.com/dotnet/standard/design-guidelines/) for more general guidance not specific to the dotnet/aspnetcore repository. + +## Principles +- Principle 1 + +## Conventions +- Convention 1 diff --git a/docs/APIReviewProcess.md b/docs/APIReviewProcess.md index 17c522cb2b77..2a8755a54e83 100644 --- a/docs/APIReviewProcess.md +++ b/docs/APIReviewProcess.md @@ -19,6 +19,10 @@ The process is visualized in the below diagram: 1. The owner of the issue is now free to work on the implementation of the proposed API. 1. In case during implementation changes to the original proposal are required, the review should become obsolete and the process should start from the beginning. +## Learnings and growth + +Over time the team will build up certain conventions and principles, that will be useful to establish for future API reviews too. To help with this, the [API Review Principles document](/docs/APIReviewPrinciples.md) document will be used to store such principles and conventions, making them persistent over time. Eventually, it will grow into a good knowledge base that will also help newcomers to learn and be better prepared with designing their APIs. + ## What Makes an issue/PR "ready-for-review"? Before marking an issue as `api-ready-for-review`, make sure that the issue has the following: diff --git a/docs/AddingNewProjects.md b/docs/AddingNewProjects.md index c13db88fbf42..ce1a25cc1ede 100644 --- a/docs/AddingNewProjects.md +++ b/docs/AddingNewProjects.md @@ -28,13 +28,13 @@ Sample PR of final result: https://github.com/dotnet/aspnetcore/pull/41945 - If VS has not already modified these files, open the `.slnf` you want to add the project to. Create a solution folder for your project if doesn't exist already. Then right click solution folder -> Add -> Existing Project... -> follow the wizard. 1. Run the `eng/scripts/GenerateProjectList.ps1` file to regenerate a number of `eng/*.props` files e.g. ProjectReferences.props. -**Note:** If you are adding a new project to the root `src` directory, you will also need to add a reference in both of the `DotNetProjects` lists of the `eng/Build.props` file. The first list (the one with condition `'$(BuildMainlyReferenceProviders)' != 'true'"`) has items in the format of: +**Note:** If you are adding a new project to the root `src` directory, you will also need to add a reference in both the `ProjectsWithTestsSubsetN` and `DotNetProjects` lists of the `eng/Build.props` file. The `ProjectsWithTestsSubsetN` lists (the one with condition `'$(BuildMainlyReferenceProviders)' != 'true'"`) has items in the format of: ```XML - + + + + + + + + ``` + *NOTE: This NuGet.Config should be with your application unless you want nightly packages to potentially start being restored for other apps on the machine.* Some features, such as new target frameworks, may require prerelease tooling builds for Visual Studio. @@ -47,4 +60,4 @@ These are available in the [Visual Studio Preview](https://www.visualstudio.com/ ## Downloading daily builds of aspnetcore -Links to our daily builds can be found [here](https://github.com/dotnet/aspnetcore/blob/main/README.md#nightly-builds). +Links to our daily builds can be found in the [ASP.NET Core nightly builds section](https://github.com/dotnet/aspnetcore/blob/main/README.md#nightly-builds). diff --git a/docs/OnboardingNewOS.md b/docs/OnboardingNewOS.md new file mode 100644 index 000000000000..9a14be282c1a --- /dev/null +++ b/docs/OnboardingNewOS.md @@ -0,0 +1,23 @@ +# Onboarding New Operating System Versions + +Guidance for onboarding new OS versions in ASP.NET, including how to add build & test coverage. + +For broader context on our OS philosophy in .NET, see [Onboarding Guide for New Operating System Versions](https://github.com/dotnet/runtime/blob/main/docs/project/os-onboarding.md) in dotnet/runtime. + +To see the list of our latest docker tags, see [this file](https://github.com/dotnet/versions/blob/main/build-info/docker/image-info.dotnet-dotnet-buildtools-prereqs-docker-main.json). + +For the full set of docker tags, see [this file](https://mcr.microsoft.com/v2/dotnet-buildtools/prereqs/tags/list). + +For info on modifying/adding new docker images, see [this doc](https://github.com/dotnet/dotnet-buildtools-prereqs-docker?tab=readme-ov-file#how-to-modify-or-create-a-new-image). + +## Building on a new Operating System + +On Mac and Linux, dotnet/aspnetcore does not build any native code - therefore we cross-compile all of our Linux bits on one docker image in CI. If you need to update the image that we use, simply follow the pattern from [this PR](https://github.com/dotnet/aspnetcore/pull/60260) to update the image we use in [ci.yml](https://github.com/dotnet/aspnetcore/blob/main/.azure/pipelines/ci.yml) and [ci-public.yml](https://github.com/dotnet/aspnetcore/blob/main/.azure/pipelines/ci-public.yml). Make sure to use one of the docker tags from the link above. + +## Testing on a new Operating System + +We run our tests in Helix on a variety of Operating Systems - the set of queues that we run tests on is listed in [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/main/eng/targets/Helix.Common.props). + +In order to update one of the queues we use, follow the example in [this PR](https://github.com/dotnet/aspnetcore/pull/54609) - if you change any property names, be sure to find and replace all instances of that property in the repo. + +In order to add a new queue to the Helix matrix, add the new queue to the top of [Helix.Common.props](https://github.com/dotnet/aspnetcore/blob/8ee12ef7a2c179f3d7c7da5ab33d76d652042d0b/eng/targets/Helix.Common.props#L3-L9), and add it to the [list of queues we use in the Helix Matrix](https://github.com/dotnet/aspnetcore/blob/8ee12ef7a2c179f3d7c7da5ab33d76d652042d0b/eng/targets/Helix.Common.props#L39-L60). Be sure to queue a build of the [aspnetcore-helix-matrix pipeline](https://dev.azure.com/dnceng-public/public/_build?definitionId=85) against your branch for validation. \ No newline at end of file diff --git a/docs/ReferenceResolution.md b/docs/ReferenceResolution.md index ec4a810fc764..dd9bc10124e8 100644 --- a/docs/ReferenceResolution.md +++ b/docs/ReferenceResolution.md @@ -104,6 +104,8 @@ is changing to `Microsoft.AspNetCore.BetterThanOrange`, you would need to make t `darc` is a command-line tool that is used for dependency management in the dotnet ecosystem of repos. `darc` can be installed using the `darc-init` scripts located inside the `eng/common` directory. Once `darc` is installed, you'll need to set up the appropriate access tokens as outlined [in the official Darc docs](https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md#setting-up-your-darc-client). +> :warning: Much of the functionality described below can now be done via the [web UI](https://maestro.dot.net/) - it's recommended to try that out first. + Once `darc` is installed and set-up, it can be used to modify the subscriptions and dependencies in a project. ### Getting the list of subscriptions in a repo diff --git a/docs/Servicing.md b/docs/Servicing.md index a958fb955260..d646a59c0766 100644 --- a/docs/Servicing.md +++ b/docs/Servicing.md @@ -4,7 +4,7 @@ We maintain several on-going releases at once and produce patches for them. An e See the [.NET Core release lifecycle](https://dotnet.microsoft.com/platform/support/policy/dotnet-core#lifecycle) for more details on the currently-supported .NET releases. -The status of current servicing fixes can be found on the [Servicing Status](https://github.com/dotnet/aspnetcore/projects/11) GitHub project. +The status of current servicing fixes can be found on the [Servicing Status](https://github.com/orgs/dotnet/projects/448) GitHub project. ## Servicing Bar diff --git a/docs/WebTransport.md b/docs/WebTransport.md index 3cf9b9d32d25..ae2ae6c33ce3 100644 --- a/docs/WebTransport.md +++ b/docs/WebTransport.md @@ -18,7 +18,7 @@ To use it, simply run from VS. This will launch the server and terminal. Now you ## Using Edge or Chrome DevTools as a client -The Chromium project has implemented a WebTransport client and can be accessed via their JS API from the Chrome or Edge DevTools console. A good sample app demonstrating how to use that API can be found [here](https://github.com/myjimmy/google-webtransport-sample/blob/ee13bde656c4d421d1f2a8e88fd71f572272c163/client.js). +The Chromium project has implemented a WebTransport client and can be accessed via their JS API from the Chrome or Edge DevTools console. A good sample app demonstrating how to use that API can be found in the [Google WebTransport sample repository](https://github.com/myjimmy/google-webtransport-sample/blob/ee13bde656c4d421d1f2a8e88fd71f572272c163/client.js). ## Note about preview features @@ -171,7 +171,7 @@ session.Abort(int errorCode); ``` Aborting a WebTransport session will result in severing the connection with the client and aborting all the streams. You can optionally specify an error code that will be passed down into the logs. The default value (256) represents no error. -**Note:** valid error codes are defined [here](https://www.rfc-editor.org/rfc/rfc9114.html#name-http-3-error-codes). +**Note:** valid error codes are defined in the [HTTP/3 Error Codes specification](https://www.rfc-editor.org/rfc/rfc9114.html#name-http-3-error-codes). - Aborting a WebTransport stream ```C# diff --git a/docs/area-owners.md b/docs/area-owners.md index 4511f3c2a776..618af640082d 100644 --- a/docs/area-owners.md +++ b/docs/area-owners.md @@ -2,37 +2,44 @@ The below table lists all the `area-`labels used in the **dotnet/aspnetcore** repository and their owners. -The **dotnet/runtime** repo has [its own list](https://github.com/dotnet/runtime/blob/main/docs/area-owners.md). +| area label | Owners | Doc Owners | Description | +| ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **[area-auth](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-auth)** | [@joperezr](https://github.com/joperezr) [@mikekistler](https://github.com/mikekistler) [@halter73](https://github.com/halter73) [@mackinnonbuck](https://github.com/mackinnonbuck) | [@wadepickett](https://github.com/wadepickett) [@tdykstra](https://github.com/tdykstra) | Authn, Authz, OAuth, OIDC, Bearer | +| **[area-blazor](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-blazor)** | [@lewing](https://github.com/lewing) [@danroth27](https://github.com/danroth27) [@aspnet-blazor-eng](https://github.com/aspnet-blazor-eng) | [@guardrex](https://github.com/guardrex) | Blazor, Razor Components (WASM issues may be moved to dotnet/runtime repo) | +| **[area-commandlinetools](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-commandlinetools)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) [@captainsafia](https://github.com/captainsafia) | [@wadepickett](https://github.com/wadepickett) | Command line tools, dotnet-dev-certs, dotnet-user-jwts, and OpenAPI | +| **[area-dataprotection](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-dataprotection)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@DeagleGross](https://github.com/DeagleGross) | [@tdykstra](https://github.com/tdykstra) | DataProtection | +| **[area-grpc](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-grpc)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) [@jamesnk](https://github.com/jamesnk) [@mgravell](https://github.com/mgravell) | [@wadepickett](https://github.com/wadepickett) | GRPC wire-up, templates (library itself is  https://github.com/grpc/grpc-dotnet) | +| **[area-healthchecks](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-healthchecks)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@samsp-msft](https://github.com/samsp-msft) [@brennanconroy](https://github.com/brennanconroy) | [@wadepickett](https://github.com/wadepickett) | Healthchecks (some bugs also in Extensions repo) | +| **[area-hosting](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-hosting)** | [@joperezr](https://github.com/joperezr) [@danroth27](https://github.com/danroth27) [@halter73](https://github.com/halter73) | [@tdykstra](https://github.com/tdykstra) | Includes Hosting | +| **[area-identity](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-identity)** | [@joperezr](https://github.com/joperezr) [@mikekistler](https://github.com/mikekistler) [@halter73](https://github.com/halter73) [@mackinnonbuck](https://github.com/mackinnonbuck) | [@tdykstra](https://github.com/tdykstra) [@wadepickett](https://github.com/wadepickett) | Identity and providers | +| **[area-infrastructure](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-infrastructure)** | [@joperezr](https://github.com/joperezr) [@wtgodbe](https://github.com/wtgodbe) | [@tdykstra](https://github.com/tdykstra) | MSBuild projects/targets, build scripts, CI, Installers and shared framework | +| **[area-middleware](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-middleware)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@samsp-msft](https://github.com/samsp-msft) [@brennanconroy](https://github.com/brennanconroy) | [@wadepickett](https://github.com/wadepickett) | URL rewrite, redirect, response cache/compression, session, caching, and other general middlewares | +| **[area-minimal](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-minimal)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) [@captainsafia](https://github.com/captainsafia) [@mitchdenny](https://github.com/mitchdenny) | [@wadepickett](https://github.com/wadepickett) | Includes minimal APIs, endpoint filters, parameter binding, request delegate generator etc | +| **[area-mvc](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-mvc)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) [@captainsafia](https://github.com/captainsafia) | [@tdykstra](https://github.com/tdykstra) | MVC, Actions and Controllers, Localization, CORS, most templates | +| **[area-networking](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-networking)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@samsp-msft](https://github.com/samsp-msft) [@brennanconroy](https://github.com/brennanconroy) [@DeagleGross](https://github.com/DeagleGross) | [@tdykstra](https://github.com/tdykstra) | Includes Kestrel/servers, protocols such as HTTP/2, HTTP3, YARP, jsonpatch, bedrock, websockets, http client factory, http abstractions, networking aspects of caching | +| **[area-perf](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-perf)** | [@joperezr](https://github.com/joperezr) [@sebastienros](https://github.com/sebastienros) | [@tdykstra](https://github.com/tdykstra) | Autofiled performance bugs, perf infra. | +| **[area-routing](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-routing)** | [@joperezr](https://github.com/joperezr) [@danroth27](https://github.com/danroth27) [@halter73](https://github.com/halter73) [@JamesNK](https://github.com/JamesNK) ([@javiercn](https://github.com/javiercn) consulting) | [@tdykstra](https://github.com/tdykstra) | Routing | +| **[area-security](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-security)** | [@joperezr](https://github.com/joperezr) [@mikekistler](https://github.com/mikekistler) [@halter73](https://github.com/halter73) [@mackinnonbuck](https://github.com/mackinnonbuck) | [@wadepickett](https://github.com/wadepickett) [@tdykstra](https://github.com/tdykstra) | security features/work | +| **[area-signalr](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-signalr)** | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) [@brennanconroy](https://github.com/brennanconroy) | [@wadepickett](https://github.com/wadepickett) | SignalR clients and servers | +| **[area-ui-rendering](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-ui-rendering)** | [@joperezr](https://github.com/joperezr) [@danroth27](https://github.com/danroth27) [@mackinnonbuck](https://github.com/mackinnonbuck) | [@wadepickett](https://github.com/wadepickett) | MVC Views/Pages, Razor Views/Page | +| **[area-unified-build](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-unified-build)** | [@joperezr](https://github.com/joperezr) [@wtgodbe](https://github.com/wtgodbe) | [@tdykstra](https://github.com/tdykstra) | Work related to https://github.com/dotnet/dotnet | + +| other repo | Owners | Doc Owners | Description | +| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------------------------------------------------------------------- | +| {aspire} | [@joperezr](https://github.com/joperezr) [@maddymontaquila](https://github.com/maddymontaquila) | [@IEvangelist](https://github.com/IEvangelist) | [https://github.com/dotnet/aspire](https://github.com/dotnet/aspire) | +| {extensions} | [@joperezr](https://github.com/joperezr) [@russkie](https://github.com/russkie) | [@wadepickett](https://github.com/wadepickett) | [https://github.com/dotnet/extensions](https://github.com/dotnet/extensions) | +| {orleans} | [@adityamandaleeka](https://github.com/adityamandaleeka) [@mikekistler](https://github.com/mikekistler) | [@IEvangelist](https://github.com/IEvangelist) | [https://github.com/dotnet/orleans](https://github.com/dotnet/orleans) | +| {systemwebadapters} | [@joperezr](https://github.com/joperezr) [@danroth27](https://github.com/danroth27) | [@tdykstra](https://github.com/tdykstra) | [https://github.com/dotnet/systemweb-adapters](https://github.com/dotnet/systemweb-adapters) | +| {yarp} | [@adityamandaleeka](https://github.com/adityamandaleeka) [@samsp-msft](https://github.com/samsp-msft) [@benjaminpetit](https://github.com/benjaminpetit) | [@wadepickett](https://github.com/wadepickett) | [https://github.com/dotnet/yarp](https://github.com/dotnet/yarp) | -| **area** | **owners** | **lead** | **notes** | -|-------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|----------------------------------------------------------|-------------------------| -| **[area-blazor](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-blazor)** | | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-commandlinetools](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-commandlinetools)** | [@amcasey](https://github.com/amcasey) [@captainsafia](https://github.com/captainsafia) | [@adityamandaleeka](https://github.com/adityamandaleeka) | dev certs, user jwts, user secrets, dotnet watch ([@tmat](https://github.com/tmat)) | -| **[area-dataprotection](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-dataprotection)** | [@amcasey](https://github.com/amcasey) | [@adityamandaleeka](https://github.com/adityamandaleeka) | | -| **[area-efcore](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-efcore)** | | [@ajcvickers](https://github.com/ajcvickers) | Home repo: https://github.com/dotnet/efcore/ | -| **[area-grpc](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-grpc)** | [@JamesNK](https://github.com/JamesNK) [@mgravell](https://github.com/mgravell) | [@adityamandaleeka](https://github.com/adityamandaleeka) | Home repo: https://github.com/grpc/grpc-dotnet/ | -| **[area-healthchecks](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-healthchecks)** | | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-hosting](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-hosting)** | [@halter73](https://github.com/halter73) | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-identity](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-identity)** | [@halter73](https://github.com/halter73) | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-infrastructure](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-infrastructure)** | [@wtgodbe](https://github.com/wtgodbe) | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-middleware](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-middleware)** | [@mitchdenny](https://github.com/mitchdenny) | [@adityamandaleeka](https://github.com/adityamandaleeka) | | -| **[area-minimal](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-minimal)** | [@captainsafia](https://github.com/captainsafia) [@mitchdenny](https://github.com/mitchdenny) | [@adityamandaleeka](https://github.com/adityamandaleeka) | | -| **[area-mvc](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-mvc)** | [@captainsafia](https://github.com/captainsafia) | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | @mkArtakMSFT owns views, @adityamandaleeka owns the other parts | -| **[area-networking](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-networking)** | [@amcasey](https://github.com/amcasey) | [@adityamandaleeka](https://github.com/adityamandaleeka) | | -| **[area-perf](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-perf)** | [@sebastienros](https://github.com/sebastienros) | | | -| **[area-razor.compiler](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-razor.compiler)** | | | | -| **[area-razor.tooling](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-razor.tooling)** | | | | -| **[area-routing](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-routing)** | | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-security](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-security)** | | [@blowdart](https://github.com/blowdart) | | -| **[area-signalr](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-signalr)** | [@BrennanConroy](https://github.com/BrennanConroy) | [@adityamandaleeka](https://github.com/adityamandaleeka) | | -| **[area-ui-rendering](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-ui-rendering)** | | [@mkArtakMSFT](https://github.com/mkArtakMSFT) | | -| **[area-web-frameworks](https://github.com/dotnet/aspnetcore/issues?q=is%3Aissue+is%3Aopen+label%3Aarea-web-frameworks)** | [@captainsafia](https://github.com/captainsafia) [@mitchdenny](https://github.com/mitchdenny) | [@adityamandaleeka](https://github.com/adityamandaleeka) | Label is deprecated | +The **dotnet/runtime** repo has [its own list](https://github.com/dotnet/runtime/blob/main/docs/area-owners.md). ## Community Triagers -While not necessarily associated with a specific area, these community members have the power to assist with routing and labeling issues and pull requests, and are generally knowledgeable about how the repo works: +While not necessarily associated with a specific area, these community members have the power to assist with routing and labeling issues and pull requests, and have been recognized for being consistently knowledgeable about and helpful in this repo: -- [@david-acker](https://github.com/david-acker) +- [@Andrzej-W](https://github.com/Andrzej-W) +- [@davidacker](https://github.com/davidacker) - [@egil](https://github.com/egil) - [@gfoidl](https://github.com/gfoidl) - [@hishamco](https://github.com/hishamco) diff --git a/docs/list-of-diagnostics.md b/docs/list-of-diagnostics.md index 64bbc9f53655..e6195634513e 100644 --- a/docs/list-of-diagnostics.md +++ b/docs/list-of-diagnostics.md @@ -30,6 +30,11 @@ | __`ASP0022`__ | Route conflict detected between route handlers | | __`ASP0023`__ | Route conflict detected between controller actions | | __`ASP0024`__ | Route handler has multiple parameters with the [FromBody] attribute | +| __`ASP0025`__ | Use AddAuthorizationBuilder | +| __`ASP0026`__ | [Authorize] overridden by [AllowAnonymous] from farther away | +| __`ASP0027`__ | Unnecessary public Program class declaration | +| __`ASP0028`__ | Consider using ListenAnyIP() instead of Listen(IPAddress.Any) | +| __`ASP0029`__ | Experimental warning for validations resolver APIs | ### API (`API1000-API1003`) diff --git a/eng/AfterSolutionBuild.targets b/eng/AfterSolutionBuild.targets index de108aec2723..c629174994f3 100644 --- a/eng/AfterSolutionBuild.targets +++ b/eng/AfterSolutionBuild.targets @@ -1,12 +1,12 @@ + - + <_BuildOutput Include="$(ArtifactsShippingPackagesDir)*.nupkg" Exclude="$(ArtifactsShippingPackagesDir)*.symbols.nupkg" /> diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props index 9effde6fbf51..f566358b9acb 100644 --- a/eng/Baseline.Designer.props +++ b/eng/Baseline.Designer.props @@ -2,485 +2,488 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 8.0.0 + 9.0.0 - - - 8.0.0 + + + 9.0.0 - - - 8.0.0 + + + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - - + + + - - - - + + + + - - - + + + - 8.0.0 + 9.0.0 - - - + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - - - - - - + + + + + + - 8.0.0 + 9.0.0 - - - - - - + + + + + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - - - - - + + + + + + + - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - - - + + + - - - + + - - - + + + - - - + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - + - - + + - + - 8.0.0 + 9.0.0 - - - - - - + + + + + + - + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - + + - - - + + + - - + + - 8.0.0 + 9.0.0 - - + + - - - + + + - - + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - + + + + - - - - + + + + + - - - + + + + - - - + + + + - 8.0.0 + 9.0.0 - - + + - - + + - - + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - - - + + + - 8.0.0 + 9.0.0 - + @@ -490,505 +493,510 @@ - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - + - + - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - - - + + + - - + + - 8.0.0 + 9.0.0 - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - 8.0.0 + 9.0.0 - - + + - + - - - + + + - - - + + + - 8.0.0 + 9.0.0 - + - - + + - + - 8.0.0 + 9.0.0 - - + + - - - + + + - - + + - 8.0.0 + 9.0.0 - + - - + + - + - 8.0.0 + 9.0.0 - - - - - + + + + + - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - - - 8.0.0 + 9.0.0 - - - + + - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - 8.0.0 + + + 9.0.0 - - - 8.0.0 + + + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - + + + + - - - - + + + + + - - - + + + + - 8.0.0 + 9.0.0 - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - 8.0.0 + 9.0.0 - - + + - - - + + + - - + + - 8.0.0 + 9.0.0 - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - - + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - + - 8.0.0 + 9.0.0 - + - 8.0.0 + 9.0.0 - - - + + + - - - - + + + + - - - + + + - 8.0.0 + 9.0.0 - - - + + + - - - - + + + + - - - + + + - 8.0.0 + 9.0.0 - - - - + + + + - - - - - + + + + + - - - - + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - - - + + + + + - - - - - - + + + + + + - - - - - + + + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - - + + + - - - + + + - - - + + + - 8.0.0 + 9.0.0 - 8.0.0 + 9.0.0 - - + + - 8.0.0 + 9.0.0 - - + + \ No newline at end of file diff --git a/eng/Baseline.xml b/eng/Baseline.xml index a53374025b2a..1b4ce55e8e33 100644 --- a/eng/Baseline.xml +++ b/eng/Baseline.xml @@ -4,110 +4,110 @@ This file contains a list of all the packages and their versions which were rele Update this list when preparing for a new patch. --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eng/Build.props b/eng/Build.props index 57f53a3ce17b..33d09a7a1017 100644 --- a/eng/Build.props +++ b/eng/Build.props @@ -9,7 +9,7 @@ the format is correct) and undo any temporary changes. When complete, only BuildAfterTargetingPack.csproj and other @(RequiresDelayedBuild) projects should mention projects listed in RequiresDelayedBuildProjects.props. --> - + @@ -55,11 +55,24 @@ $(RepoRoot)src\Servers\Kestrel\perf\PlatformBenchmarks\**\*.csproj; $(RepoRoot)src\SignalR\perf\benchmarkapps\**\*.csproj; " /> + + + + + + + - + @@ -70,60 +83,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + Platform=x86 + $(DotNetBuildPass) + + + $(DotNetBuildPass) + + + + $(DotNetBuildPass) + - - - - + + + + + + + - + - + + + + - + + + + - + + + + + + + + - + + + + + + + + + + + + + <_BuildWindowsInstallers Condition="'$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64' OR '$(TargetArchitecture)' == 'arm64') ">true + + <_VcxTargetPlatform Condition="'$(TargetArchitecture)' == 'x86'">Win32 + <_VcxTargetPlatform Condition="'$(TargetArchitecture)' == 'x64'">x64 + <_VcxTargetPlatform Condition="'$(TargetArchitecture)' == 'arm64'">ARM64 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eng/Common.props b/eng/Common.props index 40ede46e5522..f48599b4970f 100644 --- a/eng/Common.props +++ b/eng/Common.props @@ -4,10 +4,14 @@ osx linux freebsd + x64 + $(TargetArchitecture) + Win32 + $(TargetOsName)-$(TargetArchitecture) true - $(TargetRuntimeIdentifier) + $(TargetRuntimeIdentifier) $(BuildNodeJSUnlessSourcebuild) false @@ -27,4 +31,22 @@ false + + + + + false + + + + + true + $(PublishAllBuildsAssetsInThisJob) + diff --git a/eng/Dependencies.props b/eng/Dependencies.props index af9ef7fa88e3..d41269c96137 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -27,6 +27,7 @@ and are generated based on the last package release. + @@ -66,10 +67,11 @@ and are generated based on the last package release. - - + + + - + @@ -79,16 +81,17 @@ and are generated based on the last package release. - + + - + @@ -141,10 +144,10 @@ and are generated based on the last package release. - - + + @@ -222,6 +225,7 @@ and are generated based on the last package release. + @@ -251,7 +255,26 @@ and are generated based on the last package release. --> $(MicrosoftNETCoreAppRuntimeVersion) + Condition=" $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime.')) or $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Crossgen2.'))">$(MicrosoftNETCoreAppRefVersion) + + + + + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) diff --git a/eng/DotNetBuild.props b/eng/DotNetBuild.props deleted file mode 100644 index 8f6e67aba60f..000000000000 --- a/eng/DotNetBuild.props +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - aspnetcore - true - netstandard2.0%3bnetstandard2.1%3bnetcoreapp2.1%3bnetcoreapp3.1%3bnet5.0%3bnet6.0%3bnet7.0%3bnet8.0%3bnet9.0 - - - - - - - - - - - - - <_AdditionalRepoTaskBuildArgs /> - <_AdditionalRepoTaskBuildArgs Condition="'$(DotNetRuntimeSourceFeed)' != ''" >$(_AdditionalRepoTaskBuildArgs) --runtimesourcefeed $(DotNetRuntimeSourceFeed) - <_AdditionalRepoTaskBuildArgs Condition="'$(DotNetRuntimeSourceFeedKey)' != ''" >$(_AdditionalRepoTaskBuildArgs) --runtimesourcefeedkey $(DotNetRuntimeSourceFeedKey) - <_AdditionalRepoTaskBuildArgs Condition="'$(RestoreConfigFile)' != ''" >$(_AdditionalRepoTaskBuildArgs) /p:RestoreConfigFile=$(RestoreConfigFile) - - - - - - - - - - - - - - - - - - $(InnerBuildArgs) /p:CrossgenOutput=false - - - - - - $(CurrentRepoSourceBuildArtifactsDir)\installers\$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - - - - <_AdditionalEnvironmentVariable Condition="$(ArcadeBuildFromSource) == 'true'">PUPPETEER_SKIP_DOWNLOAD=1 - - - - - - - - - - - - - - - diff --git a/eng/Npm.Workspace.FunctionalTests.nodeproj b/eng/Npm.Workspace.FunctionalTests.nodeproj index 16fb46697cfb..bab16d51900b 100644 --- a/eng/Npm.Workspace.FunctionalTests.nodeproj +++ b/eng/Npm.Workspace.FunctionalTests.nodeproj @@ -1,4 +1,4 @@ - + diff --git a/eng/Npm.Workspace.nodeproj b/eng/Npm.Workspace.nodeproj index 58722e78cc3a..d28b99c7af83 100644 --- a/eng/Npm.Workspace.nodeproj +++ b/eng/Npm.Workspace.nodeproj @@ -1,4 +1,4 @@ - + @@ -19,15 +19,131 @@ <_NpmAdditionalEnvironmentVariables>PUPPETEER_SKIP_DOWNLOAD=1 - + + $(MSBuildThisFileDirectory).. + $(NpmWorkspaceRoot)\node_modules\.package-lock.json + + + **\pkg-version.ts; + $(NpmWorkspaceRoot)\src\**\node_modules\**\*; + $(NpmWorkspaceRoot)\src\**\bin\**\*; + $(NpmWorkspaceRoot)\src\**\obj\**\* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix) @@ -36,7 +152,7 @@ - @@ -51,13 +167,19 @@ - + $(VersionPrefix) $(VersionPrefix)-$(VersionSuffix) + + + + diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index d95f9cd46411..4dcee4af652b 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -5,9 +5,11 @@ --> + + @@ -168,5 +170,6 @@ + diff --git a/eng/Publishing.props b/eng/Publishing.props index 002b0d7fb8ee..0da2def77321 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -3,17 +3,13 @@ true - + false + '$(DotNetBuild)' != 'true'">false - true false @@ -22,34 +18,6 @@ - - - <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.jar" UploadPathSegment="jar" /> - <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.pom" UploadPathSegment="jar" /> - - <_InstallersToPublish Include="$(ArtifactsDir)packages\**\*.tgz" UploadPathSegment="npm" Condition="'$(OS)' == 'Windows_NT' or '$(DotNetBuildOrchestrator)' == 'true'" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.version" UploadPathSegment="Runtime" Condition="'$(PublishInstallerBaseVersion)' == 'true'" /> - - - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.deb" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.exe" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.msi" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.rpm" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.tar.gz" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.wixlib" UploadPathSegment="Runtime" ChecksumPath="%(FullPath).sha512" /> - <_InstallersToPublish Include="$(ArtifactsDir)installers\**\*.zip" UploadPathSegment="Runtime" > - - %(FullPath).sha512 - - - - <_InstallersToPublish Remove="$(ArtifactsDir)installers\**\*.wixpack.zip" Condition="'$(PostBuildSign)' != 'true'" /> - - - - false - true - @@ -69,10 +37,10 @@ + + Condition="'$(PublishInstallerBaseVersion)' == 'true' and '$(DotNetBuildPass)' != '2'"> @@ -88,25 +56,23 @@ - - + - - + diff --git a/eng/RequiresDelayedBuildProjects.props b/eng/RequiresDelayedBuildProjects.props index 1a771e0d5e74..1383ad7a677c 100644 --- a/eng/RequiresDelayedBuildProjects.props +++ b/eng/RequiresDelayedBuildProjects.props @@ -22,7 +22,13 @@ + + + + + + diff --git a/eng/SharedFramework.External.props b/eng/SharedFramework.External.props index 8b5b19fb9861..a24d266f8f27 100644 --- a/eng/SharedFramework.External.props +++ b/eng/SharedFramework.External.props @@ -42,6 +42,7 @@ + diff --git a/eng/SharedFramework.Local.props b/eng/SharedFramework.Local.props index 533709fb9bf4..28efd974e7f0 100644 --- a/eng/SharedFramework.Local.props +++ b/eng/SharedFramework.Local.props @@ -37,6 +37,7 @@ + diff --git a/eng/ShippingAssemblies.props b/eng/ShippingAssemblies.props index 0f6c1a3cdd4e..0acec8474d50 100644 --- a/eng/ShippingAssemblies.props +++ b/eng/ShippingAssemblies.props @@ -105,8 +105,11 @@ + + + diff --git a/eng/Signing.props b/eng/Signing.props index c8f233696c6f..7537e82282fc 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -2,87 +2,12 @@ - - - - - - - true - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -92,21 +17,27 @@ + + + + + $(ArtifactsObjDir)RedistSharedFx.Layout\$(Configuration)\ $(BaseRedistNetCorePath)$(TargetRuntimeIdentifier)\ - - - - + + + + + + + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.jar" UploadPathSegment="jar/" ChecksumPath="%(FullPath).sha512" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.pom" UploadPathSegment="jar/" ChecksumPath="%(FullPath).sha512" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> + + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.tgz" UploadPathSegment="npm/" ChecksumPath="%(FullPath).sha512" Condition="'$(PublishAllBuildsAssetsInThisJob)' == 'true'" /> + <_InstallersToPublish Include="$(ArtifactsDir)installers\$(Configuration)\**\*.version" UploadPathSegment="Runtime/" Condition="'$(PublishInstallerBaseVersion)' == 'true'" /> + + + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.deb" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.rpm" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.tar.gz" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.exe" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.msi" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsPackagesDir)**\*.zip" UploadPathSegment="Runtime/" > + %(FullPath).sha512 + + + <_InstallersToPublish Include="$(ArtifactsDir)installers\$(Configuration)\**\*.exe" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsDir)installers\$(Configuration)\**\*.msi" UploadPathSegment="Runtime/" ChecksumPath="%(FullPath).sha512" /> + <_InstallersToPublish Include="$(ArtifactsDir)installers\$(Configuration)\**\*.zip" UploadPathSegment="Runtime/" > + %(FullPath).sha512 + + + + true + false + false + + + diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml deleted file mode 100644 index 4c14fddbe34c..000000000000 --- a/eng/SourceBuildPrebuiltBaseline.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eng/Tools.props b/eng/Tools.props index e00d1d215cee..c71ff436864d 100644 --- a/eng/Tools.props +++ b/eng/Tools.props @@ -1,8 +1,7 @@ - + + AfterTargets="Restore"> + diff --git a/eng/Version.Details.props b/eng/Version.Details.props new file mode 100644 index 000000000000..d52eba764667 --- /dev/null +++ b/eng/Version.Details.props @@ -0,0 +1,238 @@ + + + + + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0-beta.25515.111 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0-rtm.25515.111 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0-rtm.25515.111 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0-rtm.25515.111 + 10.0.0-rtm.25515.111 + 3.2.0-preview.25515.111 + 7.0.0-rc.1611 + 7.0.0-rc.1611 + 7.0.0-rc.1611 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + 10.0.0 + + 4.13.0-3.24613.7 + 4.13.0-3.24613.7 + 4.13.0-3.24613.7 + 4.13.0-3.24613.7 + + 9.10.0-preview.1.25475.1 + 9.10.0-preview.1.25475.1 + 9.10.0-preview.1.25475.1 + + 1.0.0-prerelease.25502.1 + 1.0.0-prerelease.25502.1 + 1.0.0-prerelease.25502.1 + 1.0.0-prerelease.25502.1 + 1.0.0-prerelease.25502.1 + + 17.12.36 + 17.12.36 + 17.12.36 + 17.12.36 + + + + + $(dotnetefPackageVersion) + $(MicrosoftBclAsyncInterfacesPackageVersion) + $(MicrosoftBclTimeProviderPackageVersion) + $(MicrosoftDotNetArcadeSdkPackageVersion) + $(MicrosoftDotNetBuildTasksArchivesPackageVersion) + $(MicrosoftDotNetBuildTasksInstallersPackageVersion) + $(MicrosoftDotNetBuildTasksTemplatingPackageVersion) + $(MicrosoftDotNetHelixSdkPackageVersion) + $(MicrosoftDotNetRemoteExecutorPackageVersion) + $(MicrosoftDotNetSharedFrameworkSdkPackageVersion) + $(MicrosoftEntityFrameworkCorePackageVersion) + $(MicrosoftEntityFrameworkCoreDesignPackageVersion) + $(MicrosoftEntityFrameworkCoreInMemoryPackageVersion) + $(MicrosoftEntityFrameworkCoreRelationalPackageVersion) + $(MicrosoftEntityFrameworkCoreSqlitePackageVersion) + $(MicrosoftEntityFrameworkCoreSqlServerPackageVersion) + $(MicrosoftEntityFrameworkCoreToolsPackageVersion) + $(MicrosoftExtensionsCachingAbstractionsPackageVersion) + $(MicrosoftExtensionsCachingMemoryPackageVersion) + $(MicrosoftExtensionsConfigurationPackageVersion) + $(MicrosoftExtensionsConfigurationAbstractionsPackageVersion) + $(MicrosoftExtensionsConfigurationBinderPackageVersion) + $(MicrosoftExtensionsConfigurationCommandLinePackageVersion) + $(MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion) + $(MicrosoftExtensionsConfigurationFileExtensionsPackageVersion) + $(MicrosoftExtensionsConfigurationIniPackageVersion) + $(MicrosoftExtensionsConfigurationJsonPackageVersion) + $(MicrosoftExtensionsConfigurationUserSecretsPackageVersion) + $(MicrosoftExtensionsConfigurationXmlPackageVersion) + $(MicrosoftExtensionsDependencyInjectionPackageVersion) + $(MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion) + $(MicrosoftExtensionsDependencyModelPackageVersion) + $(MicrosoftExtensionsDiagnosticsPackageVersion) + $(MicrosoftExtensionsDiagnosticsAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersAbstractionsPackageVersion) + $(MicrosoftExtensionsFileProvidersCompositePackageVersion) + $(MicrosoftExtensionsFileProvidersPhysicalPackageVersion) + $(MicrosoftExtensionsFileSystemGlobbingPackageVersion) + $(MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion) + $(MicrosoftExtensionsHostingPackageVersion) + $(MicrosoftExtensionsHostingAbstractionsPackageVersion) + $(MicrosoftExtensionsHttpPackageVersion) + $(MicrosoftExtensionsLoggingPackageVersion) + $(MicrosoftExtensionsLoggingAbstractionsPackageVersion) + $(MicrosoftExtensionsLoggingConfigurationPackageVersion) + $(MicrosoftExtensionsLoggingConsolePackageVersion) + $(MicrosoftExtensionsLoggingDebugPackageVersion) + $(MicrosoftExtensionsLoggingEventLogPackageVersion) + $(MicrosoftExtensionsLoggingEventSourcePackageVersion) + $(MicrosoftExtensionsLoggingTraceSourcePackageVersion) + $(MicrosoftExtensionsOptionsPackageVersion) + $(MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion) + $(MicrosoftExtensionsOptionsDataAnnotationsPackageVersion) + $(MicrosoftExtensionsPrimitivesPackageVersion) + $(MicrosoftInternalRuntimeAspNetCoreTransportPackageVersion) + $(MicrosoftNETRuntimeMonoAOTCompilerTaskPackageVersion) + $(MicrosoftNETRuntimeWebAssemblySdkPackageVersion) + $(MicrosoftNETCoreAppRefPackageVersion) + $(MicrosoftNETCoreBrowserDebugHostTransportPackageVersion) + $(MicrosoftNETCorePlatformsPackageVersion) + $(MicrosoftWebXdtPackageVersion) + $(NuGetFrameworksPackageVersion) + $(NuGetPackagingPackageVersion) + $(NuGetVersioningPackageVersion) + $(SystemCollectionsImmutablePackageVersion) + $(SystemCompositionPackageVersion) + $(SystemConfigurationConfigurationManagerPackageVersion) + $(SystemDiagnosticsDiagnosticSourcePackageVersion) + $(SystemDiagnosticsEventLogPackageVersion) + $(SystemDiagnosticsPerformanceCounterPackageVersion) + $(SystemDirectoryServicesProtocolsPackageVersion) + $(SystemFormatsAsn1PackageVersion) + $(SystemFormatsCborPackageVersion) + $(SystemIOHashingPackageVersion) + $(SystemIOPipelinesPackageVersion) + $(SystemMemoryDataPackageVersion) + $(SystemNetHttpJsonPackageVersion) + $(SystemNetHttpWinHttpHandlerPackageVersion) + $(SystemNetServerSentEventsPackageVersion) + $(SystemNumericsTensorsPackageVersion) + $(SystemReflectionMetadataPackageVersion) + $(SystemResourcesExtensionsPackageVersion) + $(SystemRuntimeCachingPackageVersion) + $(SystemSecurityCryptographyPkcsPackageVersion) + $(SystemSecurityCryptographyXmlPackageVersion) + $(SystemSecurityPermissionsPackageVersion) + $(SystemServiceProcessServiceControllerPackageVersion) + $(SystemTextEncodingsWebPackageVersion) + $(SystemTextJsonPackageVersion) + $(SystemThreadingAccessControlPackageVersion) + $(SystemThreadingChannelsPackageVersion) + $(SystemThreadingRateLimitingPackageVersion) + + $(MicrosoftCodeAnalysisCommonPackageVersion) + $(MicrosoftCodeAnalysisCSharpPackageVersion) + $(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion) + $(MicrosoftCodeAnalysisExternalAccessAspNetCorePackageVersion) + + $(MicrosoftExtensionsCachingHybridPackageVersion) + $(MicrosoftExtensionsDiagnosticsTestingPackageVersion) + $(MicrosoftExtensionsTimeProviderTestingPackageVersion) + + $(optimizationlinuxarm64MIBCRuntimePackageVersion) + $(optimizationlinuxx64MIBCRuntimePackageVersion) + $(optimizationwindows_ntarm64MIBCRuntimePackageVersion) + $(optimizationwindows_ntx64MIBCRuntimePackageVersion) + $(optimizationwindows_ntx86MIBCRuntimePackageVersion) + + $(MicrosoftBuildPackageVersion) + $(MicrosoftBuildFrameworkPackageVersion) + $(MicrosoftBuildTasksCorePackageVersion) + $(MicrosoftBuildUtilitiesCorePackageVersion) + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a65febf0683c..9e723335d9cf 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -8,437 +8,450 @@ See https://github.com/dotnet/arcade/blob/master/Documentation/Darc.md for instructions on using darc. --> + - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/efcore - c7035b3ccc485a63bd03a64da4d9f0ec18f27948 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 - - - https://github.com/dotnet/xdt - c2a9df9c1867454039a1223cef1c090359e33646 - - - - https://github.com/dotnet/xdt - c2a9df9c1867454039a1223cef1c090359e33646 - - - - https://github.com/dotnet/source-build-reference-packages - 1b838a42e4952b8fdf212cb1b43c5ce4d69f27b3 - - - - - https://github.com/dotnet/roslyn - afa1eb6821f62183651ab017b2f5c3fbeb934904 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/roslyn - afa1eb6821f62183651ab017b2f5c3fbeb934904 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/roslyn - afa1eb6821f62183651ab017b2f5c3fbeb934904 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - + + + https://github.com/dotnet/roslyn - afa1eb6821f62183651ab017b2f5c3fbeb934904 + 06f095f368c0ea9d54c80e313279574da9d96ea3 - - + https://github.com/dotnet/roslyn - afa1eb6821f62183651ab017b2f5c3fbeb934904 - + afdd413cee50c16318620252e4e64dc326e2d300 - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/roslyn + afdd413cee50c16318620252e4e64dc326e2d300 - - - https://github.com/dotnet/source-build-externals - eab3dc5eabdf8bcd9bbdf917741aab335c74373d - + + https://github.com/dotnet/roslyn + afdd413cee50c16318620252e4e64dc326e2d300 + - - https://github.com/dotnet/runtime - 3d9da91a9720f7bda3e4cef127b8195441fb2580 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/winforms - ed3e6c60a08cae482f78e5f31e87393a995bfbd4 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 - + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/dotnet/arcade - 04b9022eba9c184a8036328af513c22e6949e8b6 + + https://github.com/dotnet/extensions + c4e57fb1e6b8403a527ea3cd737f1146dcbc1f31 - + https://github.com/dotnet/extensions - 43e4b5c99ad3ebcb2b05285ba8aabbfc6acd42e7 + c4e57fb1e6b8403a527ea3cd737f1146dcbc1f31 - + https://github.com/dotnet/extensions - 43e4b5c99ad3ebcb2b05285ba8aabbfc6acd42e7 + c4e57fb1e6b8403a527ea3cd737f1146dcbc1f31 + + + https://dev.azure.com/dnceng/internal/_git/dotnet-optimization + 71ce9774e9875270b80faaac1d6b60568a80e1fa + + + https://dev.azure.com/dnceng/internal/_git/dotnet-optimization + 71ce9774e9875270b80faaac1d6b60568a80e1fa + + + https://dev.azure.com/dnceng/internal/_git/dotnet-optimization + 71ce9774e9875270b80faaac1d6b60568a80e1fa + + + https://dev.azure.com/dnceng/internal/_git/dotnet-optimization + 71ce9774e9875270b80faaac1d6b60568a80e1fa + + + https://dev.azure.com/dnceng/internal/_git/dotnet-optimization + 71ce9774e9875270b80faaac1d6b60568a80e1fa + + + + + https://github.com/dotnet/msbuild + d1cce8d7cc03c23a4f1bad8e9240714fd9d199a3 + + + https://github.com/dotnet/msbuild + d1cce8d7cc03c23a4f1bad8e9240714fd9d199a3 + + + https://github.com/dotnet/msbuild + d1cce8d7cc03c23a4f1bad8e9240714fd9d199a3 - - https://github.com/nuget/nuget.client - 8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8 + + https://github.com/dotnet/msbuild + d1cce8d7cc03c23a4f1bad8e9240714fd9d199a3 - - https://github.com/nuget/nuget.client - 8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - https://github.com/nuget/nuget.client - 8fef55f5a55a3b4f2c96cd1a9b5ddc51d4b927f8 + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 - - - https://github.com/dotnet/symreader - 0710a7892d89999956e8808c28e9dd0512bd53f3 - + + https://github.com/dotnet/dotnet + 79c85d969a02abd06c2202949318fd4c21e5e7a0 + diff --git a/eng/Versions.props b/eng/Versions.props index 9df28b4590d1..df7f15551a4a 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -5,12 +5,12 @@ --> + - 9 + 10 0 0 - - + true 8.0.1 *-* @@ -20,7 +20,7 @@ false release rtm - RTM + RTM $(PreReleaseVersionIteration) true false $(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion) @@ -44,11 +44,11 @@ src\Components\WebAssembly\Sdk\testassets\Directory.Build.props, and src\Razor\test\testassets\Directory.Build.props when this changes. --> - net9.0 + net10.0 - net8.0 + net10.0 @@ -57,183 +57,40 @@ false - - - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - 9.0.0-rtm.24473.2 - - 9.0.0-preview.9.24472.1 - 9.0.0-preview.9.24472.1 - - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - 9.0.0-rtm.24473.8 - - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - - - 6.2.4 - 6.2.4 - 6.2.4 - - 9.0.0-beta.24466.2 - 9.0.0-beta.24466.2 - 9.0.0-beta.24466.2 - 9.0.0-beta.24466.2 - - 9.0.0-alpha.1.24452.1 - - 9.0.0-alpha.1.24413.1 - - 2.2.0-beta.24327.2 - - 9.0.0-rtm.24472.2 - - 9.0.0-preview.24453.1 - 9.0.0-preview.24453.1 - - - - - $(MicrosoftNETCoreAppRuntimewinx64Version) - + + 6.0.0 + 6.1.3 + 4.6.1 + 4.6.3 + 4.6.3 + 4.6.1 5.0.0-preview.3.20215.2 15.9.3032 - 8.0.0 4.7.0 5.0.0 2.0.3 - 4.5.0 4.4.0 0.3.0-alpha.19317.1 4.3.0 4.3.4 4.3.0 - 4.3.2 4.3.2 4.3.0 - 4.5.4 - 4.5.0 5.2.6 6.0.0 6.0.0 6.0.0 - 1.1.1 - 17.4.0 1.2.0 - 17.4.0 - 17.4.0 - 17.4.0 1.2.6 - 17.4.0 3.3.1 3.3.1 - - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 - 4.11.0-1.24218.5 + 4.13.0-3.24613.7 3.3.3 - 1.1.2-beta1.24121.1 - 1.1.2-beta1.24121.1 + 1.1.2 + 1.1.2 + 1.1.2 1.0.0-20230414.1 $(IdentityModelVersion) $(IdentityModelVersion) @@ -276,12 +130,12 @@ 5.0.0-alpha.20560.6 5.0.0 - 6.0.25-servicing-23523-15 - $(MicrosoftAspNetCoreAzureAppServicesSiteExtension60Version) - $(MicrosoftAspNetCoreAzureAppServicesSiteExtension60Version) 8.0.0-rtm-23531-12 $(MicrosoftAspNetCoreAzureAppServicesSiteExtension80Version) $(MicrosoftAspNetCoreAzureAppServicesSiteExtension80Version) + 9.0.0-rtm-24529-3 + $(MicrosoftAspNetCoreAzureAppServicesSiteExtension90Version) + $(MicrosoftAspNetCoreAzureAppServicesSiteExtension90Version) 1.11.4 0.9.9 @@ -296,12 +150,11 @@ 2.64.0 2.64.0 2.64.0 - 2.5.108 - 3.0.0 - 3.0.0 - 3.0.0 - 3.0.0 - 6.0.1 + 2.5.187 + 3.14.1 + 3.14.1 + 3.14.1 + 3.14.1 0.3.46-beta $(MessagePackVersion) 4.10.0 @@ -311,27 +164,28 @@ 13.0.3 13.0.4 2.5.2 - 1.45.1 + 1.54.0 3.0.0 7.2.4 - 4.22.0 - 4.22.0 + 4.34.0 + 4.34.0 1.4.0 4.0.0 2.7.27 5.0.0 6.6.2 + 2.2.0 19.14.0 2.0.3 - 1.0.0 - 2.4.2 + 1.15.0 + 2.9.2 $(XunitVersion) $(XunitVersion) $(XunitVersion) - 2.4.3 - 4.0.5 - 1.6.17 - 1.6.17 + 3.1.3 + 5.2.2 + 2.0.0 + 2.0.0 6.0.322601 1.10.93 diff --git a/eng/build.ps1 b/eng/build.ps1 index 3696fe11e0df..854fe0679036 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -99,6 +99,12 @@ Additional feed that can be used when downloading .NET runtimes and SDKs .PARAMETER RuntimeSourceFeedKey Key for feed that can be used when downloading .NET runtimes and SDKs +.PARAMETER ProductBuild +Build the repository in product mode (short: -pb). + +.PARAMETER fromVMR +Set when building from within the VMR. + .EXAMPLE Building both native and managed projects. @@ -184,6 +190,7 @@ param( [Alias('v')] [string]$Verbosity = 'minimal', [switch]$DumpProcesses, # Capture all running processes and dump them to a file. + [string]$msbuildEngine = 'dotnet', # Other lifecycle targets [switch]$Help, # Show help @@ -195,6 +202,13 @@ param( [Alias('DotNetRuntimeSourceFeedKey')] [string]$RuntimeSourceFeedKey, + # Product build + [Alias('pb')] + [switch]$ProductBuild, + + # Intentionally lowercase as tools.ps1 depends on it + [switch]$fromVMR, + # Capture the rest [Parameter(ValueFromRemainingArguments = $true)] [string[]]$MSBuildArguments @@ -249,6 +263,8 @@ if ($BuildManaged -or ($All -and (-not $NoBuildManaged))) { } } +$CommandLineArguments = $MSBuildArguments + if ($NoBuildDeps) { $MSBuildArguments += "/p:BuildProjectReferences=false" } $RunBuild = if ($NoBuild) { $false } else { $true } @@ -272,6 +288,9 @@ $MSBuildArguments += "/p:Publish=$Publish" $MSBuildArguments += "/p:TargetArchitecture=$Architecture" $MSBuildArguments += "/p:TargetOsName=win" +if ($ProductBuild) { $MSBuildArguments += "/p:DotNetBuild=$ProductBuild" } +if ($fromVMR) { $MSBuildArguments += "/p:DotNetBuildFromVMR=$fromVMR" } + if (-not $Configuration) { $Configuration = if ($CI) { 'Release' } else { 'Debug' } } @@ -286,26 +305,30 @@ if ($RuntimeSourceFeed -or $RuntimeSourceFeedKey) { $ToolsetBuildArguments += $runtimeFeedArg $ToolsetBuildArguments += $runtimeFeedKeyArg } +if ($ProductBuild) { $ToolsetBuildArguments += "/p:DotNetBuild=$ProductBuild" } +if ($fromVMR) { $ToolsetBuildArguments += "/p:DotNetBuildFromVMR=$fromVMR" } # Split build categories between dotnet msbuild and desktop msbuild. Use desktop msbuild as little as possible. -[string[]]$dotnetBuildArguments = $MSBuildArguments +[string[]]$dotnetBuildArguments = '' +[string[]]$MSBuildOnlyArguments = '' + if ($All) { $dotnetBuildArguments += '/p:BuildAllProjects=true' } if ($Projects) { if ($BuildNative) { - $MSBuildArguments += "/p:ProjectToBuild=$Projects" + $MSBuildOnlyArguments += "/p:ProjectToBuild=$Projects" } else { $dotnetBuildArguments += "/p:ProjectToBuild=$Projects" } } -if ($NoBuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=false"; $BuildInstallers = $false } -if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" } +if ($NoBuildInstallers) { $MSBuildOnlyArguments += "/p:BuildInstallers=false"; $BuildInstallers = $false } +if ($BuildInstallers) { $MSBuildOnlyArguments += "/p:BuildInstallers=true" } # Build native projects by default unless -NoBuildNative was specified. $specifiedBuildNative = $BuildNative $BuildNative = $true -if ($NoBuildNative) { $MSBuildArguments += "/p:BuildNative=false"; $BuildNative = $false } -if ($BuildNative) { $MSBuildArguments += "/p:BuildNative=true"} +if ($NoBuildNative) { $MSBuildOnlyArguments += "/p:BuildNative=false"; $BuildNative = $false } +if ($BuildNative) { $MSBuildOnlyArguments += "/p:BuildNative=true"} if ($NoBuildJava) { $dotnetBuildArguments += "/p:BuildJava=false"; $BuildJava = $false } if ($BuildJava) { $dotnetBuildArguments += "/p:BuildJava=true" } @@ -317,23 +340,24 @@ if ($BuildNodeJS) { $dotnetBuildArguments += "/p:BuildNodeJSUnlessSourcebuild=tr # Don't bother with two builds if just one will build everything. Ignore super-weird cases like # "-Projects ... -NoBuildJava -NoBuildManaged -NoBuildNodeJS". An empty `./build.ps1` command will build both # managed and native projects. -$performDesktopBuild = $BuildInstallers -or $BuildNative -$performDotnetBuild = $BuildJava -or $BuildManaged -or $BuildNodeJS -or ` + +# If -msbuildEngine vs is explicitly passed in, use desktop msbuild only. +# This is necessary for one-shot builds like within the VMR. + +$performDesktopBuild = $BuildInstallers -or $BuildNative -or $msbuildEngine -eq 'vs' +$performDotnetBuild = $msBuildEngine -ne 'vs' -and ($BuildJava -or $BuildManaged -or $BuildNodeJS -or ` ($All -and -not ($NoBuildJava -and $NoBuildManaged -and $NoBuildNodeJS)) -or ` - ($Projects -and -not ($BuildInstallers -or $specifiedBuildNative)) + ($Projects -and -not ($BuildInstallers -or $specifiedBuildNative))) # Initialize global variables need to be set before the import of Arcade is imported $restore = $RunRestore -# Though VS Code may indicate $nodeReuse and $msbuildEngine are unused, tools.ps1 uses them. +# Though VS Code may indicate $nodeReuse is unused, tools.ps1 uses them. # Disable node reuse - Workaround perpetual issues in node reuse and custom task assemblies $nodeReuse = $false $env:MSBUILDDISABLENODEREUSE=1 -# Use `dotnet msbuild` by default -$msbuildEngine = 'dotnet' - # Ensure passing neither -bl nor -nobl on CI avoids errors in tools.ps1. This is needed because both parameters are # $false by default i.e. they always exist. (We currently avoid binary logs but that is made visible in the YAML.) if ($CI -and -not $excludeCIBinarylog) { @@ -346,10 +370,6 @@ Remove-Item variable:global:_DotNetInstallDir -ea Ignore Remove-Item variable:global:_ToolsetBuildProj -ea Ignore Remove-Item variable:global:_MSBuildExe -ea Ignore -# tools.ps1 expects the remaining arguments to be available via the $properties string array variable -# TODO: Remove when https://github.com/dotnet/source-build/issues/4337 is implemented. -[string[]] $properties = $MSBuildArguments - # Import Arcade . "$PSScriptRoot/common/tools.ps1" @@ -414,12 +434,17 @@ if ($BinaryLog) { $bl = GetMSBuildBinaryLogCommandLineArgument($MSBuildArguments) if (-not $bl) { $dotnetBuildArguments += "/bl:" + (Join-Path $LogDir "Build.binlog") - $MSBuildArguments += "/bl:" + (Join-Path $LogDir "Build.native.binlog") + + # When running both builds, use a different binary log path for the desktop msbuild. + if ($performDesktopBuild -and $performDotnetBuild) { + $MSBuildOnlyArguments += "/bl:" + (Join-Path $LogDir "Build.native.binlog") + } + $ToolsetBuildArguments += "/bl:" + (Join-Path $LogDir "Build.repotasks.binlog") } else { # Use a different binary log path when running desktop msbuild if doing both builds. if ($performDesktopBuild -and $performDotnetBuild) { - $MSBuildArguments += "/bl:" + [System.IO.Path]::ChangeExtension($bl, "native.binlog") + $MSBuildOnlyArguments += "/bl:" + [System.IO.Path]::ChangeExtension($bl, "native.binlog") } $ToolsetBuildArguments += "/bl:" + [System.IO.Path]::ChangeExtension($bl, "repotasks.binlog") @@ -469,7 +494,8 @@ try { /p:Restore=$RunRestore ` /p:Build=true ` /clp:NoSummary ` - @ToolsetBuildArguments + @ToolsetBuildArguments ` + @CommandLineArguments } if (-not $OnlyBuildRepoTasks) { @@ -478,7 +504,12 @@ try { Remove-Item variable:global:_BuildTool -ErrorAction Ignore $msbuildEngine = 'vs' - MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @MSBuildArguments + # When running with desktop msbuild only, append the dotnet build specific arguments. + if (-not $performDotnetBuild) { + $MSBuildOnlyArguments += $dotnetBuildArguments + } + + MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @MSBuildArguments @MSBuildOnlyArguments } if ($performDotnetBuild) { @@ -486,7 +517,7 @@ try { Remove-Item variable:global:_BuildTool -ErrorAction Ignore $msbuildEngine = 'dotnet' - MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @dotnetBuildArguments + MSBuild $toolsetBuildProj /p:RepoRoot=$RepoRoot @MSBuildArguments @dotnetBuildArguments } } } diff --git a/eng/build.sh b/eng/build.sh index 1275859dfaf0..91e398561b8b 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -20,6 +20,7 @@ run_build=true run_pack=false run_publish=false run_tests=false +run_sign=false build_all=false build_deps=true only_build_repo_tasks=false @@ -34,6 +35,11 @@ target_arch='x64' configuration='' runtime_source_feed='' runtime_source_feed_key='' +source_build='' +product_build='' +from_vmr='' +warn_as_error=true +from_vmr='' if [ "$(uname)" = "Darwin" ]; then target_os_name='osx' @@ -64,6 +70,7 @@ Options: --[no-]pack Produce packages. --[no-]test Run tests. --[no-]publish Run publish. + --[no-]sign Run code signing. --projects A list of projects to build. (Must be an absolute path.) Globbing patterns are supported, such as \"$(pwd)/**/*.csproj\". @@ -82,10 +89,15 @@ Options: --binarylog|-bl Use a binary logger --excludeCIBinarylog Don't output binary log by default in CI builds (short: -nobl). --verbosity|-v MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] + --warnAsError Sets warnaserror msbuild parameter: 'true' or 'false' --runtime-source-feed Additional feed that can be used when downloading .NET runtimes and SDKs --runtime-source-feed-key Key for feed that can be used when downloading .NET runtimes and SDKs + --sourceBuild|-sb Build the repository in source-only mode. + --productBuild|-pb Build the repository in product-build mode. + --fromVMR Set when building from within the VMR. + Description: This build script installs required tools and runs an MSBuild command on this repository This script can be used to invoke various targets, such as targets to produce packages @@ -166,6 +178,12 @@ while [[ $# -gt 0 ]]; do -no-test|-notest) run_tests=false ;; + -sign) + run_sign=true + ;; + -no-sign|-nosign) + run_sign=false + ;; -projects) shift build_projects="${1:-}" @@ -224,6 +242,11 @@ while [[ $# -gt 0 ]]; do -excludeCIBinarylog|-nobl) exclude_ci_binary_log=true ;; + -verbosity|-v) + shift + [ -z "${1:-}" ] && __error "Missing value for parameter --verbosity" && __usage + verbosity="${1:-}" + ;; -dotnet-runtime-source-feed|-dotnetruntimesourcefeed|-runtime-source-feed|-runtimesourcefeed) shift [ -z "${1:-}" ] && __error "Missing value for parameter --runtime-source-feed" && __usage @@ -234,6 +257,21 @@ while [[ $# -gt 0 ]]; do [ -z "${1:-}" ] && __error "Missing value for parameter --runtime-source-feed-key" && __usage runtime_source_feed_key="${1:-}" ;; + -sourcebuild|-source-build|-sb) + source_build=true + product_build=true + ;; + -productbuild|-product-build|-pb) + product_build=true + ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; + -warnaserror) + shift + [ -z "${1:-}" ] && __error "Missing value for parameter --warnaserror" && __usage + warn_as_error="${1:-}" + ;; *) msbuild_args[${#msbuild_args[*]}]="$1" ;; @@ -241,6 +279,12 @@ while [[ $# -gt 0 ]]; do shift done +commandline_args=() + +if [ ${#msbuild_args[@]} -gt 0 ]; then + commandline_args=("${msbuild_args[@]}") +fi + if [ "$build_all" = true ]; then msbuild_args[${#msbuild_args[*]}]="-p:BuildAllProjects=true" fi @@ -285,6 +329,9 @@ fi [ ! -z "$build_nodejs" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildNodeJSUnlessSourcebuild=$build_nodejs" [ ! -z "$build_managed" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildManaged=$build_managed" [ ! -z "$build_installers" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildInstallers=$build_installers" +[ ! -z "$product_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuild=$product_build" +[ ! -z "$source_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildSourceOnly=$source_build" +[ ! -z "$from_vmr" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildFromVMR=$from_vmr" # Run restore by default unless --no-restore or --no-build was specified. [ -z "$run_restore" ] && run_restore=true @@ -297,6 +344,7 @@ fi msbuild_args[${#msbuild_args[*]}]="-p:Pack=$run_pack" msbuild_args[${#msbuild_args[*]}]="-p:Publish=$run_publish" msbuild_args[${#msbuild_args[*]}]="-p:Test=$run_tests" +msbuild_args[${#msbuild_args[*]}]="-p:Sign=$run_sign" msbuild_args[${#msbuild_args[*]}]="-p:TargetArchitecture=$target_arch" msbuild_args[${#msbuild_args[*]}]="-p:TargetOsName=$target_os_name" @@ -313,13 +361,16 @@ msbuild_args[${#msbuild_args[*]}]="-p:Configuration=$configuration" # Set up additional runtime args toolset_build_args=() if [ ! -z "$runtime_source_feed$runtime_source_feed_key" ]; then - runtimeFeedArg="/p:DotNetRuntimeSourceFeed=$runtime_source_feed" - runtimeFeedKeyArg="/p:DotNetRuntimeSourceFeedKey=$runtime_source_feed_key" + runtimeFeedArg="-p:DotNetRuntimeSourceFeed=$runtime_source_feed" + runtimeFeedKeyArg="-p:DotNetRuntimeSourceFeedKey=$runtime_source_feed_key" msbuild_args[${#msbuild_args[*]}]=$runtimeFeedArg msbuild_args[${#msbuild_args[*]}]=$runtimeFeedKeyArg toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedArg toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedKeyArg fi +[ ! -z "$product_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuild=$product_build" +[ ! -z "$source_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildSourceOnly=$source_build" +[ ! -z "$from_vmr" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildFromVMR=$from_vmr" # Initialize global variables need to be set before the import of Arcade is imported restore=$run_restore @@ -339,10 +390,6 @@ if [ "$(uname)" = "Darwin" ]; then ulimit -n 10000 fi -# tools.sh expects the remaining arguments to be available via the $properties string array variable -# TODO: Remove when https://github.com/dotnet/source-build/issues/4337 is implemented. -properties=$msbuild_args - # Import Arcade . "$DIR/common/tools.sh" @@ -379,6 +426,10 @@ InitializeToolset restore=$_tmp_restore= +if [ ${#commandline_args[@]} -gt 0 ]; then + toolset_build_args+=("${commandline_args[@]}") +fi + if [ "$build_repo_tasks" = true ]; then MSBuild $_InitializeToolset \ -p:RepoRoot="$repo_root" \ diff --git a/eng/common/CIBuild.cmd b/eng/common/CIBuild.cmd index 56c2f25ac22f..ac1f72bf94e0 100644 --- a/eng/common/CIBuild.cmd +++ b/eng/common/CIBuild.cmd @@ -1,2 +1,2 @@ @echo off -powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" \ No newline at end of file +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0Build.ps1""" -restore -build -test -sign -pack -publish -ci %*" diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 5db4ad71ee2f..fc8d618014e0 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -7,11 +7,11 @@ # See example call for this script below. # # - task: PowerShell@2 -# displayName: Setup Private Feeds Credentials +# displayName: Setup internal Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 -# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 +# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token # env: # Token: $(dn-bot-dnceng-artifact-feeds-rw) # @@ -34,19 +34,28 @@ Set-StrictMode -Version 2.0 . $PSScriptRoot\tools.ps1 +# Adds or enables the package source with the given name +function AddOrEnablePackageSource($sources, $disabledPackageSources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { + if ($disabledPackageSources -eq $null -or -not (EnableInternalPackageSource -DisabledPackageSources $disabledPackageSources -Creds $creds -PackageSourceName $SourceName)) { + AddPackageSource -Sources $sources -SourceName $SourceName -SourceEndPoint $SourceEndPoint -Creds $creds -Username $userName -pwd $Password + } +} + # Add source entry to PackageSources function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $pwd) { $packageSource = $sources.SelectSingleNode("add[@key='$SourceName']") if ($packageSource -eq $null) { + Write-Host "Adding package source $SourceName" + $packageSource = $doc.CreateElement("add") $packageSource.SetAttribute("key", $SourceName) $packageSource.SetAttribute("value", $SourceEndPoint) $sources.AppendChild($packageSource) | Out-Null } else { - Write-Host "Package source $SourceName already present." + Write-Host "Package source $SourceName already present and enabled." } AddCredential -Creds $creds -Source $SourceName -Username $Username -pwd $pwd @@ -59,6 +68,8 @@ function AddCredential($creds, $source, $username, $pwd) { return; } + Write-Host "Inserting credential for feed: " $source + # Looks for credential configuration for the given SourceName. Create it if none is found. $sourceElement = $creds.SelectSingleNode($Source) if ($sourceElement -eq $null) @@ -91,24 +102,27 @@ function AddCredential($creds, $source, $username, $pwd) { $passwordElement.SetAttribute("value", $pwd) } -function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Username, $pwd) { - $maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]") - - Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds." - - ForEach ($PackageSource in $maestroPrivateSources) { - Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key - AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -pwd $pwd +# Enable all darc-int package sources. +function EnableMaestroInternalPackageSources($DisabledPackageSources, $Creds) { + $maestroInternalSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") + ForEach ($DisabledPackageSource in $maestroInternalSources) { + EnableInternalPackageSource -DisabledPackageSources $DisabledPackageSources -Creds $Creds -PackageSourceName $DisabledPackageSource.key } } -function EnablePrivatePackageSources($DisabledPackageSources) { - $maestroPrivateSources = $DisabledPackageSources.SelectNodes("add[contains(@key,'darc-int')]") - ForEach ($DisabledPackageSource in $maestroPrivateSources) { - Write-Host "`tEnsuring private source '$($DisabledPackageSource.key)' is enabled by deleting it from disabledPackageSource" +# Enables an internal package source by name, if found. Returns true if the package source was found and enabled, false otherwise. +function EnableInternalPackageSource($DisabledPackageSources, $Creds, $PackageSourceName) { + $DisabledPackageSource = $DisabledPackageSources.SelectSingleNode("add[@key='$PackageSourceName']") + if ($DisabledPackageSource) { + Write-Host "Enabling internal source '$($DisabledPackageSource.key)'." + # Due to https://github.com/NuGet/Home/issues/10291, we must actually remove the disabled entries $DisabledPackageSources.RemoveChild($DisabledPackageSource) + + AddCredential -Creds $creds -Source $DisabledPackageSource.Key -Username $userName -pwd $Password + return $true } + return $false } if (!(Test-Path $ConfigFile -PathType Leaf)) { @@ -121,15 +135,17 @@ $doc = New-Object System.Xml.XmlDocument $filename = (Get-Item $ConfigFile).FullName $doc.Load($filename) -# Get reference to or create one if none exist already +# Get reference to - fail if none exist $sources = $doc.DocumentElement.SelectSingleNode("packageSources") if ($sources -eq $null) { - $sources = $doc.CreateElement("packageSources") - $doc.DocumentElement.AppendChild($sources) | Out-Null + Write-PipelineTelemetryError -Category 'Build' -Message "Eng/common/SetupNugetSources.ps1 returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 } $creds = $null +$feedSuffix = "v3/index.json" if ($Password) { + $feedSuffix = "v2" # Looks for a node. Create it if none is found. $creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials") if ($creds -eq $null) { @@ -138,33 +154,22 @@ if ($Password) { } } +$userName = "dn-bot" + # Check for disabledPackageSources; we'll enable any darc-int ones we find there $disabledSources = $doc.DocumentElement.SelectSingleNode("disabledPackageSources") if ($disabledSources -ne $null) { Write-Host "Checking for any darc-int disabled package sources in the disabledPackageSources node" - EnablePrivatePackageSources -DisabledPackageSources $disabledSources -} - -$userName = "dn-bot" - -# Insert credential nodes for Maestro's private feeds -InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Username $userName -pwd $Password - -# 3.1 uses a different feed url format so it's handled differently here -$dotnet31Source = $sources.SelectSingleNode("add[@key='dotnet3.1']") -if ($dotnet31Source -ne $null) { - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "dotnet3.1-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3.1-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + EnableMaestroInternalPackageSources -DisabledPackageSources $disabledSources -Creds $creds } - -$dotnetVersions = @('5','6','7','8','9') +$dotnetVersions = @('5','6','7','8','9','10') foreach ($dotnetVersion in $dotnetVersions) { $feedPrefix = "dotnet" + $dotnetVersion; $dotnetSource = $sources.SelectSingleNode("add[@key='$feedPrefix']") if ($dotnetSource -ne $null) { - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/v2" -Creds $creds -Username $userName -pwd $Password - AddPackageSource -Sources $sources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/v2" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password + AddOrEnablePackageSource -Sources $sources -DisabledPackageSources $disabledSources -SourceName "$feedPrefix-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$feedPrefix-internal-transport/nuget/$feedSuffix" -Creds $creds -Username $userName -pwd $Password } } diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index 4604b61b0323..b97cc536379d 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -11,8 +11,8 @@ # - task: Bash@3 # displayName: Setup Internal Feeds # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh -# arguments: $(Build.SourcesDirectory)/NuGet.config +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh +# arguments: $(System.DefaultWorkingDirectory)/NuGet.config # condition: ne(variables['Agent.OS'], 'Windows_NT') # - task: NuGetAuthenticate@1 # @@ -52,78 +52,124 @@ if [[ `uname -s` == "Darwin" ]]; then TB='' fi -# Ensure there is a ... section. -grep -i "" $ConfigFile -if [ "$?" != "0" ]; then - echo "Adding ... section." - ConfigNodeHeader="" - PackageSourcesTemplate="${TB}${NL}${TB}" +# Enables an internal package source by name, if found. Returns 0 if found and enabled, 1 if not found. +EnableInternalPackageSource() { + local PackageSourceName="$1" + + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return 1 # No disabled sources section + fi + + # Check if this source name is disabled + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Enabling internal source '$PackageSourceName'." + # Remove the disabled entry (including any surrounding comments or whitespace on the same line) + sed -i.bak "//d" "$ConfigFile" + + # Add the source name to PackageSources for credential handling + PackageSources+=("$PackageSourceName") + return 0 # Found and enabled + fi + + return 1 # Not found in disabled sources +} + +# Add source entry to PackageSources +AddPackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Check if source already exists + grep -i " /dev/null + if [ "$?" == "0" ]; then + echo "Package source $SourceName already present and enabled." + PackageSources+=("$SourceName") + return + fi + + echo "Adding package source $SourceName" + PackageSourcesNodeFooter="" + PackageSourceTemplate="${TB}" + + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" "$ConfigFile" + PackageSources+=("$SourceName") +} + +# Adds or enables the package source with the given name +AddOrEnablePackageSource() { + local SourceName="$1" + local SourceEndPoint="$2" + + # Try to enable if disabled, if not found then add new source + EnableInternalPackageSource "$SourceName" + if [ "$?" != "0" ]; then + AddPackageSource "$SourceName" "$SourceEndPoint" + fi +} - sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" $ConfigFile -fi +# Enable all darc-int package sources +EnableMaestroInternalPackageSources() { + # Check if disabledPackageSources section exists + grep -i "" "$ConfigFile" > /dev/null + if [ "$?" != "0" ]; then + return # No disabled sources section + fi + + # Find all darc-int disabled sources + local DisabledDarcIntSources=() + DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' "$ConfigFile" | tr -d '"') + + for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do + if [[ $DisabledSourceName == darc-int* ]]; then + EnableInternalPackageSource "$DisabledSourceName" + fi + done +} -# Ensure there is a ... section. -grep -i "" $ConfigFile +# Ensure there is a ... section. +grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding ... section." - - PackageSourcesNodeFooter="" - PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile + Write-PipelineTelemetryError -Category 'Build' "Error: Eng/common/SetupNugetSources.sh returned a non-zero exit code. NuGet config file must contain a packageSources section: $ConfigFile" + ExitWithExitCode 1 fi PackageSources=() -# Ensure dotnet3.1-internal and dotnet3.1-internal-transport are in the packageSources if the public dotnet3.1 feeds are present -grep -i "... section. + grep -i "" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + echo "Adding ... section." - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=('dotnet3.1-internal') - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding dotnet3.1-internal-transport to the packageSources." PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" + PackageSourceCredentialsTemplate="${TB}${NL}${TB}" - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile + sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" $ConfigFile fi - PackageSources+=('dotnet3.1-internal-transport') fi -DotNetVersions=('5' '6' '7' '8' '9') +# Check for disabledPackageSources; we'll enable any darc-int ones we find there +grep -i "" $ConfigFile > /dev/null +if [ "$?" == "0" ]; then + echo "Checking for any darc-int disabled package sources in the disabledPackageSources node" + EnableMaestroInternalPackageSources +fi + +DotNetVersions=('5' '6' '7' '8' '9' '10') for DotNetVersion in ${DotNetVersions[@]} ; do FeedPrefix="dotnet${DotNetVersion}"; - grep -i " /dev/null if [ "$?" == "0" ]; then - grep -i "" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal") - - grep -i "" $ConfigFile - if [ "$?" != "0" ]; then - echo "Adding $FeedPrefix-internal-transport to the packageSources." - PackageSourcesNodeFooter="" - PackageSourceTemplate="${TB}" - - sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" $ConfigFile - fi - PackageSources+=("$FeedPrefix-internal-transport") + AddOrEnablePackageSource "$FeedPrefix-internal" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal/nuget/$FeedSuffix" + AddOrEnablePackageSource "$FeedPrefix-internal-transport" "https://pkgs.dev.azure.com/dnceng/internal/_packaging/$FeedPrefix-internal-transport/nuget/$FeedSuffix" fi done @@ -139,29 +185,12 @@ if [ "$CredToken" ]; then # Check if there is no existing credential for this FeedName grep -i "<$FeedName>" $ConfigFile if [ "$?" != "0" ]; then - echo "Adding credentials for $FeedName." + echo " Inserting credential for feed: $FeedName" PackageSourceCredentialsNodeFooter="" - NewCredential="${TB}${TB}<$FeedName>${NL}${NL}${NL}" + NewCredential="${TB}${TB}<$FeedName>${NL}${TB}${NL}${TB}${TB}${NL}${TB}${TB}" sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" $ConfigFile fi done fi - -# Re-enable any entries in disabledPackageSources where the feed name contains darc-int -grep -i "" $ConfigFile -if [ "$?" == "0" ]; then - DisabledDarcIntSources=() - echo "Re-enabling any disabled \"darc-int\" package sources in $ConfigFile" - DisabledDarcIntSources+=$(grep -oh '"darc-int-[^"]*" value="true"' $ConfigFile | tr -d '"') - for DisabledSourceName in ${DisabledDarcIntSources[@]} ; do - if [[ $DisabledSourceName == darc-int* ]] - then - OldDisableValue="" - NewDisableValue="" - sed -i.bak "s|$OldDisableValue|$NewDisableValue|" $ConfigFile - echo "Neutralized disablePackageSources entry for '$DisabledSourceName'" - fi - done -fi diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 438f9920c43e..8cfee107e7a3 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -7,6 +7,7 @@ Param( [string] $msbuildEngine = $null, [bool] $warnAsError = $true, [bool] $nodeReuse = $true, + [switch] $buildCheck = $false, [switch][Alias('r')]$restore, [switch] $deployDeps, [switch][Alias('b')]$build, @@ -20,6 +21,7 @@ Param( [switch] $publish, [switch] $clean, [switch][Alias('pb')]$productBuild, + [switch]$fromVMR, [switch][Alias('bl')]$binaryLog, [switch][Alias('nobl')]$excludeCIBinarylog, [switch] $ci, @@ -71,6 +73,9 @@ function Print-Usage() { Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host " -nativeToolsOnMachine Sets the native tools on machine environment variable (indicating that the script should use native tools on machine)" + Write-Host " -nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" + Write-Host " -buildCheck Sets /check msbuild parameter" + Write-Host " -fromVMR Set when building from within the VMR" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." @@ -97,6 +102,7 @@ function Build { $bl = if ($binaryLog) { '/bl:' + (Join-Path $LogDir 'Build.binlog') } else { '' } $platformArg = if ($platform) { "/p:Platform=$platform" } else { '' } + $check = if ($buildCheck) { '/check' } else { '' } if ($projects) { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. @@ -113,6 +119,7 @@ function Build { MSBuild $toolsetBuildProj ` $bl ` $platformArg ` + $check ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` /p:Restore=$restore ` @@ -122,11 +129,13 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` + /p:DotNetBuildFromVMR=$fromVMR ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` /p:Publish=$publish ` + /p:RestoreStaticGraphEnableBinaryLogger=$binaryLog ` @properties } diff --git a/eng/common/build.sh b/eng/common/build.sh index ac1ee8620cd2..9767bb411a4f 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -42,6 +42,8 @@ usage() echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --nodeReuse Sets nodereuse msbuild parameter ('true' or 'false')" echo " --warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" + echo " --buildCheck Sets /check msbuild parameter" + echo " --fromVMR Set when building from within the VMR" echo "" echo "Command line arguments not listed above are passed thru to msbuild." echo "Arguments can also be passed in with a single hyphen." @@ -63,6 +65,7 @@ restore=false build=false source_build=false product_build=false +from_vmr=false rebuild=false test=false integration_test=false @@ -76,6 +79,7 @@ clean=false warn_as_error=true node_reuse=true +build_check=false binary_log=false exclude_ci_binary_log=false pipelines_log=false @@ -87,7 +91,7 @@ verbosity='minimal' runtime_source_feed='' runtime_source_feed_key='' -properties='' +properties=() while [[ $# > 0 ]]; do opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in @@ -127,19 +131,22 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productBuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true pack=true ;; + -fromvmr|-from-vmr) + from_vmr=true + ;; -test|-t) test=true ;; @@ -173,6 +180,9 @@ while [[ $# > 0 ]]; do node_reuse=$2 shift ;; + -buildcheck) + build_check=true + ;; -runtimesourcefeed) runtime_source_feed=$2 shift @@ -182,7 +192,7 @@ while [[ $# > 0 ]]; do shift ;; *) - properties="$properties $1" + properties+=("$1") ;; esac @@ -216,7 +226,7 @@ function Build { InitializeCustomToolset if [[ ! -z "$projects" ]]; then - properties="$properties /p:Projects=$projects" + properties+=("/p:Projects=$projects") fi local bl="" @@ -224,15 +234,21 @@ function Build { bl="/bl:\"$log_dir/Build.binlog\"" fi + local check="" + if [[ "$build_check" == true ]]; then + check="/check" + fi + MSBuild $_InitializeToolset \ $bl \ + $check \ /p:Configuration=$configuration \ /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ - /p:ArcadeBuildFromSource=$source_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ + /p:DotNetBuildFromVMR=$from_vmr \ /p:Rebuild=$rebuild \ /p:Test=$test \ /p:Pack=$pack \ @@ -240,7 +256,8 @@ function Build { /p:PerformanceTest=$performance_test \ /p:Sign=$sign \ /p:Publish=$publish \ - $properties + /p:RestoreStaticGraphEnableBinaryLogger=$binary_log \ + ${properties[@]+"${properties[@]}"} ExitWithExitCode 0 } diff --git a/eng/common/cibuild.sh b/eng/common/cibuild.sh index 1a02c0dec8fd..66e3b0ac61c3 100755 --- a/eng/common/cibuild.sh +++ b/eng/common/cibuild.sh @@ -13,4 +13,4 @@ while [[ -h $source ]]; do done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ \ No newline at end of file +. "$scriptroot/build.sh" --restore --build --test --pack --publish --ci $@ diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index ba53ebfbd513..5ce518406198 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -19,10 +19,11 @@ parameters: # publishing defaults artifacts: '' enableMicrobuild: false + enableMicrobuildForMacAndLinux: false + microbuildUseESRP: true enablePublishBuildArtifacts: false enablePublishBuildAssets: false enablePublishTestResults: false - enablePublishUsingPipelines: false enableBuildRetry: false mergeTestResults: false testRunTitle: '' @@ -73,9 +74,6 @@ jobs: - ${{ if ne(parameters.enableTelemetry, 'false') }}: - name: DOTNET_CLI_TELEMETRY_PROFILE value: '$(Build.Repository.Uri)' - - ${{ if eq(parameters.enableRichCodeNavigation, 'true') }}: - - name: EnableRichCodeNavigation - value: 'true' # Retry signature validation up to three times, waiting 2 seconds between attempts. # See https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu3028#retry-untrusted-root-failures - name: NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY @@ -127,18 +125,12 @@ jobs: - ${{ preStep }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin - inputs: - signType: $(_SignType) - zipSources: false - feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json - env: - TeamName: $(_TeamName) - MicroBuildOutputFolderOverride: '$(Agent.TempDirectory)' + - template: /eng/common/core-templates/steps/install-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} + microbuildUseESRP: ${{ parameters.microbuildUseESRP }} continueOnError: ${{ parameters.continueOnError }} - condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) - ${{ if and(eq(parameters.runAsPublic, 'false'), eq(variables['System.TeamProject'], 'internal')) }}: - task: NuGetAuthenticate@1 @@ -154,27 +146,15 @@ jobs: - ${{ each step in parameters.steps }}: - ${{ step }} - - ${{ if eq(parameters.enableRichCodeNavigation, true) }}: - - task: RichCodeNavIndexer@0 - displayName: RichCodeNav Upload - inputs: - languages: ${{ coalesce(parameters.richCodeNavigationLanguage, 'csharp') }} - environment: ${{ coalesce(parameters.richCodeNavigationEnvironment, 'internal') }} - richNavLogOutputDirectory: $(Build.SourcesDirectory)/artifacts/bin - uploadRichNavArtifacts: ${{ coalesce(parameters.richCodeNavigationUploadArtifacts, false) }} - continueOnError: true - - ${{ each step in parameters.componentGovernanceSteps }}: - ${{ step }} - - ${{ if eq(parameters.enableMicrobuild, 'true') }}: - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: MicroBuildCleanup@1 - displayName: Execute Microbuild cleanup tasks - condition: and(always(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/core-templates/steps/cleanup-microbuild.yml + parameters: + enableMicrobuild: ${{ parameters.enableMicrobuild }} + enableMicrobuildForMacAndLinux: ${{ parameters.enableMicrobuildForMacAndLinux }} continueOnError: ${{ parameters.continueOnError }} - env: - TeamName: $(_TeamName) # Publish test results - ${{ if or(and(eq(parameters.enablePublishTestResults, 'true'), eq(parameters.testResultsFormat, '')), eq(parameters.testResultsFormat, 'xunit')) }}: @@ -183,7 +163,7 @@ jobs: inputs: testResultsFormat: 'xUnit' testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -194,7 +174,7 @@ jobs: inputs: testResultsFormat: 'VSTest' testResultsFiles: '*.trx' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -238,7 +218,7 @@ jobs: - task: CopyFiles@2 displayName: Gather buildconfiguration for build retry inputs: - SourceFolder: '$(Build.SourcesDirectory)/eng/common/BuildConfiguration' + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/common/BuildConfiguration' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/eng/common/BuildConfiguration' continueOnError: true diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index 00feec8ebbc3..c5788829a872 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -4,11 +4,11 @@ parameters: # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool pool: '' - + CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex GithubPat: $(BotAccount-dotnet-bot-repo-PAT) - SourcesDirectory: $(Build.SourcesDirectory) + SourcesDirectory: $(System.DefaultWorkingDirectory) CreatePr: true AutoCompletePr: false ReusePr: true @@ -27,7 +27,7 @@ parameters: is1ESPipeline: '' jobs: - job: OneLocBuild${{ parameters.JobNameSuffix }} - + dependsOn: ${{ parameters.dependsOn }} displayName: OneLocBuild${{ parameters.JobNameSuffix }} @@ -68,7 +68,7 @@ jobs: - ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}: - task: Powershell@2 inputs: - filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/generate-locproject.ps1 arguments: $(_GenerateLocProjectArguments) displayName: Generate LocProject.json condition: ${{ parameters.condition }} @@ -86,8 +86,7 @@ jobs: isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} ${{ if eq(parameters.CreatePr, true) }}: isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - isShouldReusePrSelected: ${{ parameters.ReusePr }} + isShouldReusePrSelected: ${{ parameters.ReusePr }} packageSourceAuth: patAuth patVariable: ${{ parameters.CeapexPat }} ${{ if eq(parameters.RepoType, 'gitHub') }}: @@ -100,22 +99,20 @@ jobs: mirrorBranch: ${{ parameters.MirrorBranch }} condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml - parameters: - is1ESPipeline: ${{ parameters.is1ESPipeline }} - args: - displayName: Publish Localization Files - pathToPublish: '$(Build.ArtifactStagingDirectory)/loc' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} + # Copy the locProject.json to the root of the Loc directory, then publish a pipeline artifact + - task: CopyFiles@2 + displayName: Copy LocProject.json + inputs: + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' + Contents: 'LocProject.json' + TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' + condition: ${{ parameters.condition }} - - template: /eng/common/core-templates/steps/publish-build-artifacts.yml + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: - displayName: Publish LocProject.json - pathToPublish: '$(Build.SourcesDirectory)/eng/Localize/' - publishLocation: Container - artifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file + targetPath: '$(Build.ArtifactStagingDirectory)/loc' + artifactName: 'Loc' + displayName: 'Publish Localization Files' + condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index 3d3356e31967..37dff559fc1b 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -20,9 +20,6 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing - publishUsingPipelines: false - # Optional: whether the build's artifacts will be published using release pipelines or direct feed publishing publishAssetsImmediately: false @@ -32,6 +29,19 @@ parameters: is1ESPipeline: '' + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + + # Optional, publishing version + publishingVersion: 3 + + # Optional: A minimatch pattern for the asset manifests to publish to BAR + assetManifestsPattern: '*/manifests/**/*.xml' + + repositoryAlias: self + + officialBuildId: '' + jobs: - job: Asset_Registry_Publish @@ -54,6 +64,11 @@ jobs: value: false # unconditional - needed for logs publishing (redactor tool version) - template: /eng/common/core-templates/post-build/common-variables.yml + - name: OfficialBuildId + ${{ if ne(parameters.officialBuildId, '') }}: + value: ${{ parameters.officialBuildId }} + ${{ else }}: + value: $(Build.BuildNumber) pool: # We don't use the collection uri here because it might vary (.visualstudio.com vs. dev.azure.com) @@ -72,18 +87,36 @@ jobs: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - checkout: self + - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true - - - task: DownloadBuildArtifacts@0 - displayName: Download artifact - inputs: - artifactName: AssetManifests - downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} + + - ${{ if eq(parameters.isAssetlessBuild, 'false') }}: + - ${{ if eq(parameters.publishingVersion, 3) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download Asset Manifests + inputs: + artifactName: AssetManifests + targetPath: '$(Build.StagingDirectory)/AssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - ${{ if eq(parameters.publishingVersion, 4) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download V4 asset manifests + inputs: + itemPattern: '*/manifests/**/*.xml' + targetPath: '$(Build.StagingDirectory)/AllAssetManifests' + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + - task: CopyFiles@2 + displayName: Copy V4 asset manifests to AssetManifests + inputs: + SourceFolder: '$(Build.StagingDirectory)/AllAssetManifests' + Contents: ${{ parameters.assetManifestsPattern }} + TargetFolder: '$(Build.StagingDirectory)/AssetManifests' + flattenFolders: true + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} - task: NuGetAuthenticate@1 @@ -93,12 +126,12 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/sdk-task.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet - /p:ManifestsPath='$(Build.StagingDirectory)/Download/AssetManifests' + /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' + /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} /p:MaestroApiEndpoint=https://maestro.dot.net - /p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }} - /p:OfficialBuildId=$(Build.BuildNumber) + /p:OfficialBuildId=$(OfficialBuildId) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} @@ -113,13 +146,24 @@ jobs: Add-Content -Path $filePath -Value "$(DefaultChannels)" Add-Content -Path $filePath -Value $(IsStableBuild) - $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt" + $symbolExclusionfile = "$(System.DefaultWorkingDirectory)/eng/SymbolPublishingExclusionsFile.txt" if (Test-Path -Path $symbolExclusionfile) { Write-Host "SymbolExclusionFile exists" Copy-Item -Path $symbolExclusionfile -Destination "$(Build.StagingDirectory)/ReleaseConfigs" } + - ${{ if eq(parameters.publishingVersion, 4) }}: + - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml + parameters: + is1ESPipeline: ${{ parameters.is1ESPipeline }} + args: + targetPath: '$(Build.ArtifactStagingDirectory)/MergedManifest.xml' + artifactName: AssetManifests + displayName: 'Publish Merged Manifest' + retryCountOnTaskFailure: 10 # for any logs being locked + sbomEnabled: false # we don't need SBOM for logs + - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -129,7 +173,7 @@ jobs: publishLocation: Container artifactName: ReleaseConfigs - - ${{ if eq(parameters.publishAssetsImmediately, 'true') }}: + - ${{ if or(eq(parameters.publishAssetsImmediately, 'true'), eq(parameters.isAssetlessBuild, 'true')) }}: - template: /eng/common/core-templates/post-build/setup-maestro-vars.yml parameters: BARBuildId: ${{ parameters.BARBuildId }} @@ -142,7 +186,7 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion 3 @@ -150,6 +194,7 @@ jobs: -WaitPublishingFinish true -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - template: /eng/common/core-templates/steps/publish-logs.yml diff --git a/eng/common/core-templates/job/source-build.yml b/eng/common/core-templates/job/source-build.yml index c4713c8b6ede..d805d5faeb94 100644 --- a/eng/common/core-templates/job/source-build.yml +++ b/eng/common/core-templates/job/source-build.yml @@ -12,9 +12,10 @@ parameters: # The name of the job. This is included in the job ID. # targetRID: '' # The name of the target RID to use, instead of the one auto-detected by Arcade. - # nonPortable: false + # portableBuild: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than - # linux-x64), and compiling against distro-provided packages rather than portable ones. + # linux-x64), and compiling against distro-provided packages rather than portable ones. The + # default is portable mode. # skipPublishValidation: false # Disables publishing validation. By default, a check is performed to ensure no packages are # published by source-build. @@ -26,6 +27,8 @@ parameters: # Specifies the build script to invoke to perform the build in the repo. The default # './build.sh' should work for typical Arcade repositories, but this is customizable for # difficult situations. + # buildArguments: '' + # Specifies additional build arguments to pass to the build script. # jobProperties: {} # A list of job properties to inject at the top level, for potential extensibility beyond # container and pool. diff --git a/eng/common/core-templates/job/source-index-stage1.yml b/eng/common/core-templates/job/source-index-stage1.yml index 205fb5b3a395..30530359a5d6 100644 --- a/eng/common/core-templates/job/source-index-stage1.yml +++ b/eng/common/core-templates/job/source-index-stage1.yml @@ -1,8 +1,5 @@ parameters: runAsPublic: false - sourceIndexUploadPackageVersion: 2.0.0-20240522.1 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20240522.1 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" preSteps: [] binlogPath: artifacts/log/Debug/Build.binlog @@ -16,12 +13,6 @@ jobs: dependsOn: ${{ parameters.dependsOn }} condition: ${{ parameters.condition }} variables: - - name: SourceIndexUploadPackageVersion - value: ${{ parameters.sourceIndexUploadPackageVersion }} - - name: SourceIndexProcessBinlogPackageVersion - value: ${{ parameters.sourceIndexProcessBinlogPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - name: BinlogPath value: ${{ parameters.binlogPath }} - template: /eng/common/core-templates/variables/pool-providers.yml @@ -34,12 +25,10 @@ jobs: pool: ${{ if eq(variables['System.TeamProject'], 'public') }}: name: $(DncEngPublicBuildPool) - image: 1es-windows-2022-open - os: windows + image: windows.vs2022.amd64.open ${{ if eq(variables['System.TeamProject'], 'internal') }}: name: $(DncEngInternalBuildPool) - image: 1es-windows-2022 - os: windows + image: windows.vs2022.amd64 steps: - ${{ if eq(parameters.is1ESPipeline, '') }}: @@ -47,35 +36,9 @@ jobs: - ${{ each preStep in parameters.preSteps }}: - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET 8 SDK - inputs: - packageType: sdk - version: 8.0.x - installationPath: $(Agent.TempDirectory)/dotnet - workingDirectory: $(Agent.TempDirectory) - - - script: | - $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version $(sourceIndexProcessBinlogPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version $(sourceIndexUploadPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path $(Agent.TempDirectory)/.source-index/tools - displayName: Download Tools - # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. - workingDirectory: $(Agent.TempDirectory) - - script: ${{ parameters.sourceIndexBuildCommand }} displayName: Build Repository - - script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: AzureCLI@2 - displayName: Log in to Azure and upload stage1 artifacts to source index - inputs: - azureSubscription: 'SourceDotNet Stage1 Publish' - addSpnToEnvironment: true - scriptType: 'ps' - scriptLocation: 'inlineScript' - inlineScript: | - $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 + - template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + binLogPath: ${{ parameters.binLogPath }} \ No newline at end of file diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index f2144252cc65..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -15,7 +15,6 @@ jobs: enablePublishBuildArtifacts: false enablePublishTestResults: false enablePublishBuildAssets: false - enablePublishUsingPipelines: false enableTelemetry: true variables: @@ -25,7 +24,7 @@ jobs: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config - name: GuardianVersion value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }} diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index ea69be4341c6..01ada7476651 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -5,9 +5,6 @@ parameters: # Optional: Include PublishBuildArtifacts task enablePublishBuildArtifacts: false - # Optional: Enable publishing using release pipelines - enablePublishUsingPipelines: false - # Optional: Enable running the source-build jobs to build repo from source enableSourceBuild: false @@ -30,6 +27,9 @@ parameters: # Optional: Publish the assets as soon as the publish to BAR stage is complete, rather doing so in a separate stage. publishAssetsImmediately: false + # Optional: 🌤️ or not the build has assets it wants to publish to BAR + isAssetlessBuild: false + # Optional: If using publishAssetsImmediately and additional parameters are needed, can be used to send along additional parameters (normally sent to post-build.yml) artifactsPublishingAdditionalParameters: '' signingValidationAdditionalParameters: '' @@ -43,6 +43,8 @@ parameters: artifacts: {} is1ESPipeline: '' + repositoryAlias: self + officialBuildId: '' # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -83,7 +85,6 @@ jobs: - template: /eng/common/core-templates/jobs/source-build.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} - allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} @@ -96,7 +97,7 @@ jobs: ${{ parameter.key }}: ${{ parameter.value }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, ''), eq(parameters.isAssetlessBuild, true)) }}: - template: ../job/publish-build-assets.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} @@ -108,12 +109,12 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: - - Source_Build_Complete runAsPublic: ${{ parameters.runAsPublic }} - publishUsingPipelines: ${{ parameters.enablePublishUsingPipelines }} - publishAssetsImmediately: ${{ parameters.publishAssetsImmediately }} + publishAssetsImmediately: ${{ or(parameters.publishAssetsImmediately, parameters.isAssetlessBuild) }} + isAssetlessBuild: ${{ parameters.isAssetlessBuild }} enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} + repositoryAlias: ${{ parameters.repositoryAlias }} + officialBuildId: ${{ parameters.officialBuildId }} diff --git a/eng/common/core-templates/jobs/source-build.yml b/eng/common/core-templates/jobs/source-build.yml index a10ccfbee6de..d92860cba208 100644 --- a/eng/common/core-templates/jobs/source-build.yml +++ b/eng/common/core-templates/jobs/source-build.yml @@ -2,19 +2,13 @@ parameters: # This template adds arcade-powered source-build to CI. A job is created for each platform, as # well as an optional server job that completes when all platform jobs complete. - # The name of the "join" job for all source-build platforms. If set to empty string, the job is - # not included. Existing repo pipelines can use this job depend on all source-build jobs - # completing without maintaining a separate list of every single job ID: just depend on this one - # server job. By default, not included. Recommended name if used: 'Source_Build_Complete'. - allCompletedJobId: '' - # See /eng/common/core-templates/job/source-build.yml jobNamePrefix: 'Source_Build' # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' - container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9' + container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream-10-amd64' # Defines the platforms on which to run build jobs. One job is created for each platform, and the # object in this array is sent to the job template as 'platform'. If no platforms are specified, @@ -31,16 +25,6 @@ parameters: jobs: -- ${{ if ne(parameters.allCompletedJobId, '') }}: - - job: ${{ parameters.allCompletedJobId }} - displayName: Source-Build Complete - pool: server - dependsOn: - - ${{ each platform in parameters.platforms }}: - - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: - - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - - ${{ each platform in parameters.platforms }}: - template: /eng/common/core-templates/job/source-build.yml parameters: diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 454fd75c7aff..f6f87fe5c675 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -44,6 +44,11 @@ parameters: displayName: Publish installers and checksums type: boolean default: true + + - name: requireDefaultChannels + displayName: Fail the build if there are no default channel(s) registrations for the current build + type: boolean + default: false - name: SDLValidationParameters type: object @@ -55,6 +60,11 @@ parameters: artifactNames: '' downloadArtifacts: true + - name: isAssetlessBuild + type: boolean + displayName: Is Assetless Build + default: false + # These parameters let the user customize the call to sdk-task.ps1 for publishing # symbols & general artifacts as well as for signing validation - name: symbolPublishingAdditionalParameters @@ -144,7 +154,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1 arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ - job: @@ -183,9 +193,6 @@ stages: buildId: $(AzDOBuildId) artifactName: PackageArtifacts checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -201,7 +208,7 @@ stages: filePath: eng\common\sdk-task.ps1 arguments: -task SigningValidation -restore -msbuildEngine vs /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' - /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' + /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt' ${{ parameters.signingValidationAdditionalParameters }} - template: /eng/common/core-templates/steps/publish-logs.yml @@ -251,7 +258,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Extract/ -GHRepoName $(Build.Repository.Name) @@ -306,11 +313,13 @@ stages: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true + -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' + -SkipAssetsPublishing '${{ parameters.isAssetlessBuild }}' diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index f7602980dbe7..a7abd58c4bb6 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -36,7 +36,7 @@ steps: $AzureDevOpsBuildId = $Env:Build_BuildId } else { - . $(Build.SourcesDirectory)\eng\common\tools.ps1 + . $(System.DefaultWorkingDirectory)\eng\common\tools.ps1 $darc = Get-Darc $buildInfo = & $darc get-build ` --id ${{ parameters.BARBuildId }} ` diff --git a/eng/common/core-templates/steps/cleanup-microbuild.yml b/eng/common/core-templates/steps/cleanup-microbuild.yml new file mode 100644 index 000000000000..c0fdcd3379d7 --- /dev/null +++ b/eng/common/core-templates/steps/cleanup-microbuild.yml @@ -0,0 +1,28 @@ +parameters: + # Enable cleanup tasks for MicroBuild + enableMicrobuild: false + # Enable cleanup tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - task: MicroBuildCleanup@1 + displayName: Execute Microbuild cleanup tasks + condition: and( + always(), + or( + and( + eq(variables['Agent.Os'], 'Windows_NT'), + in(variables['_SignType'], 'real', 'test') + ), + and( + ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, + ne(variables['Agent.Os'], 'Windows_NT'), + eq(variables['_SignType'], 'real') + ) + )) + continueOnError: ${{ parameters.continueOnError }} + env: + TeamName: $(_TeamName) diff --git a/eng/common/core-templates/steps/enable-internal-sources.yml b/eng/common/core-templates/steps/enable-internal-sources.yml index 64f881bffc3c..4085512b6909 100644 --- a/eng/common/core-templates/steps/enable-internal-sources.yml +++ b/eng/common/core-templates/steps/enable-internal-sources.yml @@ -17,8 +17,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token env: Token: ${{ parameters.legacyCredential }} # If running on dnceng (internal project), just use the default behavior for NuGetAuthenticate. @@ -29,8 +29,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config - ${{ else }}: - template: /eng/common/templates/steps/get-federated-access-token.yml parameters: @@ -39,8 +39,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) # This is required in certain scenarios to install the ADO credential provider. # It installed by default in some msbuild invocations (e.g. VS msbuild), but needs to be installed for others # (e.g. dotnet msbuild). diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index d938b60e1bb5..c05f65027979 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -5,8 +5,8 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + PackageVersion: 10.0.0 + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom IgnoreDirectories: '' @@ -38,7 +38,7 @@ steps: PackageName: ${{ parameters.packageName }} BuildDropPath: ${{ parameters.buildDropPath }} PackageVersion: ${{ parameters.packageVersion }} - ManifestDirPath: ${{ parameters.manifestDirPath }} + ManifestDirPath: ${{ parameters.manifestDirPath }}/$(ARTIFACT_NAME) ${{ if ne(parameters.IgnoreDirectories, '') }}: AdditionalComponentDetectorArgs: '--IgnoreDirectories ${{ parameters.IgnoreDirectories }}' diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml new file mode 100644 index 000000000000..d6b9878f54db --- /dev/null +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -0,0 +1,91 @@ +parameters: + # Enable install tasks for MicroBuild + enableMicrobuild: false + # Enable install tasks for MicroBuild on Mac and Linux + # Will be ignored if 'enableMicrobuild' is false or 'Agent.Os' is 'Windows_NT' + enableMicrobuildForMacAndLinux: false + # Determines whether the ESRP service connection information should be passed to the signing plugin. + # This overlaps with _SignType to some degree. We only need the service connection for real signing. + # It's important that the service connection not be passed to the MicroBuildSigningPlugin task in this place. + # Doing so will cause the service connection to be authorized for the pipeline, which isn't allowed and won't work for non-prod. + # Unfortunately, _SignType can't be used to exclude the use of the service connection in non-real sign scenarios. The + # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. + microbuildUseESRP: true + # Location of the MicroBuild output folder + # NOTE: There's something that relies on this being in the "default" source directory for tasks such as Signing to work properly. + microBuildOutputFolder: '$(Build.SourcesDirectory)' + + continueOnError: false + +steps: + - ${{ if eq(parameters.enableMicrobuild, 'true') }}: + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: + # Needed to download the MicroBuild plugin nupkgs on Mac and Linux when nuget.exe is unavailable + - task: UseDotNet@2 + displayName: Install .NET 8.0 SDK for MicroBuild Plugin + inputs: + packageType: sdk + version: 8.0.x + installationPath: ${{ parameters.microBuildOutputFolder }}/.dotnet + workingDirectory: ${{ parameters.microBuildOutputFolder }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + - script: | + REM Check if ESRP is disabled while SignType is real + if /I "${{ parameters.microbuildUseESRP }}"=="false" if /I "$(_SignType)"=="real" ( + echo Error: ESRP must be enabled when SignType is real. + exit /b 1 + ) + displayName: 'Validate ESRP usage (Windows)' + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + - script: | + # Check if ESRP is disabled while SignType is real + if [ "${{ parameters.microbuildUseESRP }}" = "false" ] && [ "$(_SignType)" = "real" ]; then + echo "Error: ESRP must be enabled when SignType is real." + exit 1 + fi + displayName: 'Validate ESRP usage (Non-Windows)' + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea + ${{ else }}: + ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index 80788c523191..10f825e270a0 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -12,29 +12,31 @@ steps: inputs: targetType: inline script: | - New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ - Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ continueOnError: true condition: always() - task: PowerShell@2 displayName: Redact Logs inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/redact-logs.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/redact-logs.ps1 # For now this needs to have explicit list of all sensitive data. Taken from eng/publishing/v3/publish.yml - # Sensitive data can as well be added to $(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + # Sensitive data can as well be added to $(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) - arguments: -InputPath '$(Build.SourcesDirectory)/PostBuildLogs' + arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' -BinlogToolVersion ${{parameters.BinlogToolVersion}} - -TokensFilePath '$(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' '$(publishing-dnceng-devdiv-code-r-build-re)' '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' '$(akams-client-id)' '$(microsoft-symbol-server-pat)' '$(symweb-symbol-server-pat)' + '$(dnceng-symbol-server-pat)' '$(dn-bot-all-orgs-build-rw-code-rw)' + '$(System.AccessToken)' ${{parameters.CustomSensitiveDataList}} continueOnError: true condition: always() @@ -42,9 +44,10 @@ steps: - task: CopyFiles@2 displayName: Gather post build logs inputs: - SourceFolder: '$(Build.SourcesDirectory)/PostBuildLogs' + SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' + condition: always() - template: /eng/common/core-templates/steps/publish-build-artifacts.yml parameters: diff --git a/eng/common/core-templates/steps/source-build.yml b/eng/common/core-templates/steps/source-build.yml index 2915d29bb7f6..acf16ed34963 100644 --- a/eng/common/core-templates/steps/source-build.yml +++ b/eng/common/core-templates/steps/source-build.yml @@ -19,25 +19,12 @@ steps: set -x df -h - # If file changes are detected, set CopyWipIntoInnerSourceBuildRepo to copy the WIP changes into the inner source build repo. - internalRestoreArgs= - if ! git diff --quiet; then - internalRestoreArgs='/p:CopyWipIntoInnerSourceBuildRepo=true' - # The 'Copy WIP' feature of source build uses git stash to apply changes from the original repo. - # This only works if there is a username/email configured, which won't be the case in most CI runs. - git config --get user.email - if [ $? -ne 0 ]; then - git config user.email dn-bot@microsoft.com - git config user.name dn-bot - fi - fi - # If building on the internal project, the internal storage variable may be available (usually only if needed) # In that case, add variables to allow the download of internal runtimes if the specified versions are not found # in the default public locations. internalRuntimeDownloadArgs= if [ '$(dotnetbuilds-internal-container-read-token-base64)' != '$''(dotnetbuilds-internal-container-read-token-base64)' ]; then - internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://dotnetbuilds.blob.core.windows.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://dotnetbuilds.blob.core.windows.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' + internalRuntimeDownloadArgs='/p:DotNetRuntimeSourceFeed=https://ci.dot.net/internal /p:DotNetRuntimeSourceFeedKey=$(dotnetbuilds-internal-container-read-token-base64) --runtimesourcefeed https://ci.dot.net/internal --runtimesourcefeedkey $(dotnetbuilds-internal-container-read-token-base64)' fi buildConfig=Release @@ -46,84 +33,33 @@ steps: buildConfig='$(_BuildConfig)' fi - officialBuildArgs= - if [ '${{ and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}' = 'True' ]; then - officialBuildArgs='/p:DotNetPublishUsingPipelines=true /p:OfficialBuildId=$(BUILD.BUILDNUMBER)' - fi - targetRidArgs= if [ '${{ parameters.platform.targetRID }}' != '' ]; then targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - runtimeOsArgs= - if [ '${{ parameters.platform.runtimeOS }}' != '' ]; then - runtimeOsArgs='/p:RuntimeOS=${{ parameters.platform.runtimeOS }}' - fi - - baseOsArgs= - if [ '${{ parameters.platform.baseOS }}' != '' ]; then - baseOsArgs='/p:BaseOS=${{ parameters.platform.baseOS }}' - fi - - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - - assetManifestFileName=SourceBuild_RidSpecific.xml - if [ '${{ parameters.platform.name }}' != '' ]; then - assetManifestFileName=SourceBuild_${{ parameters.platform.name }}.xml + portableBuildArgs= + if [ '${{ parameters.platform.portableBuild }}' != '' ]; then + portableBuildArgs='/p:PortableBuild=${{ parameters.platform.portableBuild }}' fi ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ - $officialBuildArgs \ + --restore --build --pack -bl \ + --source-build \ + ${{ parameters.platform.buildArguments }} \ $internalRuntimeDownloadArgs \ - $internalRestoreArgs \ $targetRidArgs \ - $runtimeOsArgs \ - $baseOsArgs \ - /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ - /p:ArcadeBuildFromSource=true \ - /p:DotNetBuildSourceOnly=true \ - /p:DotNetBuildRepo=true \ - /p:AssetManifestFileName=$assetManifestFileName + $portableBuildArgs \ displayName: Build -# Upload build logs for diagnosis. -- task: CopyFiles@2 - displayName: Prepare BuildLogs staging directory - inputs: - SourceFolder: '$(Build.SourcesDirectory)' - Contents: | - **/*.log - **/*.binlog - artifacts/sb/prebuilt-report/** - TargetFolder: '$(Build.StagingDirectory)/BuildLogs' - CleanTargetFolder: true - continueOnError: true - condition: succeededOrFailed() - - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: is1ESPipeline: ${{ parameters.is1ESPipeline }} args: displayName: Publish BuildLogs - targetPath: '$(Build.StagingDirectory)/BuildLogs' + targetPath: artifacts/log/${{ coalesce(variables._BuildConfig, 'Release') }} artifactName: BuildLogs_SourceBuild_${{ parameters.platform.name }}_Attempt$(System.JobAttempt) continueOnError: true condition: succeededOrFailed() sbomEnabled: false # we don't need SBOM for logs - -# Manually inject component detection so that we can ignore the source build upstream cache, which contains -# a nupkg cache of input packages (a local feed). -# This path must match the upstream cache path in property 'CurrentRepoSourceBuiltNupkgCacheDir' -# in src\Microsoft.DotNet.Arcade.Sdk\tools\SourceBuild\SourceBuildArcade.targets -- template: /eng/common/core-templates/steps/component-governance.yml - parameters: - displayName: Component Detection (Exclude upstream cache) - is1ESPipeline: ${{ parameters.is1ESPipeline }} - componentGovernanceIgnoreDirectories: '$(Build.SourcesDirectory)/artifacts/sb/src/artifacts/obj/source-built-upstream-cache' - disableComponentGovernance: ${{ eq(variables['System.TeamProject'], 'public') }} diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..e9a694afa58e --- /dev/null +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,35 @@ +parameters: + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + binlogPath: artifacts/log/Debug/Build.binlog + +steps: +- task: UseDotNet@2 + displayName: "Source Index: Use .NET 9 SDK" + inputs: + packageType: sdk + version: 9.0.x + installationPath: $(Agent.TempDirectory)/dotnet + workingDirectory: $(Agent.TempDirectory) + +- script: | + $(Agent.TempDirectory)/dotnet/dotnet tool install BinLogToSln --version ${{parameters.sourceIndexProcessBinlogPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + $(Agent.TempDirectory)/dotnet/dotnet tool install UploadIndexStage1 --version ${{parameters.sourceIndexUploadPackageVersion}} --add-source ${{parameters.SourceIndexPackageSource}} --tool-path $(Agent.TempDirectory)/.source-index/tools + displayName: "Source Index: Download netsourceindex Tools" + # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. + workingDirectory: $(Agent.TempDirectory) + +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: "Source Index: Process Binlog into indexable sln" + +- ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: AzureCLI@2 + displayName: "Source Index: Upload Source Index stage1 artifacts to Azure" + inputs: + azureSubscription: 'SourceDotNet Stage1 Publish' + addSpnToEnvironment: true + scriptType: 'ps' + scriptLocation: 'inlineScript' + inlineScript: | + $(Agent.TempDirectory)/.source-index/tools/UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) -s netsourceindexstage1 -b stage1 diff --git a/eng/common/cross/arm64/tizen/tizen.patch b/eng/common/cross/arm64/tizen/tizen.patch index af7c8be05906..2cebc547382e 100644 --- a/eng/common/cross/arm64/tizen/tizen.patch +++ b/eng/common/cross/arm64/tizen/tizen.patch @@ -5,5 +5,5 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf64-littleaarch64) --GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib/ld-linux-aarch64.so.1 ) ) +-GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-aarch64.so.1 ) ) +GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux-aarch64.so.1 ) ) diff --git a/eng/common/cross/armel/armel.jessie.patch b/eng/common/cross/armel/armel.jessie.patch deleted file mode 100644 index 2d2615619351..000000000000 --- a/eng/common/cross/armel/armel.jessie.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff -u -r a/usr/include/urcu/uatomic/generic.h b/usr/include/urcu/uatomic/generic.h ---- a/usr/include/urcu/uatomic/generic.h 2014-10-22 15:00:58.000000000 -0700 -+++ b/usr/include/urcu/uatomic/generic.h 2020-10-30 21:38:28.550000000 -0700 -@@ -69,10 +69,10 @@ - #endif - #ifdef UATOMIC_HAS_ATOMIC_SHORT - case 2: -- return __sync_val_compare_and_swap_2(addr, old, _new); -+ return __sync_val_compare_and_swap_2((uint16_t*) addr, old, _new); - #endif - case 4: -- return __sync_val_compare_and_swap_4(addr, old, _new); -+ return __sync_val_compare_and_swap_4((uint32_t*) addr, old, _new); - #if (CAA_BITS_PER_LONG == 64) - case 8: - return __sync_val_compare_and_swap_8(addr, old, _new); -@@ -109,7 +109,7 @@ - return; - #endif - case 4: -- __sync_and_and_fetch_4(addr, val); -+ __sync_and_and_fetch_4((uint32_t*) addr, val); - return; - #if (CAA_BITS_PER_LONG == 64) - case 8: -@@ -148,7 +148,7 @@ - return; - #endif - case 4: -- __sync_or_and_fetch_4(addr, val); -+ __sync_or_and_fetch_4((uint32_t*) addr, val); - return; - #if (CAA_BITS_PER_LONG == 64) - case 8: -@@ -187,7 +187,7 @@ - return __sync_add_and_fetch_2(addr, val); - #endif - case 4: -- return __sync_add_and_fetch_4(addr, val); -+ return __sync_add_and_fetch_4((uint32_t*) addr, val); - #if (CAA_BITS_PER_LONG == 64) - case 8: - return __sync_add_and_fetch_8(addr, val); diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 7e9ba2b75ed3..fbd8d80848a6 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -6,10 +6,11 @@ usage() { echo "Creates a toolchain and sysroot used for cross-compiling for Android." echo - echo "Usage: $0 [BuildArch] [ApiLevel]" + echo "Usage: $0 [BuildArch] [ApiLevel] [--ndk NDKVersion]" echo echo "BuildArch is the target architecture of Android. Currently only arm64 is supported." echo "ApiLevel is the target Android API level. API levels usually match to Android releases. See https://source.android.com/source/build-numbers.html" + echo "NDKVersion is the version of Android NDK. The default is r21. See https://developer.android.com/ndk/downloads/revision_history" echo echo "By default, the toolchain and sysroot will be generated in cross/android-rootfs/toolchain/[BuildArch]. You can change this behavior" echo "by setting the TOOLCHAIN_DIR environment variable" @@ -25,10 +26,15 @@ __BuildArch=arm64 __AndroidArch=aarch64 __AndroidToolchain=aarch64-linux-android -for i in "$@" - do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" - case $lowerI in +while :; do + if [[ "$#" -le 0 ]]; then + break + fi + + i=$1 + + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + case $lowerI in -?|-h|--help) usage exit 1 @@ -43,6 +49,10 @@ for i in "$@" __AndroidArch=arm __AndroidToolchain=arm-linux-androideabi ;; + --ndk) + shift + __NDK_Version=$1 + ;; *[0-9]) __ApiLevel=$i ;; @@ -50,8 +60,17 @@ for i in "$@" __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i" ;; esac + shift done +if [[ "$__NDK_Version" == "r21" ]] || [[ "$__NDK_Version" == "r22" ]]; then + __NDK_File_Arch_Spec=-x86_64 + __SysRoot=sysroot +else + __NDK_File_Arch_Spec= + __SysRoot=toolchains/llvm/prebuilt/linux-x86_64/sysroot +fi + # Obtain the location of the bash script to figure out where the root of the repo is. __ScriptBaseDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" @@ -78,6 +97,7 @@ fi echo "Target API level: $__ApiLevel" echo "Target architecture: $__BuildArch" +echo "NDK version: $__NDK_Version" echo "NDK location: $__NDK_Dir" echo "Target Toolchain location: $__ToolchainDir" @@ -85,8 +105,8 @@ echo "Target Toolchain location: $__ToolchainDir" if [ ! -d $__NDK_Dir ]; then echo Downloading the NDK into $__NDK_Dir mkdir -p $__NDK_Dir - wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux-x86_64.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip - unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux-x86_64.zip -d $__CrossDir + wget -q --progress=bar:force:noscroll --show-progress https://dl.google.com/android/repository/android-ndk-$__NDK_Version-linux$__NDK_File_Arch_Spec.zip -O $__CrossDir/android-ndk-$__NDK_Version-linux.zip + unzip -q $__CrossDir/android-ndk-$__NDK_Version-linux.zip -d $__CrossDir fi if [ ! -d $__lldb_Dir ]; then @@ -116,16 +136,11 @@ for path in $(wget -qO- https://packages.termux.dev/termux-main-21/dists/stable/ fi done -cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/sysroot/usr/" +cp -R "$__TmpDir/data/data/com.termux/files/usr/"* "$__ToolchainDir/$__SysRoot/usr/" # Generate platform file for build.sh script to assign to __DistroRid echo "Generating platform file..." -echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/sysroot/android_platform - -echo "Now to build coreclr, libraries and installers; run:" -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory coreclr -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory libraries -echo ROOTFS_DIR=\$\(realpath $__ToolchainDir/sysroot\) ./build.sh --cross --arch $__BuildArch \ - --subsetCategory installer +echo "RID=android.${__ApiLevel}-${__BuildArch}" > $__ToolchainDir/$__SysRoot/android_platform + +echo "Now to build coreclr, libraries and host; run:" +echo ROOTFS_DIR=$(realpath $__ToolchainDir/$__SysRoot) ./build.sh clr+libs+host --cross --arch $__BuildArch diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 4b5e8d7166bd..8abfb71f7275 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -5,7 +5,7 @@ set -e usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" + echo "BuildArch can be: arm(default), arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64, x86" echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" echo " for alpine can be specified with version: alpineX.YY or alpineedge" echo " for FreeBSD can be: freebsd13, freebsd14" @@ -15,6 +15,7 @@ usage() echo "llvmx[.y] - optional, LLVM version for LLVM related packages." echo "--skipunmount - optional, will skip the unmount of rootfs folder." echo "--skipsigcheck - optional, will skip package signature checks (allowing untrusted packages)." + echo "--skipemulation - optional, will skip qemu and debootstrap requirement when building environment for debian based systems." echo "--use-mirror - optional, use mirror URL to fetch resources, when available." echo "--jobs N - optional, restrict to N jobs." exit 1 @@ -52,28 +53,27 @@ __UbuntuPackages+=" symlinks" __UbuntuPackages+=" libicu-dev" __UbuntuPackages+=" liblttng-ust-dev" __UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" __AlpinePackages+=" gettext-dev" __AlpinePackages+=" icu-dev" __AlpinePackages+=" libunwind-dev" __AlpinePackages+=" lttng-ust-dev" __AlpinePackages+=" compiler-rt" -__AlpinePackages+=" numactl-dev" # runtime libraries' dependencies __UbuntuPackages+=" libcurl4-openssl-dev" __UbuntuPackages+=" libkrb5-dev" __UbuntuPackages+=" libssl-dev" __UbuntuPackages+=" zlib1g-dev" +__UbuntuPackages+=" libbrotli-dev" __AlpinePackages+=" curl-dev" __AlpinePackages+=" krb5-dev" __AlpinePackages+=" openssl-dev" __AlpinePackages+=" zlib-dev" -__FreeBSDBase="13.3-RELEASE" -__FreeBSDPkg="1.17.0" +__FreeBSDBase="13.4-RELEASE" +__FreeBSDPkg="1.21.3" __FreeBSDABI="13" __FreeBSDPackages="libunwind" __FreeBSDPackages+=" icu" @@ -91,18 +91,18 @@ __HaikuPackages="gcc_syslibs" __HaikuPackages+=" gcc_syslibs_devel" __HaikuPackages+=" gmp" __HaikuPackages+=" gmp_devel" -__HaikuPackages+=" icu66" -__HaikuPackages+=" icu66_devel" +__HaikuPackages+=" icu[0-9]+" +__HaikuPackages+=" icu[0-9]*_devel" __HaikuPackages+=" krb5" __HaikuPackages+=" krb5_devel" __HaikuPackages+=" libiconv" __HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" +__HaikuPackages+=" llvm[0-9]*_libunwind" +__HaikuPackages+=" llvm[0-9]*_libunwind_devel" __HaikuPackages+=" mpfr" __HaikuPackages+=" mpfr_devel" -__HaikuPackages+=" openssl" -__HaikuPackages+=" openssl_devel" +__HaikuPackages+=" openssl3" +__HaikuPackages+=" openssl3_devel" __HaikuPackages+=" zlib" __HaikuPackages+=" zlib_devel" @@ -128,10 +128,12 @@ __AlpineKeys=' 616adfeb:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0BFD1D4lIxQcsqEpQzU\npNCYM3aP1V/fxxVdT4DWvSI53JHTwHQamKdMWtEXetWVbP5zSROniYKFXd/xrD9X\n0jiGHey3lEtylXRIPxe5s+wXoCmNLcJVnvTcDtwx/ne2NLHxp76lyc25At+6RgE6\nADjLVuoD7M4IFDkAsd8UQ8zM0Dww9SylIk/wgV3ZkifecvgUQRagrNUdUjR56EBZ\nraQrev4hhzOgwelT0kXCu3snbUuNY/lU53CoTzfBJ5UfEJ5pMw1ij6X0r5S9IVsy\nKLWH1hiO0NzU2c8ViUYCly4Fe9xMTFc6u2dy/dxf6FwERfGzETQxqZvSfrRX+GLj\n/QZAXiPg5178hT/m0Y3z5IGenIC/80Z9NCi+byF1WuJlzKjDcF/TU72zk0+PNM/H\nKuppf3JT4DyjiVzNC5YoWJT2QRMS9KLP5iKCSThwVceEEg5HfhQBRT9M6KIcFLSs\nmFjx9kNEEmc1E8hl5IR3+3Ry8G5/bTIIruz14jgeY9u5jhL8Vyyvo41jgt9sLHR1\n/J1TxKfkgksYev7PoX6/ZzJ1ksWKZY5NFoDXTNYUgzFUTOoEaOg3BAQKadb3Qbbq\nXIrxmPBdgrn9QI7NCgfnAY3Tb4EEjs3ON/BNyEhUENcXOH6I1NbcuBQ7g9P73kE4\nVORdoc8MdJ5eoKBpO8Ww8HECAwEAAQ== 616ae350:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyduVzi1mWm+lYo2Tqt/0\nXkCIWrDNP1QBMVPrE0/ZlU2bCGSoo2Z9FHQKz/mTyMRlhNqTfhJ5qU3U9XlyGOPJ\npiM+b91g26pnpXJ2Q2kOypSgOMOPA4cQ42PkHBEqhuzssfj9t7x47ppS94bboh46\nxLSDRff/NAbtwTpvhStV3URYkxFG++cKGGa5MPXBrxIp+iZf9GnuxVdST5PGiVGP\nODL/b69sPJQNbJHVquqUTOh5Ry8uuD2WZuXfKf7/C0jC/ie9m2+0CttNu9tMciGM\nEyKG1/Xhk5iIWO43m4SrrT2WkFlcZ1z2JSf9Pjm4C2+HovYpihwwdM/OdP8Xmsnr\nDzVB4YvQiW+IHBjStHVuyiZWc+JsgEPJzisNY0Wyc/kNyNtqVKpX6dRhMLanLmy+\nf53cCSI05KPQAcGj6tdL+D60uKDkt+FsDa0BTAobZ31OsFVid0vCXtsbplNhW1IF\nHwsGXBTVcfXg44RLyL8Lk/2dQxDHNHzAUslJXzPxaHBLmt++2COa2EI1iWlvtznk\nOk9WP8SOAIj+xdqoiHcC4j72BOVVgiITIJNHrbppZCq6qPR+fgXmXa+sDcGh30m6\n9Wpbr28kLMSHiENCWTdsFij+NQTd5S47H7XTROHnalYDuF1RpS+DpQidT5tUimaT\nJZDr++FjKrnnijbyNF8b98UCAwEAAQ== 616db30d:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnpUpyWDWjlUk3smlWeA0\nlIMW+oJ38t92CRLHH3IqRhyECBRW0d0aRGtq7TY8PmxjjvBZrxTNDpJT6KUk4LRm\na6A6IuAI7QnNK8SJqM0DLzlpygd7GJf8ZL9SoHSH+gFsYF67Cpooz/YDqWrlN7Vw\ntO00s0B+eXy+PCXYU7VSfuWFGK8TGEv6HfGMALLjhqMManyvfp8hz3ubN1rK3c8C\nUS/ilRh1qckdbtPvoDPhSbTDmfU1g/EfRSIEXBrIMLg9ka/XB9PvWRrekrppnQzP\nhP9YE3x/wbFc5QqQWiRCYyQl/rgIMOXvIxhkfe8H5n1Et4VAorkpEAXdsfN8KSVv\nLSMazVlLp9GYq5SUpqYX3KnxdWBgN7BJoZ4sltsTpHQ/34SXWfu3UmyUveWj7wp0\nx9hwsPirVI00EEea9AbP7NM2rAyu6ukcm4m6ATd2DZJIViq2es6m60AE6SMCmrQF\nwmk4H/kdQgeAELVfGOm2VyJ3z69fQuywz7xu27S6zTKi05Qlnohxol4wVb6OB7qG\nLPRtK9ObgzRo/OPumyXqlzAi/Yvyd1ZQk8labZps3e16bQp8+pVPiumWioMFJDWV\nGZjCmyMSU8V6MB6njbgLHoyg2LCukCAeSjbPGGGYhnKLm1AKSoJh3IpZuqcKCk5C\n8CM1S15HxV78s9dFntEqIokCAwEAAQ== +66ba20fe:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtfB12w4ZgqsXWZDfUAV/\n6Y4aHUKIu3q4SXrNZ7CXF9nXoAVYrS7NAxJdAodsY3vPCN0g5O8DFXR+390LdOuQ\n+HsGKCc1k5tX5ZXld37EZNTNSbR0k+NKhd9h6X3u6wqPOx7SIKxwAQR8qeeFq4pP\nrt9GAGlxtuYgzIIcKJPwE0dZlcBCg+GnptCUZXp/38BP1eYC+xTXSL6Muq1etYfg\nodXdb7Yl+2h1IHuOwo5rjgY5kpY7GcAs8AjGk3lDD/av60OTYccknH0NCVSmPoXK\nvrxDBOn0LQRNBLcAfnTKgHrzy0Q5h4TNkkyTgxkoQw5ObDk9nnabTxql732yy9BY\ns+hM9+dSFO1HKeVXreYSA2n1ndF18YAvAumzgyqzB7I4pMHXq1kC/8bONMJxwSkS\nYm6CoXKyavp7RqGMyeVpRC7tV+blkrrUml0BwNkxE+XnwDRB3xDV6hqgWe0XrifD\nYTfvd9ScZQP83ip0r4IKlq4GMv/R5shcCRJSkSZ6QSGshH40JYSoiwJf5FHbj9ND\n7do0UAqebWo4yNx63j/wb2ULorW3AClv0BCFSdPsIrCStiGdpgJDBR2P2NZOCob3\nG9uMj+wJD6JJg2nWqNJxkANXX37Qf8plgzssrhrgOvB0fjjS7GYhfkfmZTJ0wPOw\nA8+KzFseBh4UFGgue78KwgkCAwEAAQ== ' __Keyring= __KeyringFile="/usr/share/keyrings/ubuntu-archive-keyring.gpg" __SkipSigCheck=0 +__SkipEmulation=0 __UseMirror=0 __UnprocessedBuildArgs= @@ -162,9 +164,13 @@ while :; do armel) __BuildArch=armel __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie + __UbuntuRepo="http://archive.debian.org/debian/" + __CodeName=buster __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __LLDB_Package="liblldb-6.0-dev" + __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" + __UbuntuPackages="${__UbuntuPackages// libomp5/}" + __UbuntuSuites= ;; armv6) __BuildArch=armv6 @@ -180,6 +186,18 @@ while :; do __Keyring="--keyring $__KeyringFile" fi ;; + loongarch64) + __BuildArch=loongarch64 + __AlpineArch=loongarch64 + __QEMUArch=loongarch64 + __UbuntuArch=loong64 + __UbuntuSuites=unreleased + __LLDB_Package="liblldb-19-dev" + + if [[ "$__CodeName" == "sid" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; riscv64) __BuildArch=riscv64 __AlpineArch=riscv64 @@ -264,44 +282,21 @@ while :; do ;; xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi + __CodeName=xenial ;; bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi + __CodeName=bionic ;; focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi + __CodeName=focal ;; jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi + __CodeName=jammy ;; noble) # Ubuntu 24.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=noble - fi - if [[ -n "$__LLDB_Package" ]]; then - __LLDB_Package="liblldb-18-dev" - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __CodeName=noble + if [[ -z "$__LLDB_Package" ]]; then + __LLDB_Package="liblldb-19-dev" fi ;; stretch) # Debian 9 @@ -319,7 +314,7 @@ while :; do __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + __UbuntuRepo="http://archive.debian.org/debian/" fi ;; bullseye) # Debian 11 @@ -340,10 +335,28 @@ while :; do ;; sid) # Debian sid __CodeName=sid - __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + __UbuntuSuites= - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" + # Debian-Ports architectures need different values + case "$__UbuntuArch" in + amd64|arm64|armel|armhf|i386|mips64el|ppc64el|riscv64|s390x) + __KeyringFile="/usr/share/keyrings/debian-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.debian.org/debian/" + fi + ;; + *) + __KeyringFile="/usr/share/keyrings/debian-ports-archive-keyring.gpg" + + if [[ -z "$__UbuntuRepo" ]]; then + __UbuntuRepo="http://ftp.ports.debian.org/debian-ports/" + fi + ;; + esac + + if [[ -e "$__KeyringFile" ]]; then + __Keyring="--keyring $__KeyringFile" fi ;; tizen) @@ -370,7 +383,7 @@ while :; do ;; freebsd14) __CodeName=freebsd - __FreeBSDBase="14.0-RELEASE" + __FreeBSDBase="14.2-RELEASE" __FreeBSDABI="14" __SkipUnmount=1 ;; @@ -388,6 +401,9 @@ while :; do --skipsigcheck) __SkipSigCheck=1 ;; + --skipemulation) + __SkipEmulation=1 + ;; --rootfsdir|-rootfsdir) shift __RootfsDir="$1" @@ -420,16 +436,15 @@ case "$__AlpineVersion" in elif [[ "$__AlpineArch" == "x86" ]]; then __AlpineVersion=3.17 # minimum version that supports lldb-dev __AlpinePackages+=" llvm15-libs" - elif [[ "$__AlpineArch" == "riscv64" ]]; then + elif [[ "$__AlpineArch" == "riscv64" || "$__AlpineArch" == "loongarch64" ]]; then + __AlpineVersion=3.21 # minimum version that supports lldb-dev + __AlpinePackages+=" llvm19-libs" + elif [[ -n "$__AlpineMajorVersion" ]]; then + # use whichever alpine version is provided and select the latest toolchain libs __AlpineLlvmLibsLookup=1 - __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive) else __AlpineVersion=3.13 # 3.13 to maximize compatibility __AlpinePackages+=" llvm10-libs" - - if [[ "$__AlpineArch" == "armv7" ]]; then - __AlpinePackages="${__AlpinePackages//numactl-dev/}" - fi fi esac @@ -439,15 +454,6 @@ if [[ "$__AlpineVersion" =~ 3\.1[345] ]]; then __AlpinePackages="${__AlpinePackages/compiler-rt/compiler-rt-static}" fi -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -if [[ "$__CodeName" == "xenial" && "$__UbuntuArch" == "armhf" ]]; then - # libnuma-dev is not available on armhf for xenial - __UbuntuPackages="${__UbuntuPackages//libnuma-dev/}" -fi - __UbuntuPackages+=" ${__LLDB_Package:-}" if [[ -z "$__UbuntuRepo" ]]; then @@ -496,7 +502,7 @@ if [[ "$__CodeName" == "alpine" ]]; then arch="$(uname -m)" ensureDownloadTool - + if [[ "$__hasWget" == 1 ]]; then wget -P "$__ApkToolsDir" "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic/v$__ApkToolsVersion/$arch/apk.static" else @@ -512,11 +518,6 @@ if [[ "$__CodeName" == "alpine" ]]; then echo "$__ApkToolsSHA512SUM $__ApkToolsDir/apk.static" | sha512sum -c chmod +x "$__ApkToolsDir/apk.static" - if [[ -f "/usr/bin/qemu-$__QEMUArch-static" ]]; then - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch-static" "$__RootfsDir/usr/bin" - fi - if [[ "$__AlpineVersion" == "edge" ]]; then version=edge else @@ -536,6 +537,10 @@ if [[ "$__CodeName" == "alpine" ]]; then __ApkSignatureArg="--keys-dir $__ApkKeysDir" fi + if [[ "$__SkipEmulation" == "1" ]]; then + __NoEmulationArg="--no-scripts" + fi + # initialize DB # shellcheck disable=SC2086 "$__ApkToolsDir/apk.static" \ @@ -557,7 +562,7 @@ if [[ "$__CodeName" == "alpine" ]]; then "$__ApkToolsDir/apk.static" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" \ + -U $__ApkSignatureArg --root "$__RootfsDir" --arch "$__AlpineArch" $__NoEmulationArg \ add $__AlpinePackages rm -r "$__ApkToolsDir" @@ -573,7 +578,7 @@ elif [[ "$__CodeName" == "freebsd" ]]; then curl -SL "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version fi echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf + echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf mkdir -p "$__RootfsDir"/tmp # get and build package manager if [[ "$__hasWget" == 1 ]]; then @@ -681,7 +686,7 @@ elif [[ "$__CodeName" == "haiku" ]]; then ensureDownloadTool - echo "Downloading Haiku package tool" + echo "Downloading Haiku package tools" git clone https://github.com/haiku/haiku-toolchains-ubuntu --depth 1 "$__RootfsDir/tmp/script" if [[ "$__hasWget" == 1 ]]; then wget -O "$__RootfsDir/tmp/download/hosttools.zip" "$("$__RootfsDir/tmp/script/fetch.sh" --hosttools)" @@ -691,34 +696,42 @@ elif [[ "$__CodeName" == "haiku" ]]; then unzip -o "$__RootfsDir/tmp/download/hosttools.zip" -d "$__RootfsDir/tmp/bin" - DepotBaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - HpkgBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuBaseUrl="https://eu.hpkg.haiku-os.org/haiku/master/$__HaikuArch/current" + HaikuPortsBaseUrl="https://eu.hpkg.haiku-os.org/haikuports/master/$__HaikuArch/current" + + echo "Downloading HaikuPorts package repository index..." + if [[ "$__hasWget" == 1 ]]; then + wget -P "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + else + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuPortsBaseUrl/repo" + fi - # Download Haiku packages echo "Downloading Haiku packages" read -ra array <<<"$__HaikuPackages" for package in "${array[@]}"; do echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 + hpkgFilename="$(LD_LIBRARY_PATH="$__RootfsDir/tmp/bin" "$__RootfsDir/tmp/bin/package_repo" list -f "$__RootfsDir/tmp/download/repo" | + grep -E "${package}-" | sort -V | tail -n 1 | xargs)" + if [ -z "$hpkgFilename" ]; then + >&2 echo "ERROR: package $package missing." + exit 1 + fi + echo "Resolved filename: $hpkgFilename..." + hpkgDownloadUrl="$HaikuPortsBaseUrl/packages/$hpkgFilename" if [[ "$__hasWget" == 1 ]]; then - hpkgDownloadUrl="$(wget -qO- --post-data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" wget -P "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" else - hpkgDownloadUrl="$(curl -sSL -XPOST --data '{"name":"'"$package"'","repositorySourceCode":"haikuports_'$__HaikuArch'","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header 'Content-Type:application/json' "$DepotBaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$hpkgDownloadUrl" fi done for package in haiku haiku_devel; do echo "Downloading $package..." if [[ "$__hasWget" == 1 ]]; then - hpkgVersion="$(wget -qO- "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - wget -P "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(wget -qO- "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + wget -P "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" else - hpkgVersion="$(curl -sSL "$HpkgBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" - curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HpkgBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" + hpkgVersion="$(curl -sSL "$HaikuBaseUrl" | sed -n 's/^.*version: "\([^"]*\)".*$/\1/p')" + curl -SLO --create-dirs --output-dir "$__RootfsDir/tmp/download" "$HaikuBaseUrl/packages/$package-$hpkgVersion-1-$__HaikuArch.hpkg" fi done @@ -744,25 +757,67 @@ elif [[ "$__CodeName" == "haiku" ]]; then popd rm -rf "$__RootfsDir/tmp" elif [[ -n "$__CodeName" ]]; then + __Suites="$__CodeName $(for suite in $__UbuntuSuites; do echo -n "$__CodeName-$suite "; done)" + + if [[ "$__SkipEmulation" == "1" ]]; then + if [[ -z "$AR" ]]; then + if command -v ar &>/dev/null; then + AR="$(command -v ar)" + elif command -v llvm-ar &>/dev/null; then + AR="$(command -v llvm-ar)" + else + echo "Unable to find ar or llvm-ar on PATH, add them to PATH or set AR environment variable pointing to the available AR tool" + exit 1 + fi + fi + + PYTHON=${PYTHON_EXECUTABLE:-python3} + + # shellcheck disable=SC2086,SC2046 + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + + # shellcheck disable=SC2086,SC2046 + "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ + $(for suite in $__Suites; do echo -n "--suite $suite "; done) \ + $__UbuntuPackages + exit 0 + fi + + __UpdateOptions= if [[ "$__SkipSigCheck" == "0" ]]; then __Keyring="$__Keyring --force-check-gpg" + else + __Keyring= + __UpdateOptions="--allow-unauthenticated --allow-insecure-repositories" fi # shellcheck disable=SC2086 echo running debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" + # shellcheck disable=SC2086 + if ! debootstrap "--variant=minbase" $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo"; then + echo "debootstrap failed! dumping debootstrap.log" + cat "$__RootfsDir/debootstrap/debootstrap.log" + exit 1 + fi + + rm -rf "$__RootfsDir"/etc/apt/*.{sources,list} "$__RootfsDir"/etc/apt/sources.list.d mkdir -p "$__RootfsDir/etc/apt/sources.list.d/" + + # shellcheck disable=SC2086 cat > "$__RootfsDir/etc/apt/sources.list.d/$__CodeName.sources" < token2) - (token1 < token2) + else: + return -1 if isinstance(token1, str) else 1 + + return len(tokens1) - len(tokens2) + +def compare_debian_versions(version1, version2): + """Compare two Debian package versions.""" + epoch1, upstream1, revision1 = parse_debian_version(version1) + epoch2, upstream2, revision2 = parse_debian_version(version2) + + if epoch1 != epoch2: + return epoch1 - epoch2 + + result = compare_upstream_version(upstream1, upstream2) + if result != 0: + return result + + return compare_upstream_version(revision1, revision2) + +def resolve_dependencies(packages, aliases, desired_packages): + """Recursively resolves dependencies for the desired packages.""" + resolved = [] + to_process = deque(desired_packages) + + while to_process: + current = to_process.popleft() + resolved_package = current if current in packages else aliases.get(current, [None])[0] + + if not resolved_package: + print(f"Error: Package '{current}' was not found in the available packages.") + sys.exit(1) + + if resolved_package not in resolved: + resolved.append(resolved_package) + + deps = packages.get(resolved_package, {}).get("Depends", "") + if deps: + deps = [dep.split(' ')[0] for dep in deps.split(', ') if dep] + for dep in deps: + if dep not in resolved and dep not in to_process and dep in packages: + to_process.append(dep) + + return resolved + +def parse_package_index(content): + """Parses the Packages.gz file and returns package information.""" + packages = {} + aliases = {} + entries = re.split(r'\n\n+', content) + + for entry in entries: + fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) + if "Package" in fields: + package_name = fields["Package"] + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + + return packages, aliases + +def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): + """Downloads .deb files and extracts them.""" + resolved_packages = resolve_dependencies(packages_info, aliases, desired_packages) + print(f"Resolved packages (including dependencies): {resolved_packages}") + + packages_to_download = {} + + for pkg in resolved_packages: + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] + + if pkg in aliases: + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] + + asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) + + package_to_deb_file_map = {} + for pkg in resolved_packages: + pkg_info = packages_info.get(pkg) + if pkg_info: + deb_filename = pkg_info.get("Filename") + if deb_filename: + deb_file_path = os.path.join(tmp_dir, os.path.basename(deb_filename)) + package_to_deb_file_map[pkg] = deb_file_path + + for pkg in reversed(resolved_packages): + deb_file = package_to_deb_file_map.get(pkg) + if deb_file and os.path.exists(deb_file): + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) + + print("All done!") + +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): + """Extract .deb file contents""" + + os.makedirs(extract_dir, exist_ok=True) + + with tempfile.TemporaryDirectory(dir=tmp_dir) as tmp_subdir: + result = subprocess.run(f"{ar_tool} t {os.path.abspath(deb_file)}", cwd=tmp_subdir, check=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + tar_filename = None + for line in result.stdout.decode().splitlines(): + if line.startswith("data.tar"): + tar_filename = line.strip() + break + + if not tar_filename: + raise FileNotFoundError(f"Could not find 'data.tar.*' in {deb_file}.") + + tar_file_path = os.path.join(tmp_subdir, tar_filename) + print(f"Extracting {tar_filename} from {deb_file}..") + + subprocess.run(f"{ar_tool} p {os.path.abspath(deb_file)} {tar_filename} > {tar_file_path}", check=True, shell=True) + + file_extension = os.path.splitext(tar_file_path)[1].lower() + + if file_extension == ".xz": + mode = "r:xz" + elif file_extension == ".gz": + mode = "r:gz" + elif file_extension == ".zst": + # zstd is not supported by standard library yet + decompressed_tar_path = tar_file_path.replace(".zst", "") + with open(tar_file_path, "rb") as zst_file, open(decompressed_tar_path, "wb") as decompressed_file: + dctx = zstandard.ZstdDecompressor() + dctx.copy_stream(zst_file, decompressed_file) + + tar_file_path = decompressed_tar_path + mode = "r" + else: + raise ValueError(f"Unsupported compression format: {file_extension}") + + with tarfile.open(tar_file_path, mode) as tar: + tar.extractall(path=extract_dir, filter='fully_trusted') + +def finalize_setup(rootfsdir): + lib_dir = os.path.join(rootfsdir, 'lib') + usr_lib_dir = os.path.join(rootfsdir, 'usr', 'lib') + + if os.path.exists(lib_dir): + if os.path.islink(lib_dir): + os.remove(lib_dir) + else: + os.makedirs(usr_lib_dir, exist_ok=True) + + for item in os.listdir(lib_dir): + src = os.path.join(lib_dir, item) + dest = os.path.join(usr_lib_dir, item) + + if os.path.isdir(src): + shutil.copytree(src, dest, dirs_exist_ok=True) + else: + shutil.copy2(src, dest) + + shutil.rmtree(lib_dir) + + os.symlink(usr_lib_dir, lib_dir) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate rootfs for .NET runtime on Debian-like OS") + parser.add_argument("--distro", required=False, help="Distro name (e.g., debian, ubuntu, etc.)") + parser.add_argument("--arch", required=True, help="Architecture (e.g., amd64, loong64, etc.)") + parser.add_argument("--rootfsdir", required=True, help="Destination directory.") + parser.add_argument('--suite', required=True, action='append', help='Specify one or more repository suites to collect index data.') + parser.add_argument("--mirror", required=False, help="Mirror (e.g., http://ftp.debian.org/debian-ports etc.)") + parser.add_argument("--artool", required=False, default="ar", help="ar tool to extract debs (e.g., ar, llvm-ar etc.)") + parser.add_argument("packages", nargs="+", help="List of package names to be installed.") + + args = parser.parse_args() + + if args.mirror is None: + if args.distro == "ubuntu": + args.mirror = "http://archive.ubuntu.com/ubuntu" if args.arch in ["amd64", "i386"] else "http://ports.ubuntu.com/ubuntu-ports" + elif args.distro == "debian": + args.mirror = "http://ftp.debian.org/debian-ports" + else: + raise Exception("Unsupported distro") + + DESIRED_PACKAGES = args.packages + [ # base packages + "dpkg", + "busybox", + "libc-bin", + "base-files", + "base-passwd", + "debianutils" + ] + + print(f"Creating rootfs. rootfsdir: {args.rootfsdir}, distro: {args.distro}, arch: {args.arch}, suites: {args.suite}, mirror: {args.mirror}") + + package_index_content = asyncio.run(download_package_index_parallel(args.mirror, args.arch, args.suite)) + + packages_info, aliases = parse_package_index(package_index_content) + + with tempfile.TemporaryDirectory() as tmp_dir: + install_packages(args.mirror, packages_info, aliases, tmp_dir, args.rootfsdir, args.artool, DESIRED_PACKAGES) + + finalize_setup(args.rootfsdir) diff --git a/eng/common/cross/tizen-build-rootfs.sh b/eng/common/cross/tizen-build-rootfs.sh old mode 100644 new mode 100755 diff --git a/eng/common/cross/tizen-fetch.sh b/eng/common/cross/tizen-fetch.sh old mode 100644 new mode 100755 index 28936ceef3a7..37c3a61f1de8 --- a/eng/common/cross/tizen-fetch.sh +++ b/eng/common/cross/tizen-fetch.sh @@ -156,13 +156,8 @@ fetch_tizen_pkgs() done } -if [ "$TIZEN_ARCH" == "riscv64" ]; then - BASE="Tizen-Base-RISCV" - UNIFIED="Tizen-Unified-RISCV" -else - BASE="Tizen-Base" - UNIFIED="Tizen-Unified" -fi +BASE="Tizen-Base" +UNIFIED="Tizen-Unified" Inform "Initialize ${TIZEN_ARCH} base" fetch_tizen_pkgs_init standard $BASE diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 9a4e285a5ae3..0ff85cf0367e 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -40,7 +40,7 @@ if(TARGET_ARCH_NAME STREQUAL "arm") set(TOOLCHAIN "arm-linux-gnueabihf") endif() if(TIZEN) - set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf/9.2.0") + set(TIZEN_TOOLCHAIN "armv7hl-tizen-linux-gnueabihf") endif() elseif(TARGET_ARCH_NAME STREQUAL "arm64") set(CMAKE_SYSTEM_PROCESSOR aarch64) @@ -49,7 +49,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") elseif(LINUX) set(TOOLCHAIN "aarch64-linux-gnu") if(TIZEN) - set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu/9.2.0") + set(TIZEN_TOOLCHAIN "aarch64-tizen-linux-gnu") endif() elseif(FREEBSD) set(triple "aarch64-unknown-freebsd12") @@ -58,7 +58,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "armel") set(CMAKE_SYSTEM_PROCESSOR armv7l) set(TOOLCHAIN "arm-linux-gnueabi") if(TIZEN) - set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi/9.2.0") + set(TIZEN_TOOLCHAIN "armv7l-tizen-linux-gnueabi") endif() elseif(TARGET_ARCH_NAME STREQUAL "armv6") set(CMAKE_SYSTEM_PROCESSOR armv6l) @@ -67,6 +67,13 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") else() set(TOOLCHAIN "arm-linux-gnueabihf") endif() +elseif(TARGET_ARCH_NAME STREQUAL "loongarch64") + set(CMAKE_SYSTEM_PROCESSOR "loongarch64") + if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/loongarch64-alpine-linux-musl) + set(TOOLCHAIN "loongarch64-alpine-linux-musl") + else() + set(TOOLCHAIN "loongarch64-linux-gnu") + endif() elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") set(CMAKE_SYSTEM_PROCESSOR ppc64le) if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) @@ -81,7 +88,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "riscv64") else() set(TOOLCHAIN "riscv64-linux-gnu") if(TIZEN) - set(TIZEN_TOOLCHAIN "riscv64-tizen-linux-gnu/13.1.0") + set(TIZEN_TOOLCHAIN "riscv64-tizen-linux-gnu") endif() endif() elseif(TARGET_ARCH_NAME STREQUAL "s390x") @@ -98,7 +105,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64") elseif(LINUX) set(TOOLCHAIN "x86_64-linux-gnu") if(TIZEN) - set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu/9.2.0") + set(TIZEN_TOOLCHAIN "x86_64-tizen-linux-gnu") endif() elseif(FREEBSD) set(triple "x86_64-unknown-freebsd12") @@ -115,10 +122,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") set(TOOLCHAIN "i686-linux-gnu") endif() if(TIZEN) - set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0") + set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu") endif() else() - message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, ppc64le, riscv64, s390x, x64 and x86 are supported!") + message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only arm, arm64, armel, armv6, loongarch64, ppc64le, riscv64, s390x, x64 and x86 are supported!") endif() if(DEFINED ENV{TOOLCHAIN}) @@ -127,32 +134,46 @@ endif() # Specify include paths if(TIZEN) - if(TARGET_ARCH_NAME STREQUAL "arm") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7hl-tizen-linux-gnueabihf) - endif() - if(TARGET_ARCH_NAME STREQUAL "armel") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/armv7l-tizen-linux-gnueabi) - endif() - if(TARGET_ARCH_NAME STREQUAL "arm64") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/aarch64-tizen-linux-gnu) - endif() - if(TARGET_ARCH_NAME STREQUAL "x86") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}/include/c++/i586-tizen-linux-gnu) - endif() - if(TARGET_ARCH_NAME STREQUAL "x64") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/x86_64-tizen-linux-gnu) - endif() - if(TARGET_ARCH_NAME STREQUAL "riscv64") - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/) - include_directories(SYSTEM ${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}/include/c++/riscv64-tizen-linux-gnu) + function(find_toolchain_dir prefix) + # Dynamically find the version subdirectory + file(GLOB DIRECTORIES "${prefix}/*") + list(GET DIRECTORIES 0 FIRST_MATCH) + get_filename_component(TOOLCHAIN_VERSION ${FIRST_MATCH} NAME) + + set(TIZEN_TOOLCHAIN_PATH "${prefix}/${TOOLCHAIN_VERSION}" PARENT_SCOPE) + endfunction() + + if(TARGET_ARCH_NAME MATCHES "^(arm|armel|x86)$") + find_toolchain_dir("${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + else() + find_toolchain_dir("${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") endif() + + message(STATUS "TIZEN_TOOLCHAIN_PATH set to: ${TIZEN_TOOLCHAIN_PATH}") + + include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++) + include_directories(SYSTEM ${TIZEN_TOOLCHAIN_PATH}/include/c++/${TIZEN_TOOLCHAIN}) endif() +function(locate_toolchain_exec exec var) + set(TOOLSET_PREFIX ${TOOLCHAIN}-) + string(TOUPPER ${exec} EXEC_UPPERCASE) + if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") + set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) + return() + endif() + + find_program(EXEC_LOCATION_${exec} + NAMES + "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" + "${TOOLSET_PREFIX}${exec}") + + if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") + message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") + endif() + set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) +endfunction() + if(ANDROID) if(TARGET_ARCH_NAME STREQUAL "arm") set(ANDROID_ABI armeabi-v7a) @@ -183,66 +204,24 @@ elseif(FREEBSD) set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=lld") elseif(ILLUMOS) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") + set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") include_directories(SYSTEM ${CROSS_ROOTFS}/include) - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") - locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") elseif(HAIKU) set(CMAKE_SYSROOT "${CROSS_ROOTFS}") set(CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH};${CROSS_ROOTFS}/cross-tools-x86_64/bin") - - set(TOOLSET_PREFIX ${TOOLCHAIN}-) - function(locate_toolchain_exec exec var) - string(TOUPPER ${exec} EXEC_UPPERCASE) - if(NOT "$ENV{CLR_${EXEC_UPPERCASE}}" STREQUAL "") - set(${var} "$ENV{CLR_${EXEC_UPPERCASE}}" PARENT_SCOPE) - return() - endif() - - find_program(EXEC_LOCATION_${exec} - NAMES - "${TOOLSET_PREFIX}${exec}${CLR_CMAKE_COMPILER_FILE_NAME_VERSION}" - "${TOOLSET_PREFIX}${exec}") - - if (EXEC_LOCATION_${exec} STREQUAL "EXEC_LOCATION_${exec}-NOTFOUND") - message(FATAL_ERROR "Unable to find toolchain executable. Name: ${exec}, Prefix: ${TOOLSET_PREFIX}.") - endif() - set(${var} ${EXEC_LOCATION_${exec}} PARENT_SCOPE) - endfunction() - set(CMAKE_SYSTEM_PREFIX_PATH "${CROSS_ROOTFS}") + set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") locate_toolchain_exec(gcc CMAKE_C_COMPILER) locate_toolchain_exec(g++ CMAKE_CXX_COMPILER) - set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} -lssp") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lssp") - # let CMake set up the correct search paths include(Platform/Haiku) else() @@ -272,21 +251,21 @@ endif() if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$") if(TIZEN) - add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib") - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}") endif() elseif(TARGET_ARCH_NAME MATCHES "^(arm64|x64|riscv64)$") if(TIZEN) - add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib64") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64") - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}") add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/lib64") add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64") - add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-Wl,--rpath-link=${TIZEN_TOOLCHAIN_PATH}") endif() elseif(TARGET_ARCH_NAME STREQUAL "s390x") add_toolchain_linker_flag("--target=${TOOLCHAIN}") @@ -297,10 +276,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") endif() add_toolchain_linker_flag(-m32) if(TIZEN) - add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-B${TIZEN_TOOLCHAIN_PATH}") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib") - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_toolchain_linker_flag("-L${TIZEN_TOOLCHAIN_PATH}") endif() elseif(ILLUMOS) add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64") @@ -312,7 +291,7 @@ endif() # Specify compile options -if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) +if((TARGET_ARCH_NAME MATCHES "^(arm|arm64|armel|armv6|loongarch64|ppc64le|riscv64|s390x|x64|x86)$" AND NOT ANDROID AND NOT FREEBSD) OR ILLUMOS OR HAIKU) set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_CXX_COMPILER_TARGET ${TOOLCHAIN}) set(CMAKE_ASM_COMPILER_TARGET ${TOOLCHAIN}) diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 36dbd45e1ce8..e889f439b8dc 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -68,7 +68,7 @@ function InstallDarcCli { fi fi - local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/eng/common/dotnet.cmd b/eng/common/dotnet.cmd new file mode 100644 index 000000000000..527fa4bb38fb --- /dev/null +++ b/eng/common/dotnet.cmd @@ -0,0 +1,7 @@ +@echo off + +:: This script is used to install the .NET SDK. +:: It will also invoke the SDK with any provided arguments. + +powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0dotnet.ps1""" %*" +exit /b %ErrorLevel% diff --git a/eng/common/dotnet.ps1 b/eng/common/dotnet.ps1 new file mode 100644 index 000000000000..45e5676c9ebd --- /dev/null +++ b/eng/common/dotnet.ps1 @@ -0,0 +1,11 @@ +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +. $PSScriptRoot\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true + +# Invoke acquired SDK with args if they are provided +if ($args.count -gt 0) { + $env:DOTNET_NOLOGO=1 + & "$dotnetRoot\dotnet.exe" $args +} diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh new file mode 100755 index 000000000000..2ef68235675f --- /dev/null +++ b/eng/common/dotnet.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# This script is used to install the .NET SDK. +# It will also invoke the SDK with any provided arguments. + +source="${BASH_SOURCE[0]}" +# resolve $SOURCE until the file is no longer a symlink +while [[ -h $source ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +source $scriptroot/tools.sh +InitializeDotNetCli true # install + +# Invoke acquired SDK with args if they are provided +if [[ $# > 0 ]]; then + __dotnetDir=${_InitializeDotNetCli} + dotnetPath=${__dotnetDir}/dotnet + ${dotnetPath} "$@" +fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/generate-sbom-prep.ps1 b/eng/common/generate-sbom-prep.ps1 index 3e5c1c74a1c5..a0c7d792a76f 100644 --- a/eng/common/generate-sbom-prep.ps1 +++ b/eng/common/generate-sbom-prep.ps1 @@ -4,18 +4,26 @@ Param( . $PSScriptRoot\pipeline-logging-functions.ps1 +# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly +# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. +$ArtifactName = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" +$SafeArtifactName = $ArtifactName -replace '["/:<>\\|?@*"() ]', '_' +$SbomGenerationDir = Join-Path $ManifestDirPath $SafeArtifactName + +Write-Host "Artifact name before : $ArtifactName" +Write-Host "Artifact name after : $SafeArtifactName" + Write-Host "Creating dir $ManifestDirPath" + # create directory for sbom manifest to be placed -if (!(Test-Path -path $ManifestDirPath)) +if (!(Test-Path -path $SbomGenerationDir)) { - New-Item -ItemType Directory -path $ManifestDirPath - Write-Host "Successfully created directory $ManifestDirPath" + New-Item -ItemType Directory -path $SbomGenerationDir + Write-Host "Successfully created directory $SbomGenerationDir" } else{ Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." } Write-Host "Updating artifact name" -$artifact_name = "${env:SYSTEM_STAGENAME}_${env:AGENT_JOBNAME}_SBOM" -replace '["/:<>\\|?@*"() ]', '_' -Write-Host "Artifact name $artifact_name" -Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$artifact_name" +Write-Host "##vso[task.setvariable variable=ARTIFACT_NAME]$SafeArtifactName" diff --git a/eng/common/generate-sbom-prep.sh b/eng/common/generate-sbom-prep.sh old mode 100644 new mode 100755 index d5c76dc827b4..b8ecca72bbf5 --- a/eng/common/generate-sbom-prep.sh +++ b/eng/common/generate-sbom-prep.sh @@ -14,19 +14,24 @@ done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" . $scriptroot/pipeline-logging-functions.sh + +# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts. +artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM" +safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}" manifest_dir=$1 -if [ ! -d "$manifest_dir" ] ; then - mkdir -p "$manifest_dir" - echo "Sbom directory created." $manifest_dir +# Normally - we'd listen to the manifest path given, but 1ES templates will overwrite if this level gets uploaded directly +# with their own overwriting ours. So we create it as a sub directory of the requested manifest path. +sbom_generation_dir="$manifest_dir/$safe_artifact_name" + +if [ ! -d "$sbom_generation_dir" ] ; then + mkdir -p "$sbom_generation_dir" + echo "Sbom directory created." $sbom_generation_dir else Write-PipelineTelemetryError -category 'Build' "Unable to create sbom folder." fi -artifact_name=$SYSTEM_STAGENAME"_"$AGENT_JOBNAME"_SBOM" echo "Artifact name before : "$artifact_name -# replace all special characters with _, some builds use special characters like : in Agent.Jobname, that is not a permissible name while uploading artifacts. -safe_artifact_name="${artifact_name//["/:<>\\|?@*$" ]/_}" echo "Artifact name after : "$safe_artifact_name export ARTIFACT_NAME=$safe_artifact_name echo "##vso[task.setvariable variable=ARTIFACT_NAME]$safe_artifact_name" diff --git a/eng/common/internal/NuGet.config b/eng/common/internal/NuGet.config index 19d3d311b166..f70261ed689b 100644 --- a/eng/common/internal/NuGet.config +++ b/eng/common/internal/NuGet.config @@ -4,4 +4,7 @@ + + + diff --git a/eng/common/internal/Tools.csproj b/eng/common/internal/Tools.csproj index 32f79dfb3402..feaa6d20812d 100644 --- a/eng/common/internal/Tools.csproj +++ b/eng/common/internal/Tools.csproj @@ -15,16 +15,6 @@ - - - - https://devdiv.pkgs.visualstudio.com/_packaging/dotnet-core-internal-tooling/nuget/v3/index.json; - - - $(RestoreSources); - https://devdiv.pkgs.visualstudio.com/_packaging/VS/nuget/v3/index.json; - - diff --git a/eng/common/native/install-dependencies.sh b/eng/common/native/install-dependencies.sh new file mode 100755 index 000000000000..477a44f335be --- /dev/null +++ b/eng/common/native/install-dependencies.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +set -e + +# This is a simple script primarily used for CI to install necessary dependencies +# +# Usage: +# +# ./install-dependencies.sh + +os="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + +if [ -z "$os" ]; then + . "$(dirname "$0")"/init-os-and-arch.sh +fi + +case "$os" in + linux) + if [ -e /etc/os-release ]; then + . /etc/os-release + fi + + if [ "$ID" = "debian" ] || [ "$ID_LIKE" = "debian" ]; then + apt update + + apt install -y build-essential gettext locales cmake llvm clang lld lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \ + libssl-dev libkrb5-dev pigz cpio + + localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 + elif [ "$ID" = "fedora" ] || [ "$ID" = "rhel" ] || [ "$ID" = "azurelinux" ]; then + pkg_mgr="$(command -v tdnf 2>/dev/null || command -v dnf)" + $pkg_mgr install -y cmake llvm lld lldb clang python curl libicu-devel openssl-devel krb5-devel lttng-ust-devel pigz cpio + elif [ "$ID" = "alpine" ]; then + apk add build-base cmake bash curl clang llvm-dev lld lldb krb5-dev lttng-ust-dev icu-dev openssl-dev pigz cpio + else + echo "Unsupported distro. distro: $ID" + exit 1 + fi + ;; + + osx|maccatalyst|ios|iossimulator|tvos|tvossimulator) + echo "Installed xcode version: $(xcode-select -p)" + + export HOMEBREW_NO_INSTALL_CLEANUP=1 + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 + # Skip brew update for now, see https://github.com/actions/setup-python/issues/577 + # brew update --preinstall + brew bundle --no-upgrade --file=- < Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludeCIBinaryLog When running on CI, allow no binary log (short: -nobl)" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." } @@ -34,10 +37,11 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" + $binaryLogArg = if ($binaryLog) { "/bl:$log" } else { "" } $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` - /bl:$log ` + $binaryLogArg ` /t:$target ` /p:Configuration=$configuration ` /p:RepoRoot=$RepoRoot ` @@ -64,7 +68,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.10.0-pre.4.0" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.13.0" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh new file mode 100755 index 000000000000..3270f83fa9a7 --- /dev/null +++ b/eng/common/sdk-task.sh @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +show_usage() { + echo "Common settings:" + echo " --task Name of Arcade task (name of a project in SdkTasks directory of the Arcade SDK package)" + echo " --restore Restore dependencies" + echo " --verbosity Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]" + echo " --help Print help and exit" + echo "" + + echo "Advanced settings:" + echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" + echo "" + echo "Command line arguments not listed above are passed thru to msbuild." +} + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +Build() { + local target=$1 + local log_suffix="" + [[ "$target" != "Execute" ]] && log_suffix=".$target" + local log="$log_dir/$task$log_suffix.binlog" + local binaryLogArg="" + [[ $binary_log == true ]] && binaryLogArg="/bl:$log" + local output_path="$toolset_dir/$task/" + + MSBuild "$taskProject" \ + $binaryLogArg \ + /t:"$target" \ + /p:Configuration="$configuration" \ + /p:RepoRoot="$repo_root" \ + /p:BaseIntermediateOutputPath="$output_path" \ + /v:"$verbosity" \ + $properties +} + +binary_log=true +configuration="Debug" +verbosity="minimal" +exclude_ci_binary_log=false +restore=false +help=false +properties='' +warnAsError=true + +while (($# > 0)); do + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + case $lowerI in + --task) + task=$2 + shift 2 + ;; + --restore) + restore=true + shift 1 + ;; + --verbosity) + verbosity=$2 + shift 2 + ;; + --excludecibinarylog|--nobl) + binary_log=false + exclude_ci_binary_log=true + shift 1 + ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; + --help) + help=true + shift 1 + ;; + *) + properties="$properties $1" + shift 1 + ;; + esac +done + +ci=true + +if $help; then + show_usage + exit 0 +fi + +. "$scriptroot/tools.sh" +InitializeToolset + +if [[ -z "$task" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'MissingTask' -Message "Missing required parameter '-task '" + ExitWithExitCode 1 +fi + +taskProject=$(GetSdkTaskProject "$task") +if [[ ! -e "$taskProject" ]]; then + Write-PipelineTelemetryError -Category 'Task' -Name 'UnknownTask' -Message "Unknown task: $task" + ExitWithExitCode 1 +fi + +if $restore; then + Build "Restore" +fi + +Build "Execute" + + +ExitWithExitCode 0 diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 4585cfd6bba1..e5f543ea68c2 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index 5ef6c30ba924..4bf4cf41bd7c 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -50,14 +50,14 @@ extends: - task: CopyFiles@2 displayName: Gather build output inputs: - SourceFolder: '$(Build.SourcesDirectory)/artifacts/marvel' + SourceFolder: '$(System.DefaultWorkingDirectory)/artifacts/marvel' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/marvel' ``` Note: Multiple outputs are ONLY applicable to 1ES PT publishing (only usable when referencing `templates-official`). -# Development notes +## Development notes **Folder / file structure** diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index 3d16b41c78c1..92a0664f5647 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -1,8 +1,9 @@ parameters: # Sbom related params enableSbom: true + runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml @@ -15,6 +16,7 @@ jobs: parameters: PackageVersion: ${{ parameters.packageVersion }} BuildDropPath: ${{ parameters.buildDropPath }} + ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom publishArtifacts: false # publish artifacts @@ -29,6 +31,7 @@ jobs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts' ArtifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked continueOnError: true - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - output: pipelineArtifact @@ -37,6 +40,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if eq(parameters.enablePublishBuildArtifacts, true) }}: @@ -44,7 +48,7 @@ jobs: displayName: Publish Logs PathtoPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + ArtifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() sbomEnabled: false # we don't need SBOM for logs diff --git a/eng/common/templates-official/steps/publish-build-artifacts.yml b/eng/common/templates-official/steps/publish-build-artifacts.yml index 100a3fc98493..fcf6637b2ebc 100644 --- a/eng/common/templates-official/steps/publish-build-artifacts.yml +++ b/eng/common/templates-official/steps/publish-build-artifacts.yml @@ -24,6 +24,10 @@ parameters: - name: is1ESPipeline type: boolean default: true + +- name: retryCountOnTaskFailure + type: string + default: 10 steps: - ${{ if ne(parameters.is1ESPipeline, true) }}: @@ -38,4 +42,5 @@ steps: PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: ArtifactName: ${{ parameters.artifactName }} - + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates-official/steps/source-index-stage1-publish.yml b/eng/common/templates-official/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..9b8b80942b5c --- /dev/null +++ b/eng/common/templates-official/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: true + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml index dbdd66d4a4b3..f1311bbb1b33 100644 --- a/eng/common/templates-official/variables/sdl-variables.yml +++ b/eng/common/templates-official/variables/sdl-variables.yml @@ -4,4 +4,4 @@ variables: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config \ No newline at end of file + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config \ No newline at end of file diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 07d317bf8f9a..238fa0818f7b 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -4,8 +4,9 @@ parameters: componentGovernanceIgnoreDirectories: '' # Sbom related params enableSbom: true + runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml @@ -45,6 +46,7 @@ jobs: artifactName: ${{ coalesce(parameters.artifacts.publish.artifacts.name , 'Artifacts_$(Agent.Os)_$(_BuildConfig)') }} continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked - ${{ if and(ne(parameters.artifacts.publish.logs, 'false'), ne(parameters.artifacts.publish.logs, '')) }}: - template: /eng/common/core-templates/steps/publish-pipeline-artifacts.yml parameters: @@ -55,6 +57,7 @@ jobs: displayName: 'Publish logs' continueOnError: true condition: always() + retryCountOnTaskFailure: 10 # for any logs being locked sbomEnabled: false # we don't need SBOM for logs - ${{ if ne(parameters.enablePublishBuildArtifacts, 'false') }}: @@ -65,7 +68,7 @@ jobs: displayName: Publish Logs pathToPublish: '$(Build.ArtifactStagingDirectory)/artifacts/log/$(_BuildConfig)' publishLocation: Container - artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)' ) }} + artifactName: ${{ coalesce(parameters.enablePublishBuildArtifacts.artifactName, '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)' ) }} continueOnError: true condition: always() @@ -74,7 +77,7 @@ jobs: parameters: is1ESPipeline: false args: - targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration' + targetPath: '$(System.DefaultWorkingDirectory)\eng\common\BuildConfiguration' artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true diff --git a/eng/common/templates/steps/publish-build-artifacts.yml b/eng/common/templates/steps/publish-build-artifacts.yml index 6428a98dfef6..605e602e94d1 100644 --- a/eng/common/templates/steps/publish-build-artifacts.yml +++ b/eng/common/templates/steps/publish-build-artifacts.yml @@ -25,6 +25,10 @@ parameters: type: string default: 'Container' +- name: retryCountOnTaskFailure + type: string + default: 10 + steps: - ${{ if eq(parameters.is1ESPipeline, true) }}: - 'eng/common/templates cannot be referenced from a 1ES managed template': error @@ -37,4 +41,6 @@ steps: PublishLocation: ${{ parameters.publishLocation }} PathtoPublish: ${{ parameters.pathToPublish }} ${{ if parameters.artifactName }}: - ArtifactName: ${{ parameters.artifactName }} \ No newline at end of file + ArtifactName: ${{ parameters.artifactName }} + ${{ if parameters.retryCountOnTaskFailure }}: + retryCountOnTaskFailure: ${{ parameters.retryCountOnTaskFailure }} diff --git a/eng/common/templates/steps/source-index-stage1-publish.yml b/eng/common/templates/steps/source-index-stage1-publish.yml new file mode 100644 index 000000000000..182cec33a7bb --- /dev/null +++ b/eng/common/templates/steps/source-index-stage1-publish.yml @@ -0,0 +1,7 @@ +steps: +- template: /eng/common/core-templates/steps/source-index-stage1-publish.yml + parameters: + is1ESPipeline: false + + ${{ each parameter in parameters }}: + ${{ parameter.key }}: ${{ parameter.value }} diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..599afb6186b8 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,207 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + vmr_sha=$(grep -oP '(?<=Sha=")[^"]*' $(Agent.BuildDirectory)/repo/eng/Version.Details.xml) + echo "##vso[task.setvariable variable=vmr_sha]$vmr_sha" + displayName: Obtain the vmr sha from Version.Details.xml (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- powershell: | + [xml]$xml = Get-Content -Path $(Agent.BuildDirectory)/repo/eng/Version.Details.xml + $vmr_sha = $xml.SelectSingleNode("//Source").Sha + Write-Output "##vso[task.setvariable variable=vmr_sha]$vmr_sha" + displayName: Obtain the vmr sha from Version.Details.xml (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git fetch --all + git checkout $(vmr_sha) + displayName: Checkout VMR at correct sha for repo flow + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..ce3c29a62faf --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,42 @@ +# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs. +# +# It will run a full set of verification jobs defined in: +# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38 +# +# For repos that do not need to run the full set, you would do the following: +# +# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common. +# +# 2. Add `verifications` parameter to VMR template reference +# +# Examples: +# - For source-build stage 1 verification, add the following: +# verifications: [ "source-build-stage1" ] +# +# - For Windows only verifications, add the following: +# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ] + +trigger: none +pr: none + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 9574f4eb9df0..06b44de78709 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -42,7 +42,7 @@ [bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true } # Enable repos to use a particular version of the on-line dotnet-install scripts. -# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.ps1 +# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.ps1 [string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { 'v1' } # True to use global NuGet cache instead of restoring packages to repository-local directory. @@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop' # Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed [string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null } -# True if the build is a product build -[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false } - -[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() } +# True when the build is running within the VMR. +[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false } function Create-Directory ([string[]] $path) { New-Item -Path $path -Force -ItemType 'Directory' | Out-Null @@ -259,10 +257,23 @@ function Retry($downloadBlock, $maxRetries = 5) { function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' + $shouldDownload = $false + if (!(Test-Path $installScript)) { + $shouldDownload = $true + } else { + # Check if the script is older than 30 days + $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime + if ($fileAge.Days -gt 30) { + Write-Host "Existing install script is too old, re-downloading..." + $shouldDownload = $true + } + } + + if ($shouldDownload) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit - $uri = "https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" + $uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1" Retry({ Write-Host "GET $uri" @@ -320,7 +331,7 @@ function InstallDotNet([string] $dotnetRoot, $variations += @($installParameters) $dotnetBuilds = $installParameters.Clone() - $dotnetbuilds.AzureFeed = "https://dotnetbuilds.azureedge.net/public" + $dotnetbuilds.AzureFeed = "https://ci.dot.net/public" $variations += @($dotnetBuilds) if ($runtimeSourceFeed) { @@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.10.0-pre.4.0 - $defaultXCopyMSBuildVersion = '17.10.0-pre.4.0' + # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.13.0 + $defaultXCopyMSBuildVersion = '17.13.0' if (!$vsRequirements) { if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') { @@ -416,7 +427,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # Locate Visual Studio installation or download x-copy msbuild. $vsInfo = LocateVisualStudio $vsRequirements - if ($vsInfo -ne $null) { + if ($vsInfo -ne $null -and $env:ForceUseXCopyMSBuild -eq $null) { # Ensure vsInstallDir has a trailing slash $vsInstallDir = Join-Path $vsInfo.installationPath "\" $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] @@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe }) @@ -604,14 +617,7 @@ function InitializeBuildTool() { } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - # Use override if it exists - commonly set by source-build - if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) { - $initializeBuildToolFramework="net9.0" - } else { - $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework - } - - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -620,7 +626,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "netframework"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -653,7 +659,6 @@ function GetNuGetPackageCachePath() { $env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\' } else { $env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\' - $env:RESTORENOHTTPCACHE = $true } } @@ -775,26 +780,13 @@ function MSBuild() { $toolsetBuildProject = InitializeToolset $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net7.0 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } + $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll') + if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 } + $args += "/logger:$selectedPath" } @@ -857,8 +849,8 @@ function MSBuild-Core() { } # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) { + # Skip this when the build is a child of the VMR build. + if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) { Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -900,7 +892,7 @@ function IsWindowsPlatform() { } function Get-Darc($version) { - $darcPath = "$TempDir\darc\$(New-Guid)" + $darcPath = "$TempDir\darc\$([guid]::NewGuid())" if ($version -ne $null) { & $PSScriptRoot\darc-init.ps1 -toolpath $darcPath -darcVersion $version | Out-Host } else { diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 00473c9f918d..c1841c9dfd0f 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -5,6 +5,9 @@ # CI mode - set to true on CI server for PR validation build or official build. ci=${ci:-false} +# Build mode +source_build=${source_build:-false} + # Set to true to use the pipelines logger which will enable Azure logging output. # https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md # This flag is meant as a temporary opt-opt for the feature while validate it across @@ -54,11 +57,12 @@ warn_as_error=${warn_as_error:-true} use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} # Enable repos to use a particular version of the on-line dotnet-install scripts. -# default URL: https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh +# default URL: https://builds.dotnet.microsoft.com/dotnet/scripts/v1/dotnet-install.sh dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} # True to use global NuGet cache instead of restoring packages to repository-local directory. -if [[ "$ci" == true ]]; then +# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props. +if [[ "$ci" == true || "$source_build" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} else use_global_nuget_cache=${use_global_nuget_cache:-true} @@ -68,8 +72,8 @@ fi runtime_source_feed=${runtime_source_feed:-''} runtime_source_feed_key=${runtime_source_feed_key:-''} -# True if the build is a product build -product_build=${product_build:-false} +# True when the build is running within the VMR. +from_vmr=${from_vmr:-false} # Resolve any symlinks in the given path. function ResolvePath { @@ -232,7 +236,7 @@ function InstallDotNet { local public_location=("${installParameters[@]}") variations+=(public_location) - local dotnetbuilds=("${installParameters[@]}" --azure-feed "https://dotnetbuilds.azureedge.net/public") + local dotnetbuilds=("${installParameters[@]}" --azure-feed "https://ci.dot.net/public") variations+=(dotnetbuilds) if [[ -n "${6:-}" ]]; then @@ -295,9 +299,30 @@ function with_retries { function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" - local install_script_url="https://dotnet.microsoft.com/download/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh" + local timestamp_file="$root/.dotnet-install.timestamp" + local should_download=false if [[ ! -a "$install_script" ]]; then + should_download=true + elif [[ -f "$timestamp_file" ]]; then + # Check if the script is older than 30 days using timestamp file + local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0") + local current_time=$(date +%s) + local age_seconds=$((current_time - download_time)) + + # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds + if [[ $age_seconds -gt 2592000 ]]; then + echo "Existing install script is too old, re-downloading..." + should_download=true + fi + else + # No timestamp file exists, assume script is old and re-download + echo "No timestamp found for existing install script, re-downloading..." + should_download=true + fi + + if [[ "$should_download" == true ]]; then mkdir -p "$root" echo "Downloading '$install_script_url'" @@ -324,6 +349,9 @@ function GetDotNetInstallScript { ExitWithExitCode $exit_code } fi + + # Create timestamp file to track download time in seconds from epoch + date +%s > "$timestamp_file" fi # return value _GetDotNetInstallScript="$install_script" @@ -339,22 +367,14 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - # use override if it exists - commonly set by source-build - if [[ "${_OverrideArcadeInitializeBuildToolFramework:-x}" == "x" ]]; then - _InitializeBuildToolFramework="net9.0" - else - _InitializeBuildToolFramework="${_OverrideArcadeInitializeBuildToolFramework}" - fi } -# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116 function GetNuGetPackageCachePath { if [[ -z ${NUGET_PACKAGES:-} ]]; then if [[ "$use_global_nuget_cache" == true ]]; then export NUGET_PACKAGES="$HOME/.nuget/packages/" else export NUGET_PACKAGES="$repo_root/.packages/" - export RESTORENOHTTPCACHE=true fi fi @@ -451,25 +471,13 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net7.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done + local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" + if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath" ExitWithExitCode 1 fi + args+=( "-logger:$selectedPath" ) fi @@ -506,8 +514,8 @@ function MSBuild-Core { echo "Build failed with exit code $exit_code. Check errors above." # When running on Azure Pipelines, override the returned exit code to avoid double logging. - # Skip this when the build is a child of the VMR orchestrator build. - if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then + # Skip this when the build is a child of the VMR build. + if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then Write-PipelineSetResult -result "Failed" -message "msbuild execution failed." # Exiting with an exit code causes the azure pipelines task to log yet another "noise" error # The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error @@ -530,6 +538,13 @@ function GetDarc { fi "$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version + darc_tool="$darc_path/darc" +} + +# Returns a full path to an Arcade SDK task project file. +function GetSdkTaskProject { + taskName=$1 + echo "$(dirname $_InitializeToolset)/SdkTasks/$taskName.proj" } ResolvePath "${BASH_SOURCE[0]}" diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..97302f3205be --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,138 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$darc = Get-Darc +$dotnet = "$dotnetRoot\dotnet.exe" + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$darcArgs = ( + "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$darc" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..44239e331c0c --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,207 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +GetDarc +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +export DOTNET_ROOT="$dotnetDir" + +"$darc_tool" vmr forwardflow \ + --tmp "$tmp_dir" \ + $azdev_pat \ + --$verbosity \ + $ci_arg \ + $additional_remotes \ + "$vmr_dir" + +if [[ $? == 0 ]]; then + highlight "Synchronization succeeded" +else + fail "Synchronization of repo to VMR failed!" + fail "'$vmr_dir' is left in its last state (re-run of this script will reset it)." + fail "Please inspect the logs which contain path to the failing patch file (use --debug to get all the details)." + fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 +fi diff --git a/eng/configure-toolset.sh b/eng/configure-toolset.sh index 4d6e51f58de1..776adaa0d0a2 100755 --- a/eng/configure-toolset.sh +++ b/eng/configure-toolset.sh @@ -2,7 +2,7 @@ # We could potentially try to find an existing installation that has all the required runtimes, # but it's unlikely one will be available. -if [ "${DotNetBuild:-false}" = false ]; then +if [ "$product_build" = false ]; then use_installed_dotnet_cli="false" fi diff --git a/eng/helix/helix.proj b/eng/helix/helix.proj index f31e201d516e..e3d34a926045 100644 --- a/eng/helix/helix.proj +++ b/eng/helix/helix.proj @@ -6,6 +6,7 @@ This must be reset in order for Build.props to evaluate a list of projects to be tested on Helix. --> + $(RepoRoot)src\ProjectTemplates\test\**\*.csproj - + runtime - $([System.Environment]::GetEnvironmentVariable('DotNetBuildsInternalReadSasToken')) - $([System.Environment]::GetEnvironmentVariable('DotNetBuildsInternalReadSasToken')) @@ -74,7 +75,7 @@ - @@ -118,14 +119,12 @@ the current versions. --> - - + + - @(_ResolvedProductVersionInfo->'%(PackageVersion)') <_AppRefSubPath>$([System.IO.Path]::Combine('packs', 'Microsoft.AspNetCore.App.Ref', '$(SharedFxVersion)')) <_AppRuntimeSubPath>$([System.IO.Path]::Combine('shared', 'Microsoft.AspNetCore.App', '$(SharedFxVersion)')) <_AppRefPath>$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts', 'obj', 'TargetingPack.Layout', '$(Configuration)', '$(_AppRefSubPath)')) diff --git a/eng/scripts/CodeCheck.ps1 b/eng/scripts/CodeCheck.ps1 index 61217486f190..90e04810f19f 100644 --- a/eng/scripts/CodeCheck.ps1 +++ b/eng/scripts/CodeCheck.ps1 @@ -107,65 +107,8 @@ try { "Packages in package-lock.json file resolved from wrong registry. All dependencies must be resolved from $registry" } - # - # Versions.props and Version.Details.xml - # - - Write-Host "Checking that Versions.props and Version.Details.xml match" - [xml] $versionProps = Get-Content "$repoRoot/eng/Versions.props" - [xml] $versionDetails = Get-Content "$repoRoot/eng/Version.Details.xml" - $globalJson = Get-Content $repoRoot/global.json | ConvertFrom-Json - - $versionVars = New-Object 'System.Collections.Generic.HashSet[string]' - foreach ($vars in $versionProps.SelectNodes("//PropertyGroup[`@Label=`"Automated`"]/*")) { - $versionVars.Add($vars.Name) | Out-Null - } - - foreach ($dep in $versionDetails.SelectNodes('//Dependency')) { - Write-Verbose "Found $dep" - - $expectedVersion = $dep.Version - - if ($dep.Name -in $globalJson.'msbuild-sdks'.PSObject.Properties.Name) { - $actualVersion = $globalJson.'msbuild-sdks'.($dep.Name) - - if ($expectedVersion -ne $actualVersion) { - LogError -filepath "$repoRoot\global.json" ` - ("MSBuild SDK version '$($dep.Name)' in global.json does not match the value in " + - "Version.Details.xml. Expected '$expectedVersion', actual '$actualVersion'") - } - } - else { - $varName = $dep.Name -replace '\.','' - $varName = $varName -replace '\-','' - $varName = "${varName}Version" - - $versionVar = $versionProps.SelectSingleNode("//PropertyGroup[`@Label=`"Automated`"]/$varName") - $actualVersion = $versionVar.InnerText - $versionVars.Remove($varName) | Out-Null - - if (-not $versionVar) { - LogError "Missing version variable '$varName' in the 'Automated' property group in $repoRoot/eng/Versions.props" - continue - } - - if ($expectedVersion -ne $actualVersion) { - LogError -filepath "$repoRoot\eng\Versions.props" ` - ("Version variable '$varName' does not match the value in Version.Details.xml. " + - "Expected '$expectedVersion', actual '$actualVersion'") - } - } - } - - foreach ($unexpectedVar in $versionVars) { - LogError -Filepath "$repoRoot\eng\Versions.props" ` - ("Version variable '$unexpectedVar' does not have a matching entry in Version.Details.xml. " + - "See https://github.com/dotnet/aspnetcore/blob/main/docs/ReferenceResolution.md for instructions " + - "on how to add a new dependency.") - } - # ComponentsWebAssembly-CSharp.sln is used by the templating engine; MessagePack.sln is irrelevant (in submodule). - $solution = Get-ChildItem "$repoRoot/AspNetCore.sln" + $solution = Get-ChildItem "$repoRoot/AspNetCore.slnx" $solutionFile = Split-Path -Leaf $solution Write-Host "Checking that $solutionFile is up to date" diff --git a/eng/scripts/InstallGoogleChrome.ps1 b/eng/scripts/InstallGoogleChrome.ps1 index 2159c7de09d1..c62dbb2535cf 100644 --- a/eng/scripts/InstallGoogleChrome.ps1 +++ b/eng/scripts/InstallGoogleChrome.ps1 @@ -1,4 +1,4 @@ $InstallerPath = "$env:Temp\chrome_installer.exe"; -& $PSScriptRoot\Download.ps1 "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" $InstallerPath +& $PSScriptRoot\Download.ps1 "https://dl.google.com/chrome/install/latest/chrome_installer.exe" $InstallerPath Start-Process -FilePath $InstallerPath -Args "/silent /install" -Verb RunAs -Wait; Remove-Item $InstallerPath diff --git a/eng/scripts/InstallJdk.ps1 b/eng/scripts/InstallJdk.ps1 index 0872f241a982..35dc6c8d9e0f 100644 --- a/eng/scripts/InstallJdk.ps1 +++ b/eng/scripts/InstallJdk.ps1 @@ -22,8 +22,7 @@ $installDir = "$repoRoot\.tools\jdk\win-x64\" $javacExe = "$installDir\bin\javac.exe" $tempDir = "$repoRoot\obj" if (-not $JdkVersion) { - $globalJson = Get-Content "$repoRoot\global.json" | ConvertFrom-Json - $JdkVersion = $globalJson.'native-tools'.jdk + $JdkVersion = "11.0.24" } if (Test-Path $javacExe) { @@ -46,7 +45,7 @@ Expand-Archive "$tempDir/jdk.zip" -d "$tempDir/jdk/" Write-Host "Expanded JDK to $tempDir" Write-Host "Installing JDK to $installDir" # The name of the file directory within the zip is based on the version, but may contain a +N for build number. -Move-Item "$(Get-ChildItem -Path "$tempDir/jdk" | Select-Object -First 1)/*" $installDir +Move-Item "$(Get-ChildItem -Path "$tempDir/jdk" | Select-Object -First 1 -ExpandProperty FullName)/*" $installDir Write-Host "Done installing JDK to $installDir" if ($env:TF_BUILD) { diff --git a/eng/scripts/install-nginx-mac.sh b/eng/scripts/install-nginx-mac.sh deleted file mode 100755 index e7df86f57c0a..000000000000 --- a/eng/scripts/install-nginx-mac.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -brew update -brew list openssl || brew install openssl -brew list nginx || brew install nginx diff --git a/eng/scripts/install-nginx-linux.sh b/eng/scripts/install-nginx.sh similarity index 75% rename from eng/scripts/install-nginx-linux.sh rename to eng/scripts/install-nginx.sh index bbfb79c48203..23d71043ed19 100755 --- a/eng/scripts/install-nginx-linux.sh +++ b/eng/scripts/install-nginx.sh @@ -6,7 +6,7 @@ scriptroot="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" reporoot="$(dirname "$(dirname "$scriptroot")")" nginxinstall="$reporoot/.tools/nginx" -curl -sSL http://nginx.org/download/nginx-1.14.2.tar.gz --retry 5 | tar zxfv - -C /tmp && cd /tmp/nginx-1.14.2/ +curl -sSL http://nginx.org/download/nginx-1.29.1.tar.gz --retry 5 | tar zxfv - -C /tmp && cd /tmp/nginx-1.29.1/ ./configure --prefix=$nginxinstall --with-http_ssl_module --without-http_rewrite_module make make install diff --git a/eng/scripts/npm/update-dependency-versions.mjs b/eng/scripts/npm/update-dependency-versions.mjs index ce8b9b42c6d7..d4e2ebea88bf 100644 --- a/eng/scripts/npm/update-dependency-versions.mjs +++ b/eng/scripts/npm/update-dependency-versions.mjs @@ -45,6 +45,13 @@ function applyPackageVersion(packagesToPack, defaultPackageVersion) { const packageName = packageJson.name; const packageVersion = defaultPackageVersion; const packageDir = path.dirname(packagePath); + + // Check if the version is already correct + if (packageJson.version === packageVersion) { + console.log(`Skipping ${packageName} - version ${packageVersion} already applied.`); + continue; + } + // Run npm version packageVersion --no-git-tag-version // This will update the package.json version to the specified version without creating a git tag // Make a backup of the package.json @@ -52,9 +59,18 @@ function applyPackageVersion(packagesToPack, defaultPackageVersion) { renames.push([`${packagePath}.bak`, packagePath]); process.chdir(packageDir); - execSync(`npm version ${packageVersion} --no-git-tag-version`, { stdio: 'inherit' }); + try { + execSync(`npm version ${packageVersion} --no-git-tag-version --allow-same-version`, { stdio: 'inherit' }); + console.log(`Applied version ${packageVersion} to ${packageName} in ${packageDir}...`); + } catch (error) { + console.warn(`Failed to run npm version command for ${packageName}, falling back to manual version update...`); + // Fallback: manually update the version in package.json + const packageJson = fs.readJsonSync(packagePath); + packageJson.version = packageVersion; + fs.writeJsonSync(packagePath, packageJson, { spaces: 2 }); + console.log(`Manually applied version ${packageVersion} to ${packageName} in ${packageDir}...`); + } process.chdir(currentDir); - console.log(`Applied version ${packageVersion} to ${packageName} in ${packageDir}...`); } return renames; @@ -81,11 +97,16 @@ function updateDependencyVersions(packagesToPack) { // Find the dependency in packagesToPack, load the package.json and update the dependency version const dependencyPackage = seenPackagesAndVersions.find(([_, packageJson]) => packageJson.name === dependency); if (dependencyPackage) { - modified = true; const dependencyPackagePath = dependencyPackage[0]; const dependencyPackageJson = JSON.parse(fs.readFileSync(dependencyPackagePath, 'utf-8')); - dependencies[dependency] = `>=${dependencyPackageJson.version}`; - console.log(`Updated dependency ${dependency} to ${dependencyPackageJson.version} in ${packageJson.name}.`); + const newDependencyVersion = `>=${dependencyPackageJson.version}`; + + // Only update if the dependency version is actually different + if (dependencies[dependency] !== newDependencyVersion) { + modified = true; + dependencies[dependency] = newDependencyVersion; + console.log(`Updated dependency ${dependency} to ${dependencyPackageJson.version} in ${packageJson.name}.`); + } } } if (modified) { diff --git a/eng/scripts/update-npm-dependencies.ps1 b/eng/scripts/update-npm-dependencies.ps1 index 8b41b9f63994..f2070df6a129 100644 --- a/eng/scripts/update-npm-dependencies.ps1 +++ b/eng/scripts/update-npm-dependencies.ps1 @@ -9,8 +9,6 @@ param ( $ErrorActionPreference = "Stop" -$env:npm_config_cache = "$PWD/src/submodules/Node-Externals/cache" - Write-Host "Ensuring the repository is clean" if (-not $WhatIf) { git clean -xdff @@ -21,12 +19,6 @@ if (-not $WhatIf) { Remove-Item .\package-lock.json } -if (-not $SkipClearCache -and -not $WhatIf) { - Write-Host "Clearing the npm cache" - Remove-Item -Recurse -Force "$PWD/src/submodules/Node-Externals/cache" - New-Item -ItemType Directory -Path "$PWD/src/submodules/Node-Externals/cache" -} - try { Get-Command vsts-npm-auth -CommandType ExternalScript Write-Host "vsts-npm-auth is already installed" @@ -50,6 +42,7 @@ if (-not $WhatIf) { npm install --prefer-online --include optional } +# Add optional dependencies to the cache to ensure that they get mirrored Write-Host "Adding optional dependencies to the cache" $rollupOptionalDependencies = (Get-Content .\package-lock.json | ConvertFrom-Json -AsHashtable).packages['node_modules/rollup'].optionalDependencies | Select-Object '@rollup/rollup-*'; @@ -76,48 +69,18 @@ if ($null -ne $commonOptionalDependencyVersion) { } } -Write-Host "Verifying the cache" -if(-not $WhatIf) { - npm cache verify -} - -# Navigate to the Node-Externals submodule -# Checkout a branch named infrastructure/update-npm-package-cache- -# Stage the changes in the folder -# Commit the changes with the message "Updated npm package cache " -# Use the GH CLI to create a PR for the branch in the origin remote - -Push-Location src/submodules/Node-Externals -$branchName = "infrastructure/update-npm-package-cache-$(Get-Date -Format 'yyyy-MM-dd')" -if (-not $WhatIf) { - git branch -D $branchName 2>$null - git checkout -b $branchName - git add . - git commit -m "Updated npm package cache $(Get-Date -Format 'yyyy-MM-dd')" -} - -if ($WhatIf -or $SkipPullRequestCreation) { - Write-Host "Skipping pull request creation for Node-Externals submodule" -} -else { - Write-Host "Creating pull request for Node-Externals submodule" - git branch --set-upstream-to=origin/main - git push origin $branchName`:$branchName --force; - gh repo set-default dotnet/Node-Externals - gh pr create --base main --head "infrastructure/update-npm-package-cache-$(Get-Date -Format 'yyyy-MM-dd')" --title "[Infrastructure] Updated npm package cache $(Get-Date -Format 'yyyy-MM-dd')" --body "Do not merge this PR until the one in aspnetcore passes all checks." -} ## Navigate to the root of the repository -## Checkout a branch named infrastructure/update-npm-package-cache- +## Checkout a branch named infrastructure/update-npm-packages- ## Stage the changes in the folder -## Commit the changes with the message "Updated npm package cache " +## Commit the changes with the message "Updated npm packages " ## Use the GH CLI to create a PR for the branch in the origin remote -Pop-Location if(-not $WhatIf) { + $branchName = "infrastructure/update-npm-packages-$(Get-Date -Format 'yyyy-MM-dd')" git branch -D $branchName 2>$null git checkout -b $branchName git add . - git commit -m "Updated npm package cache $(Get-Date -Format 'yyyy-MM-dd')" + git commit -m "Updated npm packages $(Get-Date -Format 'yyyy-MM-dd')" } if ($WhatIf -or $SkipPullRequestCreation) { @@ -128,5 +91,5 @@ else { git branch --set-upstream-to=origin/main git push origin $branchName`:$branchName --force; gh repo set-default dotnet/aspnetcore - gh pr create --base main --head $branchName --title "[Infrastructure] Updated npm package cache $(Get-Date -Format 'yyyy-MM-dd')" --body "" + gh pr create --base main --head $branchName --title "[Infrastructure] Updated npm packages $(Get-Date -Format 'yyyy-MM-dd')" --body "" } diff --git a/eng/scripts/update-selenium-and-playwright-versions.ps1 b/eng/scripts/update-selenium-and-playwright-versions.ps1 new file mode 100644 index 000000000000..d0bbef6b10fb --- /dev/null +++ b/eng/scripts/update-selenium-and-playwright-versions.ps1 @@ -0,0 +1,113 @@ +# Define the packages and their corresponding XML entries +$packages = @{ + "Microsoft.Playwright" = "MicrosoftPlaywrightVersion" + "Selenium.Support" = "SeleniumSupportVersion" + "Selenium.WebDriver" = "SeleniumWebDriverVersion" + } + + # Function to get the latest stable version from NuGet +function Get-LatestNuGetVersion { + param ( + [string]$packageName + ) + $packageName = $packageName.ToLower(); + $url = "https://api.nuget.org/v3-flatcontainer/$packageName/index.json" + $response = Invoke-RestMethod -Uri $url + $versions = $response.versions | Where-Object { $_ -notmatch "-" } | ForEach-Object { [System.Version]$_ } + return ($versions | Sort-Object -Property Major, Minor, Build, Revision -Descending | Select-Object -First 1).ToString() +} + +# Function to update the Versions.props file +function Update-VersionsProps { +param ( + [string]$filePath, + [hashtable]$versions +) +$content = Get-Content -Path $filePath +foreach ($package in $versions.Keys) { + $entryName = $packages[$package] + $version = $versions[$package] + $pattern = "(?<=<$entryName>)(.*?)(?=)" + $replacement = $version + $content = $content -replace $pattern, $replacement +} +Set-Content -Path $filePath -Value $content +} + +# Function to check if the Docker image exists +function Test-DockerImageExists { +param ( + [string]$imageName, + [string]$version +) +$url = "https://mcr.microsoft.com/v2/$imageName/tags/list" +$response = Invoke-RestMethod -Uri $url +return $response.tags -contains $version +} + +# Function to update the Dockerfile +function Update-Dockerfile { +param ( + [string]$filePath, + [string]$version +) +(Get-Content -Path $filePath) -replace 'FROM mcr.microsoft.com/playwright/dotnet:.* AS final', "FROM mcr.microsoft.com/playwright/dotnet:$version AS final" | Set-Content -Path $filePath +} + +# Get the latest versions of the packages +$versions = @{} +foreach ($package in $packages.Keys) { +$versions[$package] = Get-LatestNuGetVersion -packageName $package +} + +# Print the package versions found +foreach ($package in $versions.Keys) { + Write-Host "$($package): $($versions[$package])" +} + +# Update the Versions.props file +Update-VersionsProps -filePath "eng/Versions.props" -versions $versions + +# Check if the Docker image exists +$playwrightVersion = "v$($versions["Microsoft.Playwright"])-jammy-amd64" +if (Test-DockerImageExists -imageName "playwright/dotnet" -version $playwrightVersion) { +# Update the Dockerfile +Update-Dockerfile -filePath "src/Components/benchmarkapps/Wasm.Performance/dockerfile" -version $playwrightVersion +} else { +Write-Error "Docker image for Playwright version $playwrightVersion not found." +exit 1 +} + +# Check if there are changes +git diff --quiet +if ($LASTEXITCODE -eq 0) { + Write-Host "No changes to commit." + # exit 0 +}else { + Write-Host "Updating the version of packages"; +} + +# Create a new branch +git checkout -b infrastructure/update-selenium-and-typescript-dependencies + +# Stage the changes +git add eng/Versions.props src/Components/benchmarkapps/Wasm.Performance/dockerfile + +# Commit the changes +$commitMessage = @" +[Infrastructure] Update Selenium and Playwright dependencies $(Get-Date -Format "yyyy-MM-dd") +* Updated Microsoft.Playwright version to $($versions["Microsoft.Playwright"]) +* Updated Selenium.Support version to $($versions["Selenium.Support"]) +* Updated Selenium.WebDriver version to $($versions["Selenium.WebDriver"]) +"@ +git commit -m $commitMessage + +# Push the branch +git push origin infrastructure/update-selenium-and-typescript-dependencies + +$prBody = $commitMessage + @" + +Please see the [MirroringPackages.md](https://github.com/dotnet/arcade/blob/main/Documentation/MirroringPackages.md) document in the [dotnet/arcade](https://github.com/dotnet/arcade) repository for information on how to mirror these packages on the MS NuGet feed. +"@ + +gh pr create --title "Update Selenium and Playwright dependencies $(Get-Date -Format "yyyy-MM-dd")" --body $prBody --base main --head infrastructure/update-selenium-and-typescript-dependencies diff --git a/eng/targets/BeforeWix.Common.targets b/eng/targets/BeforeWix.Common.targets new file mode 100644 index 000000000000..99c95b6f503d --- /dev/null +++ b/eng/targets/BeforeWix.Common.targets @@ -0,0 +1,26 @@ + + + + yes + $(ProductName) + + $(DefineConstants);Debug + $(DefineConstants);EmbedCab=$(EmbedCab) + + + + $(OutputName.Replace('-', '_')).cab + $(OutputName.Replace('_win', '')).cab + + + + en-US + $(Culture) + $(Platform) + $(OutputPath) + + $(DefineConstants);Cabinet=$(Cabinet) + $(DefineConstants);BinPath=$(OutputPath)$(Culture)\ + $(WixVariables);$(DefineConstants) + + \ No newline at end of file diff --git a/eng/targets/CSharp.Common.targets b/eng/targets/CSharp.Common.targets index 6b6a41ca4a64..471a470911ee 100644 --- a/eng/targets/CSharp.Common.targets +++ b/eng/targets/CSharp.Common.targets @@ -94,7 +94,12 @@ <_Parameter2>$(RepositoryUrl)/tree/$(SourceRevisionId) - + + <_Parameter1>OriginalRepoCommitHash + <_Parameter2>$(RepoOriginalSourceRevisionId) + + + <_Parameter1>Serviceable <_Parameter2>True diff --git a/eng/targets/Cpp.Common.props b/eng/targets/Cpp.Common.props index c824b87caa9a..ca1335ef2c85 100644 --- a/eng/targets/Cpp.Common.props +++ b/eng/targets/Cpp.Common.props @@ -2,7 +2,7 @@ - true + false false @@ -25,8 +25,4 @@ 10.0.19041.0 - - - - diff --git a/eng/targets/Helix.Common.props b/eng/targets/Helix.Common.props index cedd59cd34ad..febe906600ce 100644 --- a/eng/targets/Helix.Common.props +++ b/eng/targets/Helix.Common.props @@ -1,12 +1,13 @@ - (AlmaLinux.8.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:almalinux-8-helix-amd64 - (Alpine.318.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.18-helix-amd64 - (Debian.12.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-amd64 - (Fedora.38.Amd64.Open)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-38-helix - (Mariner)Ubuntu.2204.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-2.0-helix-amd64 - (Debian.12.Arm64.Open)ubuntu.2204.armarch.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-12-helix-arm64v8 + (AlmaLinux.9.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:almalinux-9-helix-amd64 + (Alpine.321.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:alpine-3.21-helix-amd64 + (AzureLinux.30.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:azurelinux-3.0-helix-amd64 + (Debian.13.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-13-helix-amd64 + (Fedora.42.Amd64.Open)azurelinux.3.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-42-helix-amd64 + + (Debian.13.Arm64.Open)ubuntu.2204.armarch.open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-13-helix-arm64v8 false @@ -29,8 +30,7 @@ - - + @@ -39,20 +39,22 @@ - + - - - - - + + + + + + - + + - $(HelixQueueAlmaLinux8); - $(HelixQueueAlpine318); - $(HelixQueueDebian12); - $(HelixQueueFedora38); - $(HelixQueueMariner); + $(HelixQueueAlmaLinux); + $(HelixQueueAlpine); + $(HelixQueueAzureLinux); + $(HelixQueueDebian); + $(HelixQueueFedora40); Ubuntu.2004.Amd64.Open; true diff --git a/eng/targets/Java.Common.targets b/eng/targets/Java.Common.targets index c8905b10c4b6..81c643e60c27 100644 --- a/eng/targets/Java.Common.targets +++ b/eng/targets/Java.Common.targets @@ -64,8 +64,8 @@ - - + + diff --git a/eng/targets/Node.Common.targets b/eng/targets/Node.Common.targets new file mode 100644 index 000000000000..ef9e5d9d16fb --- /dev/null +++ b/eng/targets/Node.Common.targets @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets index e416d43f3038..6dd4f551a26e 100644 --- a/eng/targets/ResolveReferences.targets +++ b/eng/targets/ResolveReferences.targets @@ -227,10 +227,6 @@ Condition=" '@(PackageReference->HasMetadata('Private')->Count())' != '0' " Code="BUILD004" Text="%25(Private) metadata should not be applied to the %(Identity) package reference. Did you mean %25(PrivateAssets)?" /> - + $(_CompileTfmUsingReferenceAssemblies)) "> + + + + + + + + + + + + + + + + + + + + + + + + + $(GetSharedFrameworkFilesForReadyToRunDependsOn);_AddOptimizationDataForReadyToRun + + + + + + + $(NuGetPackageRoot)%(MIBCPackage.Identity)/%(MIBCPackage.Version) + + + + + + + + + + + + $(NuGetPackageRoot)microsoft.netcore.platforms/$(MicrosoftNETCorePlatformsVersion)/PortableRuntimeIdentifierGraph.json + + diff --git a/eng/targets/Wix.Common.props b/eng/targets/Wix.Common.props index d8fcb93ea39a..1b0b1dff407b 100644 --- a/eng/targets/Wix.Common.props +++ b/eng/targets/Wix.Common.props @@ -3,11 +3,10 @@ 2.0 - 3.14 - $(MicrosoftSignedWixVersion) + $(MSBuildThisFileDirectory)BeforeWix.Common.targets Native,Version=v0.0 $(BaseIntermediateOutputPath) @@ -17,18 +16,19 @@ $(MSBuildToolsPath)\NuGet.targets - - - + + + + + + + + - true + false $(WixExtDir)dark.exe - - - - diff --git a/eng/targets/Wix.Common.targets b/eng/targets/Wix.Common.targets index 72cec114582b..f4e4866c5f33 100644 --- a/eng/targets/Wix.Common.targets +++ b/eng/targets/Wix.Common.targets @@ -1,57 +1,4 @@ - - - - - - Microsoft400 - - - Microsoft400 - - - Microsoft400 - - - Microsoft400 - - - - - - - <_GeneratedPackageVersion>$(PackageVersion) - <_GeneratedPackageVersion - Condition="! $(PackageVersion.Contains('$(_PreReleaseLabel)'))">$(PackageVersion)-$(_PreReleaseLabel)$(_BuildNumberLabels) - - $(OutputNamePrefix)$(_GeneratedPackageVersion)$(OutputNameSuffix) - - yes - $(ProductName) - - $(DefineConstants);Debug - $(DefineConstants);EmbedCab=$(EmbedCab) - - - - $(OutputName.Replace('-', '_')).cab - $(OutputName.Replace('_win', '')).cab - - - - en-US - $(Culture) - $(Platform) - $(OutputPath) - - $(DefineConstants);Cabinet=$(Cabinet) - $(DefineConstants);BinPath=$(OutputPath)$(Culture)\ - $(WixVariables);$(DefineConstants) - - - - - diff --git a/eng/test-configuration.json b/eng/test-configuration.json index e8b8b41a7a91..9430296a7ed1 100644 --- a/eng/test-configuration.json +++ b/eng/test-configuration.json @@ -7,10 +7,14 @@ {"testName": {"contains": "MaxRequestBufferSizeTests.LargeUpload" }}, // tries to manipulate the state of the server's buffer {"testName": {"contains": "CertificateChangedOnDisk"}}, // depends on FS event timing {"testName": {"contains": "CertificateChangedOnDisk_Symlink"}}, // depends on FS event timing - {"testName": {"contains": "POST_ServerAbort_ClientReceivesAbort"}}, {"testName": {"contains": "CanLaunchPhotinoWebViewAndClickButton"}}, {"testName": {"contains": "CheckInvalidHostingModelParameter"}}, - {"testName": {"contains": "CanSendAndReceiveUserMessagesFromMultipleConnectionsWithSameUser"}}, + {"testName": {"contains": "CheckNewShimIsUsed"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57538 + {"testName": {"contains": "ComponentLifecycleMethodThrowsExceptionTerminatesTheCircuit"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57551 + {"testName": {"contains": "ComponentDisposeMethodThrowsExceptionTerminatesTheCircuit"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/57551 + {"testName": {"contains": "PhoneFactorFailsAfterSecurityStampChangeTest"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/58231 + {"testName": {"contains": "AbortSendsFinalGOAWAY"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/59358 + {"testName": {"contains": "Http2_RequestWithDataAndContentLength_Success"}}, // Issue: https://github.com/dotnet/aspnetcore/issues/63266 {"testAssembly": {"contains": "IIS"}}, {"testAssembly": {"contains": "Template"}}, {"failureMessage": {"contains":"(Site is started but no worker process found)"}}, diff --git a/eng/testing/linker/SupportFiles/Directory.Build.targets b/eng/testing/linker/SupportFiles/Directory.Build.targets index 0b4c65ac90c2..26dae763a703 100644 --- a/eng/testing/linker/SupportFiles/Directory.Build.targets +++ b/eng/testing/linker/SupportFiles/Directory.Build.targets @@ -1,43 +1,33 @@ - - - - true - - - + RuntimeFrameworkVersion="$(MicrosoftNETCoreAppRefVersion)" /> - - - - + - - - - $(MicrosoftNETCoreAppRuntimeVersion) + Condition=" '%(TargetFramework)' == '$(TargetFramework)' ">$(MicrosoftNETCoreAppRefVersion) $(MicrosoftNETCoreAppRefVersion) $(MicrosoftNETCoreAppRuntimeVersion) + '%(TargetFramework)' == '$(TargetFramework)'">$(MicrosoftNETCoreAppRefVersion) $(TargetRuntimeIdentifier) $(MicrosoftNETCoreAppRuntimeVersion) + Condition=" '%(TargetFramework)' == '$(TargetFramework)' ">$(MicrosoftNETCoreAppRefVersion) $(TargetRuntimeIdentifier) $(MicrosoftNETCoreAppRuntimeVersion) + Condition=" '%(TargetFramework)' == '$(TargetFramework)' ">$(MicrosoftNETCoreAppRefVersion) $(TargetRuntimeIdentifier) + + $(MicrosoftNETCoreAppRefVersion) + + + + $(MicrosoftNETCoreAppRefVersion) + @@ -13,7 +12,7 @@ 99.9 <_ExtraTrimmerArgs>{ExtraTrimmerArgs} $(_ExtraTrimmerArgs) - $(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated + $(InterceptorsPreviewNamespaces);Microsoft.AspNetCore.Http.Generated;Microsoft.Extensions.Validation.Generated false {AdditionalProperties} diff --git a/eng/testing/linker/trimmingTests.targets b/eng/testing/linker/trimmingTests.targets index 1018b14a641b..32235265135f 100644 --- a/eng/testing/linker/trimmingTests.targets +++ b/eng/testing/linker/trimmingTests.targets @@ -84,7 +84,6 @@ .Replace('{TargetFramework}', '%(TestConsoleApps.TargetFramework)') .Replace('{RuntimeIdentifier}','%(TestConsoleApps.TestRuntimeIdentifier)') .Replace('{PublishAot}','$(IsNativeAotTestProject)') - .Replace('{MicrosoftNETCoreAppRuntimeVersion}','$(MicrosoftNETCoreAppRuntimeVersion)') .Replace('{MicrosoftNETCoreAppRefVersion}','$(MicrosoftNETCoreAppRefVersion)') .Replace('{RepoRoot}', '$(RepoRoot)') .Replace('{ExtraTrimmerArgs}', '%(TestConsoleApps.ExtraTrimmerArgs)') diff --git a/eng/tools/GenerateFiles/Directory.Build.props.in b/eng/tools/GenerateFiles/Directory.Build.props.in index 619ec1ded3d9..49747cadbe74 100644 --- a/eng/tools/GenerateFiles/Directory.Build.props.in +++ b/eng/tools/GenerateFiles/Directory.Build.props.in @@ -4,8 +4,6 @@ ${ArtifactsShippingPackagesDir} true ${LibNetHostAppPackVersion} - - - true + <_ProductVersionForInstallers>${MicrosoftAspNetCoreAppRuntimeVersion} diff --git a/eng/tools/GenerateFiles/Directory.Build.targets.in b/eng/tools/GenerateFiles/Directory.Build.targets.in index a056fb9edcfa..6f763355eb28 100644 --- a/eng/tools/GenerateFiles/Directory.Build.targets.in +++ b/eng/tools/GenerateFiles/Directory.Build.targets.in @@ -7,63 +7,65 @@ Condition=" '$(UpdateAspNetCoreKnownFramework)' == '' ">true - + + - - - + + ${MicrosoftNETCoreAppRuntimeVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} ${MicrosoftNETCoreAppRefVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' and '$(TargetLatestDotNetRuntime)' != 'false' ">${MicrosoftNETCoreAppRefVersion} ${MicrosoftNETCoreAppRuntimeVersion} - $(TargetRuntimeIdentifier) + '$(TargetLatestDotNetRuntime)' != 'false' ">${MicrosoftNETCoreAppRefVersion} + %(RuntimePackRuntimeIdentifiers);$(TargetRuntimeIdentifier) - + + ${MicrosoftNETCoreAppRuntimeVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} $(TargetRuntimeIdentifier) ${MicrosoftNETCoreAppRuntimeVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} $(TargetRuntimeIdentifier) ${MicrosoftNETCoreAppRuntimeVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} - + + ${MicrosoftAspNetCoreAppRuntimeVersion} + + + ${MicrosoftNETCoreAppRuntimeVersion} - $(TargetRuntimeIdentifier) + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} + %(Crossgen2RuntimeIdentifiers);$(NETCoreSdkRuntimeIdentifier);$(TargetRuntimeIdentifier) ${MicrosoftNETCoreAppRuntimeVersion} + Condition=" '%(TargetFramework)' == '${DefaultNetCoreTargetFramework}' ">${MicrosoftNETCoreAppRefVersion} + + ${MicrosoftNETCoreAppRefVersion} + + - + false false false - + diff --git a/eng/tools/GenerateFiles/GenerateFiles.csproj b/eng/tools/GenerateFiles/GenerateFiles.csproj index 8a1be59353fe..48f57adcade4 100644 --- a/eng/tools/GenerateFiles/GenerateFiles.csproj +++ b/eng/tools/GenerateFiles/GenerateFiles.csproj @@ -1,7 +1,7 @@ - net5.0 + net10.0 false $([MSBuild]::NormalizeDirectory('$(RepoRoot)', '.config')) @@ -23,7 +23,6 @@ MicrosoftAspNetCoreAppRefVersion=$(TargetingPackVersion); MicrosoftAspNetCoreAppRuntimeVersion=$(SharedFxVersion); MicrosoftNETCoreAppRefVersion=$(MicrosoftNETCoreAppRefVersion); - MicrosoftNETCoreAppRuntimeVersion=$(MicrosoftNETCoreAppRuntimeVersion); MicrosoftPlaywrightCLIVersion=$(MicrosoftPlaywrightCLIVersion); LibNetHostAppPackVersion=$(BundledNETCoreAppPackageVersion); SupportedRuntimeIdentifiers=$([MSBuild]::Escape($(SupportedRuntimeIdentifiers))); diff --git a/eng/tools/HelixTestRunner/HelixTestRunner.csproj b/eng/tools/HelixTestRunner/HelixTestRunner.csproj index 91a6385bc2ec..b7c3c1a77023 100644 --- a/eng/tools/HelixTestRunner/HelixTestRunner.csproj +++ b/eng/tools/HelixTestRunner/HelixTestRunner.csproj @@ -8,7 +8,7 @@ - net9.0 + net10.0 Exe $(NoWarn);CA2007;NU5104 diff --git a/eng/tools/RepoTasks/GenerateTestDevCert.cs b/eng/tools/RepoTasks/GenerateTestDevCert.cs new file mode 100644 index 000000000000..37a4b33216ed --- /dev/null +++ b/eng/tools/RepoTasks/GenerateTestDevCert.cs @@ -0,0 +1,74 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Linq; +using System.Text.Json; +using System.Threading; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace RepoTasks; + +/// +/// Generates the test HTTPs certificate used by the template tests +/// +public class GenerateTestDevCert : Task +{ + [Required] + public string CertificatePath { get; private set; } + + public override bool Execute() + { + Mutex mutex = null; + try + { + // MSBuild will potentially invoke this task in parallel across different subprocesses/nodes. + // The build is configured to generate the certificate in a single location, but multiple projects + // import the same targets that will use this task, which will result in multiple calls. + // To avoid issues where we try to generate multiple certificates on the same location, we wrap the + // usage in a named mutex which guarantees that only one instance will run at a time. + mutex = new(initiallyOwned: true, "Global\\GenerateTestDevCert", out var createdNew); + if (!createdNew) + { + // The mutex already exists, wait for it to be released. + mutex.WaitOne(); + } + + if (File.Exists(CertificatePath)) + { + Log.LogMessage(MessageImportance.Normal, $"A test certificate already exists at {CertificatePath}"); + return true; + } + + var cert = DevelopmentCertificate.Create(CertificatePath); + + var devCertJsonFile = Path.ChangeExtension(CertificatePath, ".json"); + var devCertJson = new CertificateInfo + { + Password = cert.CertificatePassword, + Thumbprint = cert.CertificateThumbprint + }; + + using var file = File.OpenWrite(devCertJsonFile); + file.SetLength(0); + JsonSerializer.Serialize(file, devCertJson); + } + catch (Exception e) + { + Log.LogErrorFromException(e, showStackTrace: true); + } + finally + { + mutex.ReleaseMutex(); + } + + return !Log.HasLoggedErrors; + } + + private class CertificateInfo + { + public string Password { get; set; } + public string Thumbprint { get; set; } + } +} diff --git a/eng/tools/RepoTasks/RepoTasks.csproj b/eng/tools/RepoTasks/RepoTasks.csproj index c9fd42558d07..a13fe176e4e1 100644 --- a/eng/tools/RepoTasks/RepoTasks.csproj +++ b/eng/tools/RepoTasks/RepoTasks.csproj @@ -1,4 +1,5 @@ + $(DefaultNetCoreTargetFramework) $(TargetFrameworks);net472 @@ -20,21 +21,30 @@ + + + + + + + + + + + - - - + @@ -46,4 +56,5 @@ $(WiXSdkPath)\Microsoft.Deployment.WindowsInstaller.Package.dll + diff --git a/eng/tools/RepoTasks/RepoTasks.tasks b/eng/tools/RepoTasks/RepoTasks.tasks index c5722a9e266d..b6cd9a820d1e 100644 --- a/eng/tools/RepoTasks/RepoTasks.tasks +++ b/eng/tools/RepoTasks/RepoTasks.tasks @@ -10,5 +10,6 @@ + diff --git a/eng/tools/RepoTasks/shared/CertificateGeneration/DevelopmentCertificate.cs b/eng/tools/RepoTasks/shared/CertificateGeneration/DevelopmentCertificate.cs new file mode 100644 index 000000000000..a7c826021814 --- /dev/null +++ b/eng/tools/RepoTasks/shared/CertificateGeneration/DevelopmentCertificate.cs @@ -0,0 +1,45 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Certificates.Generation; + +namespace RepoTasks; + +public readonly struct DevelopmentCertificate +{ + public DevelopmentCertificate(string certificatePath, string certificatePassword, string certificateThumbprint) + { + CertificatePath = certificatePath; + CertificatePassword = certificatePassword; + CertificateThumbprint = certificateThumbprint; + } + + public readonly string CertificatePath { get; } + public readonly string CertificatePassword { get; } + public readonly string CertificateThumbprint { get; } + + public static DevelopmentCertificate Create(string certificatePath) + { + var certificatePassword = ""; + var certificateThumbprint = EnsureDevelopmentCertificates(certificatePath, certificatePassword); + + return new DevelopmentCertificate(certificatePath, certificatePassword, certificateThumbprint); + } + + private static string EnsureDevelopmentCertificates(string certificatePath, string certificatePassword) + { + var now = DateTimeOffset.Now; + var manager = CertificateManager.Instance; + var certificate = manager.CreateAspNetCoreHttpsDevelopmentCertificate(now, now.AddYears(1)); + var certificateThumbprint = certificate.Thumbprint; + manager.ExportCertificate(certificate, path: certificatePath, includePrivateKey: true, certificatePassword, CertificateKeyExportFormat.Pfx); + + return certificateThumbprint; + } +} diff --git a/eng/tools/RepoTasks/shared/CertificateGeneration/Global.cs b/eng/tools/RepoTasks/shared/CertificateGeneration/Global.cs new file mode 100644 index 000000000000..b9ed6282209f --- /dev/null +++ b/eng/tools/RepoTasks/shared/CertificateGeneration/Global.cs @@ -0,0 +1,6 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +global using System; +global using System.Collections.Generic; +global using System.IO; diff --git a/eng/tools/tools.slnf b/eng/tools/tools.slnf index bdd4896e94f4..b7524a84eccd 100644 --- a/eng/tools/tools.slnf +++ b/eng/tools/tools.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "eng\\tools\\BaselineGenerator\\BaselineGenerator.csproj", "eng\\tools\\RepoTasks\\RepoTasks.csproj", diff --git a/es-metadata.yml b/es-metadata.yml new file mode 100644 index 000000000000..a9fe05cc4ca9 --- /dev/null +++ b/es-metadata.yml @@ -0,0 +1,8 @@ +schemaVersion: 0.0.1 +isProduction: true +accountableOwners: + service: 4db45fa9-fb0f-43ce-b523-ad1da773dfbc +routing: + defaultAreaPath: + org: devdiv + path: DevDiv\ASP.NET Core\Policy Violations diff --git a/get.hashes.ps1 b/get.hashes.ps1 new file mode 100644 index 000000000000..d154abba577d --- /dev/null +++ b/get.hashes.ps1 @@ -0,0 +1,8 @@ +$files = Get-ChildItem .\artifacts\installers\Release\* -Include ('*.msi') -File + +Write-Output "SHA-1 hashes of the installers are,`n" + +foreach ($file in $files) { + $hash = Get-FileHash $file.FullName -Algorithm SHA1 + Write-Output "* $($file.Name): $($hash.Hash)" +} diff --git a/github-merge-flow.jsonc b/github-merge-flow.jsonc index 022528b04cce..cb4e76360d22 100644 --- a/github-merge-flow.jsonc +++ b/github-merge-flow.jsonc @@ -1,20 +1,20 @@ // IMPORTANT: This file is read by the merge flow from main branch only. { "merge-flow-configurations": { - // Automate opening PRs to merge release/9.0 to main - "release/9.0":{ + // Automate opening PRs to merge release/10.0 to main + "release/10.0":{ "MergeToBranch": "main", "ExtraSwitches": "-QuietComments" }, - // Automate opening PRs to merge release/9.0-rc1 to release/9.0 - "release/9.0-rc1":{ - "MergeToBranch": "release/9.0", + // Automate opening PRs to merge release/10.0-rc1 to release/10.0 + "release/10.0-rc1":{ + "MergeToBranch": "release/10.0", "ExtraSwitches": "-QuietComments" }, - // Automate opening PRs to merge release/9.0-rc2 to release/9.0 - "release/9.0-rc2":{ - "MergeToBranch": "release/9.0", + // Automate opening PRs to merge release/10.0-rc2 to release/10.0 + "release/10.0-rc2":{ + "MergeToBranch": "release/10.0", "ExtraSwitches": "-QuietComments" } } -} \ No newline at end of file +} diff --git a/global.json b/global.json index d4c978d226d2..3aabfb8498f6 100644 --- a/global.json +++ b/global.json @@ -1,19 +1,19 @@ { "sdk": { - "version": "9.0.100-rc.1.24452.12" + "version": "10.0.100-rc.1.25451.107" }, "tools": { - "dotnet": "9.0.100-rc.1.24452.12", + "dotnet": "10.0.100-rc.1.25451.107", "runtimes": { "dotnet/x86": [ - "$(MicrosoftNETCoreBrowserDebugHostTransportVersion)" + "$(MicrosoftInternalRuntimeAspNetCoreTransportVersion)" ], "dotnet": [ - "$(MicrosoftNETCoreBrowserDebugHostTransportVersion)" + "$(MicrosoftInternalRuntimeAspNetCoreTransportVersion)" ] }, "vs": { - "version": "17.2", + "version": "17.13", "components": [ "Microsoft.VisualStudio.Component.VC.ATL", "Microsoft.VisualStudio.Component.VC.ATL.ARM64", @@ -21,13 +21,17 @@ "Microsoft.VisualStudio.Component.VC.Tools.x86.x64" ] }, - "xcopy-msbuild": "17.1.0" + "xcopy-msbuild": "17.13.0" }, "native-tools": { - "jdk": "11" + "jdk": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24466.2", - "Microsoft.DotNet.Helix.Sdk": "9.0.0-beta.24466.2" + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25515.111", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25515.111", + "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25515.111", + "Microsoft.Build.NoTargets": "3.7.0", + "Microsoft.Build.Traversal": "3.4.0", + "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2811440" } } diff --git a/package-lock.json b/package-lock.json index 01c597224000..8dda72e96a3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "aspnetcore", + "name": "@microsoft/aspnetcore", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "aspnetcore", + "name": "@microsoft/aspnetcore", "version": "1.0.0", "workspaces": [ "src/SignalR/clients/ts/signalr", @@ -74,13 +74,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha1-iC/Z4J6O4yTklr0EBAHG8EbvRGU=", + "version": "7.26.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha1-S1+rl9MzOO/5FiNQVfDrwh5XOoU=", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -88,9 +89,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/compat-data/-/compat-data-7.24.8.tgz", - "integrity": "sha1-+RlkVTNMONBZrIsaFqUd7NqdMNM=", + "version": "7.26.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha1-ghwdNWQcNVKE1KhwuKSnsMFB42c=", "dev": true, "license": "MIT", "engines": { @@ -98,22 +99,22 @@ } }, "node_modules/@babel/core": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/core/-/core-7.24.8.tgz", - "integrity": "sha1-wk+DmFIU9ZnO5fwm05PZqzIDQvQ=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha1-XIdvg8jE3LIz7ktnDAYG8qwwAPk=", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -129,13 +130,13 @@ } }, "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -146,66 +147,46 @@ } } }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/generator": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/generator/-/generator-7.24.8.tgz", - "integrity": "sha1-GALWrE13qRmcda4+tqCDNuXR05o=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha1-pg2d5JysoWdE5jQMNljf72E4w/c=", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.8", + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha1-U3PHvINmsSoDO0vhrBOiBsZlaqs=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha1-N9Zv6wEgJPJCK3Yrmyp8/ifH+6M=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha1-2OrE0twNe24R+m5TUzLg0xhPBrQ=", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha1-tgfDFhzZ0XRJd9T5cTlXL+d4wnE=", + "version": "7.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha1-ddkruNjVEwHA1J5Splyaf+lFFNg=", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -214,20 +195,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", - "integrity": "sha1-R/VGQI0TwgDAhn+dk1GE6qCFGwk=", + "version": "7.26.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", + "integrity": "sha1-1vg+MDlUf7s5ln54BDzTyLeCDHE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.26.9", "semver": "^6.3.1" }, "engines": { @@ -238,14 +217,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", - "integrity": "sha1-vk9DWoDcKwU8du60t9Ft0iz8ido=", + "version": "7.26.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha1-UWl1bsvh2V94ZrkLtVWwIllTAqA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -256,9 +235,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha1-GFlPeJw1lKyyTP20p/e30ui9kS0=", + "version": "0.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha1-9PJ5L64u84IHS8LXE1Is8k5t2yE=", "dev": true, "license": "MIT", "dependencies": { @@ -273,13 +252,13 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -290,93 +269,44 @@ } } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha1-SzG6lVHR+QeBuoNJHdWc+bJp99k=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha1-dfHhcldC85rGWE7gsW2UUT2jjdI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha1-tO3hzeL9iUNjl/MNyTdu4GsPJe4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha1-YVXgeckTNX0kpMIEgNt8cSpcP7Y=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha1-nf/+RvcnAFpeopBRrINftzXkwaM=", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha1-8vmAOS3luEwzKPxx04vYG7uDBCs=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha1-5/jSBgLr2/nrvqCgdR+w8qQUFxU=", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", - "integrity": "sha1-sfLfT5bzRlsNA1tpfshstR/zSP4=", + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha1-jOVOydWSaV5Y2EzYhLe1xqL97q4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -386,22 +316,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha1-iwoEVskvazI9J8/QDR1mTnZpKg8=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha1-MySuULrn4qs8M/YMmod7agFGtU4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha1-lO5n6OwOXUTqe661Hlcb0mrweHg=", + "version": "7.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha1-GFgNAMmTQRetcZOSxPZYXJMzzDU=", "dev": true, "license": "MIT", "engines": { @@ -409,15 +339,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha1-s/DyA2KFInE4SdSUA/GkFEaL5Mc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha1-5TlWqz1bn7iL4Es+LzG1I6/TS5I=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -427,15 +357,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha1-+TO37tgaHAJldA7ckUkc5RJQ92U=", + "version": "7.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha1-bLBOgq4pHa6OcjNd/kOLByXxTI0=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -444,51 +374,24 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha1-vK3o2jrsjtFrnElTt05Qa1G17bM=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha1-X4+oO2ntXCetxWBE+L4rPqlmadk=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha1-g5SUNokOB/o9aHPGGpbju/aS2FY=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha1-Cy4bYtVg1rGVSJP9K3BdwXyR8Mk=", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha1-WzMpyaWIA9XfQl5XhYZYgagcpI0=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha1-Gqu3Lucu01eJtLvK08ooYs5hTow=", "dev": true, "license": "MIT", "engines": { @@ -496,9 +399,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha1-dbiJz6+eNcKq9Czw1yyOkXGSUds=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha1-JLZOLD7HzTs8VHcpuNFocfIsvcc=", "dev": true, "license": "MIT", "engines": { @@ -506,9 +409,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha1-NyXN7qi0gOhtNN8VMEgGoGl14z0=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha1-huRb2KSat+A/J2V3+WF5ZT1B2nI=", "dev": true, "license": "MIT", "engines": { @@ -516,73 +419,75 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha1-UtiTr35C7cp8bSxnZFSYJjNqrh8=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha1-2Z39WVMS5siUvX0jdHACXIXuqdA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha1-KCDWTV1mhsyoeJ3RWwdM2GJ5WHM=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha1-a66jzWLsLQwQaHeNY8sTFPZjc4Q=", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha1-oFqx3xNLKGVYquDtQebF9zG/QJ0=", + "node_modules/@babel/parser": { + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha1-6b24LxS5ffZWmwsDjt1DaDnFd0k=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.26.10" + }, + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha1-WKTbvK1+sdSJMFJKP9k9k+kITG8=", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha1-zC5T6/CgNAd3//XtUhlD4lO02P4=", "dev": true, "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", - "integrity": "sha1-/QWf0nsYTqK0x+ZGhoqaOBu8MFU=", + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha1-r55PtjzLiry5I3Wy/P42tgx3TTA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -592,13 +497,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", - "integrity": "sha1-RoCWykS7y+j8xXBXThLrGVDhgQc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha1-6Nwm/NYW5sW/K9DVosFR1PkqkTc=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -608,15 +513,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha1-5Oq91RCazDmbONeZmy72b8ICL4k=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha1-gHpmf5FYrKxvYWS0vrha2evJ4dE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -626,14 +531,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", - "integrity": "sha1-cbIbsChtWBDmOhU4qpAcWOhzdew=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha1-3nCT8efer2jq3XzGsH8quCVDJp4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -710,40 +615,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha1-KgtAa1hxogqEEkBYaxMAziCIp3g=", + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha1-YgQSQFBY76VuSlZJA7eTVQIPRF8=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -753,13 +632,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha1-tPnqlaeeaRJIDEtiZzn4agdmJMo=", + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha1-OxQShHaZ7qc5tPJgLHTONvawsPc=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -795,13 +674,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha1-OaH6Sn49PX804qzGvlhbcY0w4C0=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha1-o0MToXjqVvGVFZm5KcHOrO5xkpA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -921,13 +800,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha1-WNRYJxtNO2uyfuaslSWsuyWbrRw=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha1-Z92it02kNyfPIdRs+a/vI/Q2U5k=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -954,13 +833,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha1-T2iGwR5CO9afPOUdv0JCSl8nVRQ=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha1-eCHUQQvuXaqtu0zdmmZJcE4XaEU=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -970,16 +849,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha1-czClxQ4FGBylI1G4/QFkIADJbP0=", + "version": "7.26.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha1-XjmRE147nG6q9e/1bRrloR30X/g=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -989,15 +867,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha1-cqOvbEUdV1hCp+m1oChjQUNVvcw=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha1-yAAI2srlFIJ5PlqcCLOaW+fhLXE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1007,13 +885,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha1-pCUdmOoMDzmdr+GjWAHqukVbvx8=", + "version": "7.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha1-PcRAXTGtHL5FKTqlcgWm47AJ1T4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1023,13 +901,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha1-QgY+TeuFDHvXxV5ia/Tnq0jmzgI=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha1-wzZl5GsGdZyTaHyg+EOVuAwEc6E=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1039,14 +917,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha1-JWh5RntXsLaMfd/Ft2WE85jNaDQ=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha1-qM6E/tua1RJUmYQQH6hAgKn19R8=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1056,15 +934,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha1-yCAn67cBC8M8EW1LUET7v4wFSE0=", + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha1-bI2iGfTrFcrpg07ENI/46eCWZKA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1074,19 +951,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", - "integrity": "sha1-rSMwH+W8FTykz3+1cqm8iwtxHPc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha1-cVJFf3iAtZOmOt6Khh5uJqRGn1I=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", "globals": "^11.1.0" }, "engines": { @@ -1097,14 +972,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha1-TKsyFOgLxx+uOFMjjRPQl7AExwc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha1-2zZJLHhGDlNLiFKx1b7+PJI+8Qs=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1114,13 +989,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha1-yCjoFNvkKicYqDjCouFqQI4FVVA=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha1-lm6iWVxJgiQ0CINgLTz9egx5zqE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1130,14 +1005,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha1-X4v4poDyEWpyB+FiiKX5dK1Hp6A=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha1-uteUXdB3NMpS/jrU6HK0DtCbsJo=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1147,13 +1022,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha1-3SAQKJfJojJOWt//tn/zYQNZqO4=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha1-iFDd9X3OKuu0OUu0NKdZgDEFnm0=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1162,15 +1037,31 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha1-b3JZtN4SdyGgjx5RZbhS/KppbTE=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha1-TYuV47risDdnMJGqCc0z/s1kGfQ=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha1-I+kX3mPtI8ZgDF3QbZRmnc5597g=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1180,14 +1071,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha1-tinuImRfQSAkKX1SRbzkJcMfmw0=", + "version": "7.26.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha1-4p8Btt4wLHwseUJ3pI8Eqcp/A7w=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1197,14 +1087,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha1-F21S2NjtUWrq5wE+6VVtVAxT8Zc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha1-kHRf5VBTOU9VTkBYTNqB8sikAqI=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1214,14 +1103,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha1-8lsz9y3x2L52OZ4bjz+dNm61vHA=", + "version": "7.26.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha1-JyMfedUXDvM7URHwf+XK/rLJalY=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1231,15 +1120,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha1-bYYB+//mZciURAq0RwvHId2RMdY=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha1-k52VbmimBmYQBb/VUMT8Lvlfe5c=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1249,14 +1138,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha1-8+nDfAo3P+6G42iA1Fs2ZM7a9zo=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha1-yG20B8uCfN7ZAqkMcH0ngaqolmA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1266,13 +1154,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha1-NrUFweZVFRqddgd5mpmI/FRn0Gw=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha1-GhxrTUqlm8TK1bazoiOgq9aFyd4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1282,14 +1170,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha1-pY+27aFsncj5/xx7G6bet/RpTLA=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha1-sZRBqMOaL9oJApALMG6gWuEFXbc=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1299,13 +1186,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha1-O0RU+w4wLhi6SUW6MkassSSDFd8=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha1-Y9/xl2PqZKMfXmwglX5qJeQe1d4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1315,14 +1202,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha1-ZQkO1JPEqDSXajyhzed25sz/Mtc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha1-SbpHjyKVEBVEq9eUSGzTCI3dtsU=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1332,15 +1219,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha1-q2Qh5WS3F8tHXW//cK5/EDU26jw=", + "version": "7.26.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha1-jwEdRLINAsPeRNiFDZcdhJf5gfs=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1350,16 +1236,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", - "integrity": "sha1-+AEjFsUJj26N7m7NWOK8bwA9DOc=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha1-i9G0ODYmnj0zMHFRoRS887pnk/g=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1369,14 +1255,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha1-7dn0PsVJCZYg333yTnuhO1x278g=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha1-ZxAHnN18aU2zZSmh6EEeSfy/FMk=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1386,14 +1272,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha1-kELpuFa8azaIwMLkBg6eELFGCSM=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha1-RUmQrmzCL9Kg+mCzosb2OjgGTmo=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1403,13 +1289,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha1-Mf9UxOBVXMVJ1YFuSrOSQd+2qwA=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha1-QuYXESlLEFwkgzbcsEt3BU6ovs0=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1419,14 +1305,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha1-HeRTTFkK+VlvU9Z/UqkvEtuYQSA=", + "version": "7.26.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha1-+/azySy1CeezGe5G49qJxb7dMf4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1436,14 +1321,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha1-vqYrU4yAYF2KD6ybQPSOl++n3mM=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha1-v+11hmJhqLZDRosMz9J18gMyFKE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1453,16 +1337,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha1-0Tork0Na64oZfhFSIcqyZrpuVdY=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha1-AgNyUCUHQWSAi88aLPqQxlLJnxg=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1472,14 +1355,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha1-Zu6v94MLupRd2JibYypAwE7WJb4=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha1-OF1d4TUWKTO+tKPSJ6K35Su0zwM=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1489,14 +1372,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha1-AOq9iD0N1qYMHFV1SHhZGbbnF7Q=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha1-EOcNltUrsfEMXKqsWaxUXqK6f/M=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1506,15 +1388,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha1-uwKme2D/BAYIXBPRBMmag1zfNl0=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha1-4ULriZ0m73FUNfIBq24TlUHu590=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1405,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha1-WIHwriEBhADjIPx+uBflKdElS2g=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha1-uFaEIgWz534Yt6ehuUlYBpx7olc=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1540,14 +1421,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha1-5jGHRrKucKWdAj1cwTRKK6enX14=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha1-hH9BOSY1d1JkVdfTIjzYvaUeO1c=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1557,16 +1438,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha1-TuxrxwEojB+rX3LmpLvJ1n+soGE=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha1-nItz5k5sw8uydDYziFp90sOF/jM=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1576,13 +1456,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha1-8NLtg4DfvtlJxC1NeQJmUl1ju9w=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha1-1y1Yi9iLDeyLYuNvb9qRzt/ijj8=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1592,13 +1472,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha1-AhVi3kU02LSxhRdZ/Xr04F0sR/g=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha1-A6ikZw1s666VMFrG3vrIHs53dAs=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.9", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1608,14 +1488,31 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha1-L1g3pbXNOEKpGdgUfpkDzHRVuFA=", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha1-gAN/5PvwMfwRJQIheP85OLs3Q6Q=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha1-A5iu0vHxC6P3ipPbIZsn70F/uc4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1625,13 +1522,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha1-hUSMa5luEi+p4ol0YUCqqZ2mTnM=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha1-u3heYJH5n4JqlfmJT8Fv3mHBY/I=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1641,14 +1538,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha1-6KOMD954guD7jxYDePdL2IXMe7M=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha1-JKNRU5MbS6PRPOxKd0jCGrVRTvk=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1658,13 +1555,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha1-lq6A16flJR9le1zxjx6mv5JvX+s=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha1-x/ArlE6YakF4F7ILosUE38FFPTI=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1674,13 +1571,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha1-oF3rtKkHKuj5hbz3fz8hVDTI+Mg=", + "version": "7.26.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha1-lmsV0VOpkRcqVApprV4YRc7ZkLU=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1690,13 +1587,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha1-OD2rN/sHP1v+bmDGVMqsMJ+Suhw=", + "version": "7.26.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", + "integrity": "sha1-0OM6zZIjdEwehX29b6F70KN4aTc=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1706,16 +1603,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz", - "integrity": "sha1-wQTWKG4Ev35EuMuhtobUG61X64Q=", + "version": "7.26.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", + "integrity": "sha1-LpyqhwqhAvUNcSUkDZ2/kTNLCVA=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-typescript": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1725,13 +1623,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha1-ICOoLO0ftJcWMKLgeXZFAsQUjg4=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha1-p17zlHzhU2P8yqOOLdm8cLJ4i4I=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1741,14 +1639,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha1-kHOkzRO4bqccMmRllZCsCGYFu80=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha1-qQHpbywdBxsNG7XcDTyIDOj1PdM=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1758,14 +1656,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha1-38PUpREnEICZsZgXwJY75qKt8Z8=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha1-Xq50f+OerPE6i9AGpPsLXR+l6bE=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1775,14 +1673,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha1-1AcF1nUjgDpXbinGPO9uUWuFjtk=", + "version": "7.25.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha1-ZRFMF7T/wg+lsWPGPHDA0lYh+r4=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1792,92 +1690,80 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/preset-env/-/preset-env-7.24.8.tgz", - "integrity": "sha1-4NuU1/F9bw4lZOjSkZC8jNrOwtE=", + "version": "7.26.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha1-LsZOkD0O/nQ2mfd6EL33lVwhI8M=", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.8", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -1903,17 +1789,17 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha1-Zs2G6o+MAUhVZx1eqac3E5y7/vE=", + "version": "7.26.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha1-SlcPG40QSiQtkjlX/6Hq/xQqEG0=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1922,17 +1808,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha1-8LppsHXh8F+yglt/rZkeetuxgxA=", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha1-XZWMOCexPMbQXgOMB/suXjQg2C4=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha1-oHtNj6J68TGmM9ezUk24A+tHZMI=", "dev": true, "license": "MIT", "dependencies": { @@ -1943,35 +1822,32 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha1-Au/O4xfQYJ0sBxF8tw74+xercxU=", + "version": "7.26.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha1-RXetPd9D0ZRSjP9OH6ayMvpgm7I=", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha1-bBTtUjK3VJ3zNx2CD72av819+rc=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/traverse/-/traverse-7.26.10.tgz", + "integrity": "sha1-Q8yjPXYAXbqpMCT65TbMGUakw4A=", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1980,13 +1856,13 @@ } }, "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1997,23 +1873,15 @@ } } }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/types": { - "version": "7.24.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/types/-/types-7.24.8.tgz", - "integrity": "sha1-1R/6kEOxfTZiLvpE6GGknmnhMKg=", + "version": "7.26.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha1-OWOC9jNb1P62V0Hqz8gIIY+Fklk=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2097,25 +1965,28 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha1-ojUU6Pua8SadX3eIqlVnmNYca1k=", + "version": "4.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/eslint-utils/-/eslint-utils-4.5.0.tgz", + "integrity": "sha1-cWY39QiordWBTMZMVuWMzle9vpM=", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=", + "version": "4.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha1-z8bP/jnfOQo4Qc3iq8z5Lqp64OA=", "dev": true, "license": "MIT", "engines": { @@ -2154,13 +2025,13 @@ "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2200,13 +2071,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", @@ -2221,9 +2085,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=", + "version": "8.57.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha1-3mM9s+wu9qPIni8ZA4Bj6KEi4sI=", "dev": true, "license": "MIT", "engines": { @@ -2238,13 +2102,13 @@ "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=", + "version": "0.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha1-+5B2JN8yVtBLmqLfUNeql+xkh0g=", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -2253,13 +2117,13 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2270,13 +2134,6 @@ } } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2317,9 +2174,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha1-MYPjj66aZdfLXlOUXNWJfQJgoGo=", + "version": "6.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=", "dev": true, "license": "MIT", "engines": { @@ -2446,82 +2303,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jest/core/-/core-29.7.0.tgz", @@ -2571,96 +2352,33 @@ } }, "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha1-ykLHWDEPNlv6caC9oKgHFgt3aBI=", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha1-ykLHWDEPNlv6caC9oKgHFgt3aBI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@jest/core/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -2668,19 +2386,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jest/environment/-/environment-29.7.0.tgz", @@ -2802,59 +2507,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", @@ -2876,16 +2528,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { "version": "6.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", @@ -2904,9 +2546,9 @@ } }, "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -2916,19 +2558,6 @@ "node": ">=10" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3016,82 +2645,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jest/types/-/types-29.6.3.tgz", @@ -3110,121 +2663,45 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha1-Tw4GNi4BNi+CPTSPGHKwj2ZtgUI=", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha1-eg7mAfYPmaIMfHxf8MgDiMEYm9Y=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha1-VY+2Ry7RakyFC4iVMOazZDjEkoA=", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha1-3M5q/3S99trRqVgCtpsEovyx+zY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha1-eg7mAfYPmaIMfHxf8MgDiMEYm9Y=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha1-VY+2Ry7RakyFC4iVMOazZDjEkoA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha1-nXHKiG4yUC65NiyadKRnh8Nt+Bo=", "dev": true, "license": "MIT", "dependencies": { @@ -3250,10 +2727,42 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@microsoft/client-ts": { + "resolved": "src/SignalR/clients/ts", + "link": true + }, + "node_modules/@microsoft/components.authentication": { + "resolved": "src/Components/WebAssembly/WebAssembly.Authentication/src/Interop", + "link": true + }, "node_modules/@microsoft/dotnet-js-interop": { "resolved": "src/JSInterop/Microsoft.JSInterop.JS/src", "link": true }, + "node_modules/@microsoft/dotnet-runtime": { + "resolved": "src/Components/dotnet-runtime-js", + "link": true + }, + "node_modules/@microsoft/functionaltests": { + "resolved": "src/SignalR/clients/ts/FunctionalTests", + "link": true + }, + "node_modules/@microsoft/microsoft.aspnetcore.components.web.js": { + "resolved": "src/Components/Web.JS", + "link": true + }, + "node_modules/@microsoft/microsoft.aspnetcore.projecttemplates.tests": { + "resolved": "src/ProjectTemplates/test/Templates.Tests", + "link": true + }, + "node_modules/@microsoft/microsoft.components.customelements": { + "resolved": "src/Components/CustomElements/src/js", + "link": true + }, + "node_modules/@microsoft/microsoft.msal.components.webassembly": { + "resolved": "src/Components/WebAssembly/Authentication.Msal/src/Interop", + "link": true + }, "node_modules/@microsoft/signalr": { "resolved": "src/SignalR/clients/ts/signalr", "link": true @@ -3323,9 +2832,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -3366,9 +2875,9 @@ } }, "node_modules/@npmcli/git/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -3546,20 +3055,19 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.2.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@puppeteer/browsers/-/browsers-2.2.3.tgz", - "integrity": "sha1-rWt5EpxQgl533auggmgPTa0LZ04=", + "version": "2.8.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@puppeteer/browsers/-/browsers-2.8.0.tgz", + "integrity": "sha1-nVkpM8vvxmw3gjdwhEuMusUmB90=", "dev": true, "license": "Apache-2.0", "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.1", + "tar-fs": "^3.0.8", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" @@ -3584,13 +3092,13 @@ } }, "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3601,35 +3109,12 @@ } } }, - "node_modules/@puppeteer/browsers/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@puppeteer/browsers/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.0.tgz", - "integrity": "sha1-Gkak20v/zM2Xt0O1AFyDJfI9Ti0=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -3637,13 +3122,6 @@ "node": ">=10" } }, - "node_modules/@puppeteer/browsers/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", - "dev": true, - "license": "ISC" - }, "node_modules/@puppeteer/browsers/node_modules/yargs": { "version": "17.7.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yargs/-/yargs-17.7.2.tgz", @@ -3690,16 +3168,15 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha1-5eCwWb2FyldIlJLylc6IwtSw2vk=", + "version": "15.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha1-ZgCJU8JSS+eGqjGdSeMvISgpang=", "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", "is-module": "^1.0.0", "resolve": "^1.22.1" }, @@ -3788,15 +3265,15 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha1-flPt3Ix/SDpK0LlK+x9/X9PHceA=", + "version": "5.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha1-u5Tx+eqqyUTaI3dnzf7mxbImLUo=", "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -3811,9 +3288,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", - "integrity": "sha1-8NpIEkS32eoVKWs19/45zYEVc5Y=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", + "integrity": "sha1-4ddwBzX36N5WHvfR+gNiCCoYDEM=", "cpu": [ "arm" ], @@ -3825,9 +3302,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", - "integrity": "sha1-gqs8V19CNftker6l4I7sbPMllk4=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", + "integrity": "sha1-+mzfsfyeLI4ien811STY9/kM9Ns=", "cpu": [ "arm64" ], @@ -3839,9 +3316,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", - "integrity": "sha1-alMEUuaKkVKAnOWN4fiVl2MqCFs=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", + "integrity": "sha1-baWh3cTxHUp66Fq0Q4JMtr9hTjA=", "cpu": [ "arm64" ], @@ -3853,9 +3330,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", - "integrity": "sha1-R3J0efXKKSz0NNfnWvJyW3JOy8c=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", + "integrity": "sha1-JbdM4tjT+eqOEZsBOE1EocCg064=", "cpu": [ "x64" ], @@ -3866,10 +3343,38 @@ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", + "integrity": "sha1-vj0540Qd9dbhh8g9FYxgZWyC4gM=", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", + "integrity": "sha1-zZMtPsZ5cR79Zcolgh+zGOJbfOQ=", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", - "integrity": "sha1-Rhk8SYqnkCqNuJrAASgGAyDoT+8=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", + "integrity": "sha1-0wC3TG+AVHQiVjLxhdqurnYKwrs=", "cpu": [ "arm" ], @@ -3881,9 +3386,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", - "integrity": "sha1-Itgx/iOWQ8HQXJiQZCAyXO5DnYU=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", + "integrity": "sha1-LKrGIjgPMUxBk07R5ozq9sw4DMM=", "cpu": [ "arm" ], @@ -3895,9 +3400,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", - "integrity": "sha1-GavTNpXsnViLSoWNEiYxQzCE5KM=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", + "integrity": "sha1-HshBZQsDjMFcGUwmMmSD/X6/8+M=", "cpu": [ "arm64" ], @@ -3909,9 +3414,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", - "integrity": "sha1-1gr4wLm+QkQk/5aguhn85l0m9qs=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", + "integrity": "sha1-L8cKRG2Ybif2EB6nToF0aYf2kVA=", "cpu": [ "arm64" ], @@ -3922,10 +3427,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", + "integrity": "sha1-VhvQRc2c6eCMlfQueoaIr4yT12Q=", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", - "integrity": "sha1-sRlOXtbROP3eCELRJvzN50qQ9Fc=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", + "integrity": "sha1-RdhJoLM4E/M/5eup+Z4P8Vq1yq0=", "cpu": [ "ppc64" ], @@ -3937,9 +3456,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", - "integrity": "sha1-9aY1wBe5v/i4VrAiH71cDjNzt+w=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", + "integrity": "sha1-eN3j5vz1tXM6l9CmdILXaKoeg6U=", "cpu": [ "riscv64" ], @@ -3951,9 +3470,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", - "integrity": "sha1-8QQ9n0Amv2mVhjyz+N1HMmBuS6o=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", + "integrity": "sha1-LjSDUCD54D37QRRzpcKg6KnFA3s=", "cpu": [ "s390x" ], @@ -3965,9 +3484,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", - "integrity": "sha1-HngXML5EURnwbJ318YXhk7yCxhA=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", + "integrity": "sha1-T5d0vt3G9CdN9XrJmGLrIwQN5GE=", "cpu": [ "x64" ], @@ -3979,9 +3498,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", - "integrity": "sha1-CPEuGWXW8n1omP+TJZISHMpqvEs=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", + "integrity": "sha1-38/ywa7VGLPSPM/7Sa+zSddPtgg=", "cpu": [ "x64" ], @@ -3993,9 +3512,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", - "integrity": "sha1-Sl3Lvnr31ByskrCXmOfBgx2h9Zk=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", + "integrity": "sha1-sLN+LXcEHjqncvUZKRMJq/TAOoQ=", "cpu": [ "arm64" ], @@ -4007,9 +3526,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", - "integrity": "sha1-B1sHE95ieEOnO0zw4IfFa1Pp14A=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", + "integrity": "sha1-W1pA5Ep0PdwOBrjhs5gvhW3Jzgo=", "cpu": [ "ia32" ], @@ -4021,9 +3540,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", - "integrity": "sha1-DLJAwUfA39Dj6v9MwGCnctOeFVw=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", + "integrity": "sha1-BfJdvJmBvuGubnE9qrEDlwRKRso=", "cpu": [ "x64" ], @@ -4371,13 +3890,6 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha1-v9AsHyIkVnZ2wVRRmfh8OoYdh40=", - "dev": true, - "license": "MIT" - }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/cors/-/cors-2.8.17.tgz", @@ -4396,9 +3908,9 @@ "license": "MIT" }, "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha1-6yNwpzvwSpAe66jyJZXH7g9+tY0=", + "version": "9.6.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha1-1Xla1zLOgXFfJ/ddqRMASlZ1FYQ=", "dev": true, "license": "MIT", "dependencies": { @@ -4418,9 +3930,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha1-ps4+VW4A/ZiV3Yct0XKtDUvWh/Q=", + "version": "1.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha1-Yo7/7q4gZKG055946B2Ht+X8e1A=", "dev": true, "license": "MIT" }, @@ -4505,9 +4017,9 @@ "license": "MIT" }, "node_modules/@types/karma": { - "version": "6.3.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/karma/-/karma-6.3.8.tgz", - "integrity": "sha1-Bss+zdq+zoHrQ6EIeo8Brez2RkU=", + "version": "6.3.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/karma/-/karma-6.3.9.tgz", + "integrity": "sha1-dAqWeyZiCX4Tamf4HBhpn7365Fc=", "dev": true, "license": "MIT", "dependencies": { @@ -4525,12 +4037,12 @@ } }, "node_modules/@types/node": { - "version": "20.14.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-20.14.10.tgz", - "integrity": "sha1-oaIYKQ8bZChoLjrwRHheWHTbRpo=", + "version": "22.13.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-22.13.10.tgz", + "integrity": "sha1-356jWMXtmRJmvswxCdwtyRJdd+Q=", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.20.0" } }, "node_modules/@types/parse5": { @@ -4615,9 +4127,9 @@ "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha1-Awd0cjovf6r+v2RfTlpINx3KYik=", + "version": "17.0.33", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha1-jDIwPag+7AUKhLPHrnufki0T4y0=", "dev": true, "license": "MIT", "dependencies": { @@ -4678,13 +4190,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -4695,17 +4207,10 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -4744,13 +4249,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -4761,13 +4266,6 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", @@ -4815,13 +4313,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -4832,13 +4330,6 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-5.62.0.tgz", @@ -4882,13 +4373,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -4899,17 +4390,10 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -4947,9 +4431,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -4978,9 +4462,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha1-dWZBrbWHhRtcyz4JXa8nrlgchAY=", + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha1-0Gu7OE689sUF/eHD0O1N3/4Kr/g=", "dev": true, "license": "ISC" }, @@ -5036,82 +4520,6 @@ "node": ">=10.0.0" } }, - "node_modules/@wdio/logger/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@wdio/logger/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wdio/logger/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@wdio/logger/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@wdio/logger/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@wdio/logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@wdio/protocols": { "version": "6.12.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@wdio/protocols/-/protocols-6.12.0.tgz", @@ -5149,73 +4557,73 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha1-uxag6LGRT5efRYZMI4Gcw+Pw1Ls=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha1-qfagfysDyVyNOMRTah/ftSH/VbY=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha1-2svLla/xNcgmD3f6O0xf6mAKZDE=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha1-/Moe7dscxOe27tT8eVbWgTshufs=", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha1-YTL2jErNWdzRQcRLGMvrvZ8vp2g=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha1-4KFhUiSLw42u523X4h8Vxe86sec=", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha1-bfINJy6lQ5vyCrNJK3+3Dpv8s/Y=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha1-giqbxgMWZTH31d+E5ntb+ZtyuWs=", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha1-y85efgwb0yz0kFrkRO9kzqkZ8bU=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha1-29kyVI5xGfS4p4d/1ajSDmNJCy0=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha1-uy69s7g6om2bqtTEbUMVKDrNUek=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha1-5VYQh1j0SKroTIUOWTzhig6zHgs=", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha1-PaYjIzrhpgQJtQmlKt6bwio3978=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha1-lindqcRDDqtUtZEFPW3G87oFA0g=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha1-u2ZckdCxT//OsOOCmMMprwQ8bjo=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha1-HF6qzh1gatosf9cEXqk1bFnuDbo=", "dev": true, "license": "MIT", "dependencies": { @@ -5223,9 +4631,9 @@ } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha1-cOYOXoL5rIERi8JTgaCyg4kyQNc=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha1-V8XD3rAQXQLOJfo/109OvJ/Qu7A=", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5233,79 +4641,79 @@ } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha1-kPi8NMVhWV/hVmA75yU8280Pq1o=", + "version": "1.13.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha1-kXog6T9xrVYClmwtaFrgxsIfYPE=", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha1-n58/9SoUyYCTm+DvnV3568Z4rjs=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha1-rGaJ9QIhm1kZjd7ELc1JaxAE1Zc=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha1-plIGAdobVwBEgnNmanGtCkXXhUc=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha1-mR5/DAkMsLtiu6yIIHbj0hnalXA=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha1-nm6BR138+2LatXSsLdo4ImwjK8U=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha1-5vce18yuRngcIGAX08FMUO+oEGs=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha1-xHrLkObwgzkeP6YdETZQ7qHpWTc=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha1-s+E/GJNgXKeLUsaOVM9qhl+Qufs=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha1-vOz2YdfRq9r5idg0Gkgz4z4rMaw=", + "version": "1.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha1-O7PpY4qK5f2vlhDnoGtNn5qm/gc=", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -5402,11 +4810,21 @@ "node": ">= 0.6" } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha1-cWFr3MviXielRDngBG6JynbfIkg=", - "dev": true, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha1-ch1dwQ99W1YJqJF3PUdzF5aTXfs=", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5426,16 +4844,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha1-frFVexugXvGLXtDsZ1kb+rBGiO8=", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -5447,9 +4855,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha1-nK6sKe76oMQePUxlE33k1vNN9D4=", + "version": "8.3.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha1-eU3RacOXft9LpOpHWDWHxYZiNrc=", "dev": true, "license": "MIT", "dependencies": { @@ -5473,13 +4881,13 @@ } }, "node_modules/agent-base/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5490,17 +4898,10 @@ } } }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha1-JnOtE4mzxBjFogxdc2T5PKBL6SM=", + "version": "4.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha1-Nfc+lLP0C/ZfEFIZxiOtGcE26mo=", "dev": true, "license": "MIT", "dependencies": { @@ -5583,16 +4984,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-align/-/ansi-align-3.0.1.tgz", @@ -5630,16 +5021,19 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -5656,6 +5050,19 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/aproba/-/aproba-2.0.0.tgz", @@ -5823,16 +5230,16 @@ } }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/async/-/async-3.2.5.tgz", - "integrity": "sha1-69Uqj9r3oiiaJN85n42Ehcika2Y=", + "version": "3.2.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/async/-/async-3.2.6.tgz", + "integrity": "sha1-Gwco4Ukp1RuFtEm38G4nwRReOM4=", "dev": true, "license": "MIT" }, @@ -5874,9 +5281,9 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha1-pMw0mjhRmHw8SsLXeFwYdE9tqbo=", + "version": "1.6.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha1-qZWH1Ou/vVpuOyG9tdX6OFdnq+Q=", "dev": true, "license": "Apache-2.0" }, @@ -5902,82 +5309,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -6012,14 +5343,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha1-MDIN/j/+GjNsFa/c2v1v1hWyXjM=", + "version": "0.4.12", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha1-ylW77Iqw7e7vPXuP/XUyLiEIeak=", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -6027,51 +5358,54 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha1-eJrIJAWtZkwgR20CM7SFKB3rnHc=", + "version": "0.11.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha1-Tk4YLxuzfHumLir4HY3QnfMTRPY=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha1-rdxH4kDt0doQWOvaAwIfOCu6eF4=", + "version": "0.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha1-q+sfPxx2LqzjdYf0JUiwi1d4m8g=", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha1-tDmSObibKgEfndvj5PQB/EDP9zs=", + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha1-mpKer+zkGWEu9K5PYLGGLrrY7zA=", "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -6102,54 +5436,72 @@ "license": "MIT" }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha1-MUDMp6DhHUmz7cUEGrVgZZ/Y4fg=", + "version": "2.5.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha1-FhQ9Q14e2er9GrhfEribM1ekF0U=", "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { - "version": "2.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-fs/-/bare-fs-2.3.1.tgz", - "integrity": "sha1-zb1j2selUt+yuH0YyCIpjR79IT0=", + "version": "4.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-fs/-/bare-fs-4.0.1.tgz", + "integrity": "sha1-hYRPNNqBnHZ1TVRTI6iyPtNhfHY=", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.0.0", - "bare-path": "^2.0.0", + "bare-path": "^3.0.0", "bare-stream": "^2.0.0" + }, + "engines": { + "bare": ">=1.7.0" } }, "node_modules/bare-os": { - "version": "2.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-os/-/bare-os-2.4.0.tgz", - "integrity": "sha1-XeXjuncE9FnJZWYp7cp8xzbgZgg=", + "version": "3.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-os/-/bare-os-3.6.0.tgz", + "integrity": "sha1-FGXdfhvr4N7CMAl6I60A99tR+Vc=", "dev": true, "license": "Apache-2.0", - "optional": true + "optional": true, + "engines": { + "bare": ">=1.14.0" + } }, "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha1-WUEEyCnvZg5DtVieyNrvffbO2z4=", + "version": "3.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha1-tZ0YEwulKmr5J22z6WouPT6lIXg=", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "bare-os": "^2.1.0" + "bare-os": "^3.0.1" } }, "node_modules/bare-stream": { - "version": "2.1.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-stream/-/bare-stream-2.1.3.tgz", - "integrity": "sha1-BwtpkZljpDfMniBVTt4HnOChKbI=", + "version": "2.6.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha1-u6joeWdMTCf34ngF3wBcFdeiygc=", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "streamx": "^2.18.0" + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, "node_modules/base64-js": { @@ -6227,9 +5579,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha1-b+sOIcRyTQbef/ONo22tT1enR/0=", + "version": "1.20.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha1-GVNDEiHG+1zWPEs21T+rCSjlSMY=", "dev": true, "license": "MIT", "dependencies": { @@ -6241,7 +5593,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -6298,22 +5650,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/boxen/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/camelcase/-/camelcase-6.3.0.tgz", @@ -6327,66 +5663,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", @@ -6438,9 +5714,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha1-JE/oA2QfHBnCjEjEtuyXNus9Mu0=", + "version": "4.24.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha1-xrKGWj8IvLhgoOgnOJADuf5obks=", "dev": true, "funding": [ { @@ -6458,10 +5734,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -6714,18 +5990,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha1-BgFlmcQMVkmMGHadJzC+JCtvo7k=", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -6756,9 +6043,9 @@ } }, "node_modules/camel-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -6773,9 +6060,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001642", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", - "integrity": "sha1-aqZhDrJAZ8JG0wxX8FWp0Kf40F8=", + "version": "1.0.30001704", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/caniuse-lite/-/caniuse-lite-1.0.30001704.tgz", + "integrity": "sha1-ZkT+kJ2SSsOnEl6KCravlbHzKZA=", "dev": true, "funding": [ { @@ -6806,25 +6093,27 @@ } }, "node_modules/capital-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "version": "4.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/change-case": { @@ -6849,9 +6138,9 @@ } }, "node_modules/change-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -6928,7 +6217,17 @@ "rimraf": "^3.0.2" } }, - "node_modules/chrome-launcher/node_modules/glob": { + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/chrome-launcher/node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", @@ -6989,15 +6288,14 @@ } }, "node_modules/chromium-bidi": { - "version": "0.6.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chromium-bidi/-/chromium-bidi-0.6.0.tgz", - "integrity": "sha1-y6lzfc30KF0MsauCmOA9COE3C2Q=", + "version": "2.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chromium-bidi/-/chromium-bidi-2.1.2.tgz", + "integrity": "sha1-sHECefmTEo1OC0HIkiCeoJMhfZc=", "dev": true, "license": "Apache-2.0", "dependencies": { - "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", - "zod": "3.23.8" + "mitt": "^3.0.1", + "zod": "^3.24.1" }, "peerDependencies": { "devtools-protocol": "*" @@ -7020,9 +6318,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha1-xIU0Guj9mZyk7lry16HJrgHgCZw=", + "version": "1.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha1-D3lzHrjP4exyrNQGbvrJ1hmRsA0=", "dev": true, "license": "MIT" }, @@ -7049,10 +6347,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/client-ts": { - "resolved": "src/SignalR/clients/ts", - "link": true - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cliui/-/cliui-7.0.4.tgz", @@ -7111,19 +6405,22 @@ "license": "MIT" }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", "dev": true, "license": "MIT" }, @@ -7191,10 +6488,6 @@ "dev": true, "license": "MIT" }, - "node_modules/components.authentication": { - "resolved": "src/Components/WebAssembly/WebAssembly.Authentication/src/Interop", - "link": true - }, "node_modules/compress-commons": { "version": "4.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/compress-commons/-/compress-commons-4.1.2.tgz", @@ -7381,9 +6674,9 @@ } }, "node_modules/constant-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -7405,9 +6698,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha1-DkHyTeXs8xeUfIL8eJ4GqISCRDI=", + "version": "0.7.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha1-VWNpxHKiupEPKXmJG1JrNDYjftc=", "dev": true, "license": "MIT", "engines": { @@ -7415,9 +6708,9 @@ } }, "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha1-0hdR3bdWUYrFoA5NZkmd+YGmLbk=", + "version": "3.41.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha1-V3FNr7jHUaYJXQKKdCjx+1g0p3Y=", "hasInstallScript": true, "license": "MIT", "funding": { @@ -7426,13 +6719,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha1-yEQxDHhS9L30m40zlzC5fhf/Ce4=", + "version": "3.41.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha1-TN/OlfOajyd1m2Z89pPZbl3aPRc=", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.24.4" }, "funding": { "type": "opencollective", @@ -7556,82 +6849,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/create-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/create-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/create-require/-/create-require-1.1.1.tgz", @@ -7640,9 +6857,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "version": "7.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8=", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -7660,10 +6877,11 @@ "license": "MIT" }, "node_modules/css-shorthand-properties": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", - "integrity": "sha1-HICOY1U8KD8ony3Vb87o8zN72TU=", - "dev": true + "version": "1.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/css-shorthand-properties/-/css-shorthand-properties-1.1.2.tgz", + "integrity": "sha1-OP4thCIZBgfNsZwnPEIwO3dNr5k=", + "dev": true, + "license": "MIT" }, "node_modules/css-value": { "version": "0.0.1", @@ -7751,9 +6969,9 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha1-EEQJKITSRdG39lcl+krUxveBzCM=", + "version": "10.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha1-DzccfPbEiYzgr7CYNttzzYIBDyI=", "dev": true, "license": "MIT" }, @@ -8023,9 +7241,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1299070", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", - "integrity": "sha1-s+TPC2eKRvD5B65uB+A606U8AN8=", + "version": "0.0.1413902", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/devtools-protocol/-/devtools-protocol-0.0.1413902.tgz", + "integrity": "sha1-oPAP6eslqzN6j5ZWop4KGmn0JAE=", "dev": true, "license": "BSD-3-Clause" }, @@ -8120,15 +7338,26 @@ } }, "node_modules/dot-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, - "node_modules/dotnet-runtime": { - "resolved": "src/Components/dotnet-runtime-js", - "link": true + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/duplexer": { "version": "0.1.1", @@ -8185,9 +7414,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.827", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", - "integrity": "sha1-dgaO0ccd05Y+G+/IroFQBLLaagI=", + "version": "1.5.116", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/electron-to-chromium/-/electron-to-chromium-1.5.116.tgz", + "integrity": "sha1-t3nXPNDMdTBdEq5PBh1/e87kx2E=", "dev": true, "license": "ISC" }, @@ -8264,18 +7493,17 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha1-QwuA2IQMqrkaUOniPLVRRVGV/JM=", + "version": "6.6.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha1-Comj5rbB1LDCoqY3SV58FJ7I2O4=", "dev": true, "license": "MIT", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -8296,13 +7524,13 @@ } }, "node_modules/engine.io/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -8313,13 +7541,6 @@ } } }, - "node_modules/engine.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/engine.io/node_modules/ws": { "version": "8.17.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.17.1.tgz", @@ -8357,13 +7578,16 @@ } }, "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ent/-/ent-2.2.1.tgz", - "integrity": "sha1-aNyZoALxFXksJiObrtquqecMDKI=", + "version": "2.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ent/-/ent-2.2.2.tgz", + "integrity": "sha1-IqXtL9fODLz/HRR0z0kJpEvbboU=", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^1.4.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "punycode": "^1.4.1", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8393,9 +7617,9 @@ } }, "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha1-gfu4Hl2jXXToFJQa6rfDJaYG+zE=", + "version": "7.14.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha1-JtrF21RBjypMEVkVOgsq6YCDiq4=", "dev": true, "license": "MIT", "bin": { @@ -8436,14 +7660,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha1-x/rvvf+LJpbPX0aSHt+3fMS6OEU=", + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -8459,12 +7680,41 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha1-qO/sOj2pkeYO+mtjOnytarjSa3g=", + "version": "1.6.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha1-2kn1h/2eaO4kBP5OJWwMfTqBviE=", "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha1-HE8sSDcydZfOadLKGQp/3RcjOME=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha1-8x274MGDsAptJutjJcgQwP0YvU0=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/es6-error/-/es6-error-4.1.1.tgz", @@ -8480,9 +7730,9 @@ "license": "MIT" }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha1-VAdumrKepb89jx7WKs/7uIJy3yc=", + "version": "3.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha1-ARo/aYVroYnf+n3I/M6Z0qh5A+U=", "dev": true, "license": "MIT", "engines": { @@ -8497,13 +7747,16 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -8539,17 +7792,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=", + "version": "8.57.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha1-ffEJZUq6fju+XI6uUzxeRh08bKk=", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -8628,13 +7881,13 @@ } }, "node_modules/eslint-plugin-jsdoc/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -8645,30 +7898,10 @@ } } }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -8715,22 +7948,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/argparse/-/argparse-2.0.1.tgz", @@ -8738,51 +7955,14 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/eslint/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -8793,19 +7973,6 @@ } } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -8866,16 +8033,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/js-yaml/-/js-yaml-4.1.0.tgz", @@ -8905,13 +8062,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/p-locate/-/p-locate-5.0.0.tgz", @@ -8928,19 +8078,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", @@ -9145,9 +8282,9 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha1-ZKx1Jv40GrGKOQFs0ix4fQHgC/Y=", + "version": "3.1.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha1-qPJq25a/eOjNitEDeSjV5cBnnZE=", "dev": true, "license": "Apache-2.0" }, @@ -9180,13 +8317,13 @@ } }, "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -9213,13 +8350,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9235,9 +8365,9 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha1-qQRQHlfP3S/83tRemaVP71XkYSk=", + "version": "3.3.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha1-0G1YXOjbqQoWsFBcVDw8z7OuuBg=", "dev": true, "license": "MIT", "dependencies": { @@ -9245,7 +8375,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -9279,11 +8409,21 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha1-zd0u7PyDpxwb4swu8gYTMb6KcTQ=", + "version": "3.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha1-iPEwt3z66iN41Wv5cN6iElemh0g=", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -9296,9 +8436,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha1-KlI/B6TnsegaQrkbi/IlQQd1O0c=", + "version": "1.19.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha1-1Q6rqAPIhGqIPBZJKCHrzSzaVfU=", "dev": true, "license": "ISC", "dependencies": { @@ -9572,9 +8712,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha1-IdtHBymmc01JlwAvQ5yzCJh/Vno=", + "version": "3.3.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha1-Z8j62VRUp8er6/dLt47nSkQCM1g=", "dev": true, "license": "ISC" }, @@ -9586,9 +8726,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha1-f4FcDNpCScdP8J6V75fCO1/QOZs=", + "version": "1.15.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=", "dev": true, "funding": [ { @@ -9607,13 +8747,13 @@ } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha1-dnAEzPOlsw3zm+2QcYurQ/4KWfc=", + "version": "3.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha1-Mujp7Rtoo0l777msK2rfkqY4V28=", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -9637,14 +8777,16 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "version": "4.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha1-eEzczgZpqdaOlNEaxO6pgIjt0sQ=", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -9652,9 +8794,9 @@ } }, "node_modules/fp-ts": { - "version": "2.16.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fp-ts/-/fp-ts-2.16.8.tgz", - "integrity": "sha1-36HqHJZ6xnlMQ86HeuuO129eDfc=", + "version": "2.16.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fp-ts/-/fp-ts-2.16.9.tgz", + "integrity": "sha1-mWKPxeC7O0MsShbY9EVSRzgLroo=", "dev": true, "license": "MIT" }, @@ -9732,10 +8874,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functionaltests": { - "resolved": "src/SignalR/clients/ts/FunctionalTests", - "link": true - }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/gauge/-/gauge-4.0.4.tgz", @@ -9777,17 +8915,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha1-44X1pLUifUScPqu60FSU7wq76t0=", + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -9819,6 +8962,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-ready": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-ready/-/get-ready-1.0.0.tgz", @@ -9840,29 +8997,28 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha1-DSZpe8E8+RCS5RmqY6pg7ltvOFo=", + "version": "6.0.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha1-barunhL5dZ4Z5VujE5Vog+9Q4Kc=", "dev": true, "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -9873,28 +9029,6 @@ } } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha1-5w4X361kIyKH0BkpOZ4Op8hrDls=", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/glob": { "version": "8.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-8.1.0.tgz", @@ -9978,9 +9112,9 @@ } }, "node_modules/global-agent/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -10039,13 +9173,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha1-Kf923mnax0ibfAkYpXiOVkd8Myw=", + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10120,13 +9254,13 @@ "license": "MIT" }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -10142,10 +9276,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha1-sx3f6bDm6ZFFNqarKGQm0CFPd/0=", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", "dev": true, "license": "MIT", "engines": { @@ -10155,12 +9289,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha1-u3ssQ0klHc6HsSX3vfh0qnyLOfg=", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha1-LNxC1AvvLltO6rfAGnPFTOerWrw=", "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -10211,16 +9348,16 @@ } }, "node_modules/header-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, "node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha1-YpRCx4iaacBd5gTVKZa3T+bybVg=", + "version": "6.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/hosted-git-info/-/hosted-git-info-6.1.3.tgz", + "integrity": "sha1-LuGhSgl6Eja934Zyw1thPEbFWUY=", "dev": true, "license": "ISC", "dependencies": { @@ -10324,13 +9461,13 @@ } }, "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -10341,13 +9478,6 @@ } } }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -10376,13 +9506,13 @@ } }, "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -10393,13 +9523,6 @@ } } }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/human-signals/-/human-signals-2.1.0.tgz", @@ -10454,9 +9577,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha1-UHPlVM1CxbM7OUN19Ti4WT401O8=", + "version": "5.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=", "dev": true, "license": "MIT", "engines": { @@ -10503,9 +9626,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", + "version": "3.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha1-nOy1ZQPAraHydB271lRuSxO1fM8=", "dev": true, "license": "MIT", "dependencies": { @@ -10530,9 +9653,9 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha1-tEed+KX9RPbNziQHBnVnYGPJXLQ=", + "version": "3.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha1-w9XHRXmMAqb4uJdyarpRABhu4mA=", "dev": true, "license": "MIT", "dependencies": { @@ -10615,82 +9738,6 @@ "node": ">=6.0.0" } }, - "node_modules/inspectpack/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inspectpack/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inspectpack/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inspectpack/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/inspectpack/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inspectpack/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/interpret/-/interpret-2.2.0.tgz", @@ -10702,9 +9749,9 @@ } }, "node_modules/io-ts": { - "version": "2.2.21", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/io-ts/-/io-ts-2.2.21.tgz", - "integrity": "sha1-TvdUF29wgqEJnQTH1cTqUyZ8Uwo=", + "version": "2.2.22", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/io-ts/-/io-ts-2.2.22.tgz", + "integrity": "sha1-WrDTY2/oSUonXwJmRhqwGdpLjQs=", "dev": true, "license": "MIT", "peerDependencies": { @@ -10780,9 +9827,9 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha1-Q7jvn0amoIiI22ex/9Tsnj39WdE=", + "version": "2.16.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha1-KpiAGoSfQ+Kt1kT7trxiKbGaTvQ=", "dev": true, "license": "MIT", "dependencies": { @@ -10937,6 +9984,25 @@ "@types/estree": "*" } }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha1-dtcKPtEO+b5I61d4h9dCBb8MrSI=", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/is-stream/-/is-stream-2.0.1.tgz", @@ -11041,29 +10107,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -11080,13 +10123,13 @@ } }, "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -11097,13 +10140,6 @@ } } }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/istanbul-reports": { "version": "3.1.7", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/istanbul-reports/-/istanbul-reports-3.1.7.tgz", @@ -11135,9 +10171,9 @@ } }, "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jake/-/jake-10.9.1.tgz", - "integrity": "sha1-jclrf8xByxmqUCr1BtpOHVb15is=", + "version": "10.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jake/-/jake-10.9.2.tgz", + "integrity": "sha1-auSH5qaa/sOl4WdiiZa1nzWuK38=", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11153,109 +10189,33 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "node_modules/jasmine": { + "version": "3.99.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jasmine/-/jasmine-3.99.0.tgz", + "integrity": "sha1-fMeu2nreLVdpT8gYo3T3eMu06mI=", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "glob": "^7.1.6", + "jasmine-core": "~3.99.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "jasmine": "bin/jasmine.js" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "node_modules/jasmine-core": { + "version": "3.99.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jasmine-core/-/jasmine-core-3.99.1.tgz", + "integrity": "sha1-W/pLLXZhiGi/rEyP8Iuyb/+kEg0=", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jasmine": { - "version": "3.99.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jasmine/-/jasmine-3.99.0.tgz", - "integrity": "sha1-fMeu2nreLVdpT8gYo3T3eMu06mI=", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "^7.1.6", - "jasmine-core": "~3.99.0" - }, - "bin": { - "jasmine": "bin/jasmine.js" - } - }, - "node_modules/jasmine-core": { - "version": "3.99.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jasmine-core/-/jasmine-core-3.99.1.tgz", - "integrity": "sha1-W/pLLXZhiGi/rEyP8Iuyb/+kEg0=", - "dev": true, - "license": "MIT" - }, - "node_modules/jasmine/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", - "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", - "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/jasmine/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", + "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", + "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11346,66 +10306,16 @@ } }, "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-circus/node_modules/pretty-format": { @@ -11423,19 +10333,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-circus/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -11443,19 +10340,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-cli": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-cli/-/jest-cli-29.7.0.tgz", @@ -11490,39 +10374,6 @@ } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/jest-cli/node_modules/cliui": { "version": "8.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/cliui/-/cliui-8.0.1.tgz", @@ -11538,49 +10389,6 @@ "node": ">=12" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-cli/node_modules/yargs": { "version": "17.7.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/yargs/-/yargs-17.7.2.tgz", @@ -11647,87 +10455,37 @@ } }, "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", + "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", - "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-config/node_modules/pretty-format": { @@ -11745,19 +10503,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-config/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -11765,19 +10510,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-diff": { "version": "26.6.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-diff/-/jest-diff-26.6.2.tgz", @@ -11794,69 +10526,6 @@ "node": ">= 10.14.2" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-diff/node_modules/jest-get-type": { "version": "26.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-get-type/-/jest-get-type-26.3.0.tgz", @@ -11867,19 +10536,6 @@ "node": ">= 10.14.2" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-docblock": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-docblock/-/jest-docblock-29.7.0.tgz", @@ -11911,66 +10567,16 @@ } }, "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-each/node_modules/pretty-format": { @@ -11988,19 +10594,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-each/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -12008,19 +10601,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", @@ -12145,116 +10725,40 @@ } }, "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha1-ykLHWDEPNlv6caC9oKgHFgt3aBI=", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha1-ykLHWDEPNlv6caC9oKgHFgt3aBI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha1-6DVX3BLq5jqZ4AOkY4ix3LtE234=", + "node_modules/jest-jasmine2/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha1-6DVX3BLq5jqZ4AOkY4ix3LtE234=", "dev": true, "license": "MIT" }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-junit": { "version": "13.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-junit/-/jest-junit-13.2.0.tgz", @@ -12337,58 +10841,18 @@ } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/jest-matcher-utils/node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -12399,16 +10863,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-matcher-utils/node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-diff/-/jest-diff-29.7.0.tgz", @@ -12440,19 +10894,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-matcher-utils/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -12460,19 +10901,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-message-util": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-message-util/-/jest-message-util-29.7.0.tgz", @@ -12495,66 +10923,16 @@ } }, "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-message-util/node_modules/pretty-format": { @@ -12572,19 +10950,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-message-util/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -12592,19 +10957,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-mock/-/jest-mock-29.7.0.tgz", @@ -12683,189 +11035,37 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha1-gJrwctQIpT3P0uhJpMl20xMvcY4=", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha1-gJrwctQIpT3P0uhJpMl20xMvcY4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime": { @@ -12902,59 +11102,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", @@ -12976,29 +11123,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -13032,58 +11156,18 @@ } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/jest-snapshot/node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -13094,16 +11178,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot/node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-diff/-/jest-diff-29.7.0.tgz", @@ -13135,19 +11209,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-snapshot/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -13156,9 +11217,9 @@ "license": "MIT" }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -13168,111 +11229,35 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha1-I8K2K/sivoK0TemAVYAv83EPwLw=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha1-I8K2K/sivoK0TemAVYAv83EPwLw=", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "node": ">=8.6" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/jest-validate": { @@ -13294,16 +11279,13 @@ } }, "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "version": "5.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -13322,53 +11304,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pretty-format/-/pretty-format-29.7.0.tgz", @@ -13384,19 +11319,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/jest-validate/node_modules/react-is": { "version": "18.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/react-is/-/react-is-18.3.1.tgz", @@ -13404,19 +11326,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -13437,82 +11346,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-worker/-/jest-worker-29.7.0.tgz", @@ -13529,16 +11362,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-8.1.1.tgz", @@ -13640,9 +11463,9 @@ } }, "node_modules/jsdom/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.18.0.tgz", - "integrity": "sha1-DXUFpur+Kw5xLSMrQiefU7wom7w=", + "version": "8.18.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.18.1.tgz", + "integrity": "sha1-6hMdN4Th39/5GtsKShFrEnUV48s=", "dev": true, "license": "MIT", "engines": { @@ -13662,16 +11485,16 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "version": "3.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha1-dNM1ojT2ftGZB/2t+sfM+dQJgl0=", "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -13744,9 +11567,9 @@ "license": "MIT" }, "node_modules/karma": { - "version": "6.4.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/karma/-/karma-6.4.3.tgz", - "integrity": "sha1-dj5QD5lZchi7tTbeGhSsxM7qfOg=", + "version": "6.4.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/karma/-/karma-6.4.4.tgz", + "integrity": "sha1-36WkJs9ai1O0PNVO8NDQl0I1FJI=", "dev": true, "license": "MIT", "dependencies": { @@ -13888,31 +11711,96 @@ "xmlbuilder": "12.0.0" }, "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "karma": ">=0.9" + "node": ">= 8" + }, + "peerDependencies": { + "karma": ">=0.9" + } + }, + "node_modules/karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "peerDependencies": { + "karma": ">=0.13" + } + }, + "node_modules/karma-mocha-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha1-Ej1keekq1FrYl9QFTjx8p9tJROE=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/karma-mocha-reporter/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/karma-mocha-reporter": { - "version": "2.2.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", - "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "node_modules/karma-mocha-reporter/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "strip-ansi": "^4.0.0" - }, - "peerDependencies": { - "karma": ">=0.13" + "color-name": "1.1.3" } }, - "node_modules/karma-mocha-reporter/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha1-Ej1keekq1FrYl9QFTjx8p9tJROE=", + "node_modules/karma-mocha-reporter/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-mocha-reporter/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/karma-mocha-reporter/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "license": "MIT", "engines": { @@ -13932,6 +11820,19 @@ "node": ">=4" } }, + "node_modules/karma-mocha-reporter/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/karma-safari-launcher": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", @@ -13980,82 +11881,6 @@ "karma": "5.x || 6.x" } }, - "node_modules/karma-summary-reporter/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/karma-summary-reporter/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/karma-summary-reporter/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/karma-summary-reporter/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-summary-reporter/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-summary-reporter/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/karma/node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/glob/-/glob-7.2.3.tgz", @@ -14380,6 +12205,84 @@ "node": ">=4" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/log4js": { "version": "6.9.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/log4js/-/log4js-6.9.1.tgz", @@ -14398,13 +12301,13 @@ } }, "node_modules/log4js/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -14415,17 +12318,10 @@ } } }, - "node_modules/log4js/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/loglevel": { - "version": "1.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/loglevel/-/loglevel-1.9.1.tgz", - "integrity": "sha1-1jl2rJvNA8fIcxFtQcKoW6//G+c=", + "version": "1.9.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha1-wuAo1sdXcgEH305kUIUw22Yhugg=", "dev": true, "license": "MIT", "engines": { @@ -14454,9 +12350,9 @@ } }, "node_modules/lower-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -14480,13 +12376,13 @@ } }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha1-Ej2cQaDLVkDIkrBB1M+zvQqks54=", + "version": "0.30.17", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha1-RQpElnPSRg5bvPupphkWoXFMdFM=", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-dir": { @@ -14506,9 +12402,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -14671,9 +12567,9 @@ } }, "node_modules/make-fetch-happen/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -14759,17 +12655,14 @@ "node": ">=10" } }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, "node_modules/media-typer": { @@ -14847,9 +12740,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha1-M+gZDZ/kdKmJVSX1YY7uE21GwuU=", + "version": "4.0.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=", "dev": true, "license": "MIT", "dependencies": { @@ -14860,21 +12753,18 @@ "node": ">=8.6" } }, - "node_modules/microsoft.aspnetcore.components.web.js": { - "resolved": "src/Components/Web.JS", - "link": true - }, - "node_modules/microsoft.aspnetcore.projecttemplates.tests": { - "resolved": "src/ProjectTemplates/test/Templates.Tests", - "link": true - }, - "node_modules/microsoft.components.customelements": { - "resolved": "src/Components/CustomElements/src/js", - "link": true - }, - "node_modules/microsoft.msal.components.webassembly": { - "resolved": "src/Components/WebAssembly/Authentication.Msal/src/Interop", - "link": true + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/mime": { "version": "2.6.0", @@ -15075,9 +12965,9 @@ "license": "ISC" }, "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha1-ftu5JYj7/C/x2y/BA5est7a0Sqc=", + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha1-USFhbHehHEBsP/p3UJ4Ld7smfsM=", "dev": true, "license": "MIT", "dependencies": { @@ -15235,7 +13125,6 @@ "version": "2.1.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.3.tgz", "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, "license": "MIT" }, "node_modules/natural-compare": { @@ -15253,9 +13142,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0=", + "version": "0.6.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha1-d3lI4kUmUcVwtxLdAcI+JicT//c=", "dev": true, "license": "MIT", "engines": { @@ -15291,9 +13180,9 @@ } }, "node_modules/no-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -15403,9 +13292,9 @@ } }, "node_modules/node-gyp/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -15423,9 +13312,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha1-L/sFO864sr6Elezhq2zmAMRGGws=", + "version": "2.0.19", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha1-nkRaUpUJUexNF32EOvNwtBHK8xQ=", "dev": true, "license": "MIT" }, @@ -15462,9 +13351,9 @@ } }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -15523,9 +13412,9 @@ } }, "node_modules/npm-install-checks/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -15562,9 +13451,9 @@ } }, "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -15604,9 +13493,9 @@ } }, "node_modules/npm-pick-manifest/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -15730,9 +13619,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.12", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/nwsapi/-/nwsapi-2.2.12.tgz", - "integrity": "sha1-+2r1wOw1sntFges7utNOyeXGlvg=", + "version": "2.2.18", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/nwsapi/-/nwsapi-2.2.18.tgz", + "integrity": "sha1-PE15J+HvTQQtMZQ47P2mzYG37kE=", "dev": true, "license": "MIT" }, @@ -15747,9 +13636,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha1-3qAIhGf7mR5nr0BYFHokgkowQ/8=", + "version": "1.13.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=", "dev": true, "license": "MIT", "engines": { @@ -15940,46 +13829,43 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha1-D7Aklr2fuK5+sRz9mDhtqqxEL1g=", + "version": "7.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha1-nPrzP/Jdo29hR6IIRCMOySwG5d8=", "dev": true, "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", + "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha1-vb3tffsJa3UaKgh+7rlmRyWy4xc=", + "version": "7.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha1-KUNeuCG8QZRjOluJ5bxHA7r8JaE=", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -16005,34 +13891,27 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha1-notQE4cymeEfq2/VSEBdotbGArI=", + "version": "7.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha1-2o3+rH2hMLBcK6S1nJts1mYRprk=", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { "node": ">= 14" } }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha1-kHHcoXr5X0gzADFvSwY1ePoNsIw=", + "version": "8.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha1-uc205+mYUJ12WdaJznaXrCFkW+4=", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -16055,9 +13934,9 @@ } }, "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha1-5QHNMJSyeEletCWNTJ9tWsMBnwA=", + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha1-TxRxoBCCeob5TP2bByfjbSZ95QU=", "dev": true, "license": "BlueOak-1.0.0" }, @@ -16106,9 +13985,9 @@ } }, "node_modules/param-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -16145,13 +14024,13 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha1-Bza+u/13eTgjJAojt/xeAQt/jjI=", + "version": "7.2.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha1-iSj1WRXmEl9DDMRDCXZb8XVWozo=", "dev": true, "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -16179,9 +14058,9 @@ } }, "node_modules/pascal-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -16197,9 +14076,9 @@ } }, "node_modules/path-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -16280,20 +14159,20 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha1-qK1Xm1cZUvDl0liS3lRFvP4lqqE=", + "version": "1.1.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha1-PTIa8+q5ObCDyPkpodEs2oHCa2s=", "dev": true, "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "version": "4.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha1-d8dCkx6PO4gglGx2zQwfE3MNHas=", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -16388,82 +14267,6 @@ "@types/yargs-parser": "*" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-format/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/proc-log/-/proc-log-3.0.0.tgz", @@ -16536,46 +14339,43 @@ } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha1-tOLdUd7is3d0iu+NRWBMLXYIZS0=", + "version": "6.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha1-nkmsuo5O4jSqy1Ofie2cI9AvIy0=", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha1-vb3tffsJa3UaKgh+7rlmRyWy4xc=", + "version": "7.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha1-KUNeuCG8QZRjOluJ5bxHA7r8JaE=", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -16601,13 +14401,13 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha1-notQE4cymeEfq2/VSEBdotbGArI=", + "version": "7.0.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha1-2o3+rH2hMLBcK6S1nJts1mYRprk=", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -16624,21 +14424,14 @@ "node": ">=12" } }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha1-kHHcoXr5X0gzADFvSwY1ePoNsIw=", + "version": "8.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha1-uc205+mYUJ12WdaJznaXrCFkW+4=", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -16661,15 +14454,30 @@ "license": "MIT" }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/psl/-/psl-1.9.0.tgz", - "integrity": "sha1-0N8qE38AeUVl/K87LADNCfjVpac=", - "license": "MIT" + "version": "1.15.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/psl/-/psl-1.15.0.tgz", + "integrity": "sha1-vazjGJbx2XzsannoIkiYzpPZdMY=", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/psl/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU=", + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pump/-/pump-3.0.0.tgz", - "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "version": "3.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/pump/-/pump-3.0.2.tgz", + "integrity": "sha1-g28+3WvC7lmSVskk/+DYhXPdy/g=", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -16684,20 +14492,22 @@ "license": "MIT" }, "node_modules/puppeteer": { - "version": "22.13.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/puppeteer/-/puppeteer-22.13.0.tgz", - "integrity": "sha1-/1ZhYWUsL73C2/LDjIW+hBi4owI=", + "version": "24.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/puppeteer/-/puppeteer-24.4.0.tgz", + "integrity": "sha1-+0WmfnL05uNNuPQE72HN1CCZ5uY=", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.2.3", + "@puppeteer/browsers": "2.8.0", + "chromium-bidi": "2.1.2", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1299070", - "puppeteer-core": "22.13.0" + "devtools-protocol": "0.0.1413902", + "puppeteer-core": "24.4.0", + "typed-query-selector": "^2.12.0" }, "bin": { - "puppeteer": "lib/esm/puppeteer/node/cli.js" + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { "node": ">=18" @@ -16745,13 +14555,13 @@ "license": "ISC" }, "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -16804,13 +14614,6 @@ "node": ">= 6.0.0" } }, - "node_modules/puppeteer-core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/puppeteer-core/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rimraf/-/rimraf-3.0.2.tgz", @@ -16828,9 +14631,9 @@ } }, "node_modules/puppeteer-core/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha1-SJoVq4Xx8L76uzcLfeT561y+h4Q=", + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha1-+zuIQ6JrbxOgjmBveSKHXrH7v5I=", "dev": true, "license": "MIT", "dependencies": { @@ -16863,13 +14666,13 @@ } }, "node_modules/puppeteer/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -16880,34 +14683,28 @@ } } }, - "node_modules/puppeteer/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/puppeteer/node_modules/puppeteer-core": { - "version": "22.13.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/puppeteer-core/-/puppeteer-core-22.13.0.tgz", - "integrity": "sha1-q6RekAzVN5/eiFELf0kVAXzGtcM=", + "version": "24.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/puppeteer-core/-/puppeteer-core-24.4.0.tgz", + "integrity": "sha1-owHFg0T+k5tIdwRZNoHqn5E/5vg=", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "2.2.3", - "chromium-bidi": "0.6.0", - "debug": "^4.3.5", - "devtools-protocol": "0.0.1299070", - "ws": "^8.18.0" + "@puppeteer/browsers": "2.8.0", + "chromium-bidi": "2.1.2", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1413902", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.1" }, "engines": { "node": ">=18" } }, "node_modules/puppeteer/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.18.0.tgz", - "integrity": "sha1-DXUFpur+Kw5xLSMrQiefU7wom7w=", + "version": "8.18.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.18.1.tgz", + "integrity": "sha1-6hMdN4Th39/5GtsKShFrEnUV48s=", "dev": true, "license": "MIT", "engines": { @@ -16954,13 +14751,13 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.11.0.tgz", - "integrity": "sha1-/Q2WNEb3pl4TZ+AavYVClFPww3o=", + "version": "6.13.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/qs/-/qs-6.13.0.tgz", + "integrity": "sha1-bKO9WEOffiRWVXmJl3h7DYilGQY=", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -17015,13 +14812,6 @@ ], "license": "MIT" }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha1-9vB6yCwf1g+C4Ji0F6gOUvH0wUI=", - "dev": true, - "license": "MIT" - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/quick-lru/-/quick-lru-5.1.1.tgz", @@ -17243,6 +15033,19 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rechoir/-/rechoir-0.7.1.tgz", @@ -17264,9 +15067,9 @@ "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha1-aw4FSJ2QdrBMQ28xjZsGe7pFlIA=", + "version": "10.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha1-Ym4534w3Izjqm4Ao0fmdw/2cPbA=", "dev": true, "license": "MIT", "dependencies": { @@ -17294,16 +15097,16 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha1-EaKwaITzUnrsPpPbv0o7lYqVVGs=", + "version": "6.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha1-DlGQ155UK/KUlV3Mq64E08fVOCY=", "dev": true, "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -17311,26 +15114,37 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha1-3yP/JuDFswCmRwytFgqdCQw6N6s=", + "dev": true, + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha1-Jy0FqhDHwfZwlbH/Ct2uhEL8Vwk=", + "version": "0.12.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha1-DoRt9sZTBYZCk3feVuBHVYOwiNw=", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "version": "3.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha1-u4sJpll7pCZCXy5KByRcPQC5ND4=", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, "node_modules/require-directory": { @@ -17360,19 +15174,22 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha1-tsh6nyqgbfq1Lj1wrIzeMh+lpI0=", + "version": "1.22.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha1-tmPoP/sJu/I4aURza6roAwKbizk=", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -17407,9 +15224,9 @@ } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha1-+Mk0uOahP1OeOLcJji42E08B6AA=", + "version": "2.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha1-QZVebxtAE7dYb4c3SaY13qB+vj8=", "dev": true, "license": "MIT", "engines": { @@ -17456,9 +15273,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha1-D+E7lSLhRz9RtVjueW4I8R+bSJ8=", "dev": true, "license": "MIT", "engines": { @@ -17481,9 +15298,9 @@ "license": "MIT" }, "node_modules/rimraf": { - "version": "5.0.9", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rimraf/-/rimraf-5.0.9.tgz", - "integrity": "sha1-w7qhuIbq3C7HmBoGpZPD0BE0/+k=", + "version": "5.0.10", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha1-I7mEPT3JLbcfluGizpLjn9KoIhw=", "dev": true, "license": "ISC", "dependencies": { @@ -17492,9 +15309,6 @@ "bin": { "rimraf": "dist/esm/bin.mjs" }, - "engines": { - "node": "14 >=14.20 || 16 >=16.20 || >=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -17582,13 +15396,13 @@ "license": "BSD-3-Clause" }, "node_modules/rollup": { - "version": "4.18.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rollup/-/rollup-4.18.1.tgz", - "integrity": "sha1-GKYG3152ylO4pp8tjqslbWndqFE=", + "version": "4.35.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/rollup/-/rollup-4.35.0.tgz", + "integrity": "sha1-dslduheled9MAMOVWu0yql1Nxm0=", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -17598,22 +15412,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.1", - "@rollup/rollup-android-arm64": "4.18.1", - "@rollup/rollup-darwin-arm64": "4.18.1", - "@rollup/rollup-darwin-x64": "4.18.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", - "@rollup/rollup-linux-arm-musleabihf": "4.18.1", - "@rollup/rollup-linux-arm64-gnu": "4.18.1", - "@rollup/rollup-linux-arm64-musl": "4.18.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", - "@rollup/rollup-linux-riscv64-gnu": "4.18.1", - "@rollup/rollup-linux-s390x-gnu": "4.18.1", - "@rollup/rollup-linux-x64-gnu": "4.18.1", - "@rollup/rollup-linux-x64-musl": "4.18.1", - "@rollup/rollup-win32-arm64-msvc": "4.18.1", - "@rollup/rollup-win32-ia32-msvc": "4.18.1", - "@rollup/rollup-win32-x64-msvc": "4.18.1", + "@rollup/rollup-android-arm-eabi": "4.35.0", + "@rollup/rollup-android-arm64": "4.35.0", + "@rollup/rollup-darwin-arm64": "4.35.0", + "@rollup/rollup-darwin-x64": "4.35.0", + "@rollup/rollup-freebsd-arm64": "4.35.0", + "@rollup/rollup-freebsd-x64": "4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "4.35.0", + "@rollup/rollup-linux-arm64-gnu": "4.35.0", + "@rollup/rollup-linux-arm64-musl": "4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "4.35.0", + "@rollup/rollup-linux-s390x-gnu": "4.35.0", + "@rollup/rollup-linux-x64-gnu": "4.35.0", + "@rollup/rollup-linux-x64-musl": "4.35.0", + "@rollup/rollup-win32-arm64-msvc": "4.35.0", + "@rollup/rollup-win32-ia32-msvc": "4.35.0", + "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" } }, @@ -17694,6 +15511,24 @@ ], "license": "MIT" }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha1-f4fftnoxUHguqvGFg/9dFxGsEME=", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -17702,9 +15537,9 @@ "license": "MIT" }, "node_modules/saucelabs": { - "version": "7.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/saucelabs/-/saucelabs-7.5.0.tgz", - "integrity": "sha1-dciKleFRmmO3mXjRRqdkou7LTw4=", + "version": "9.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/saucelabs/-/saucelabs-9.0.2.tgz", + "integrity": "sha1-mfYXDz14n8sL4vJw99N6nXzfUYc=", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17769,9 +15604,9 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha1-cNfJPhU6JzqAWAGILr07/yDYnIs=", + "version": "4.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha1-O2afBPcf8t+1q6fOLVqdebNWIsA=", "dev": true, "license": "MIT", "dependencies": { @@ -17781,7 +15616,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -17864,12 +15699,12 @@ } }, "node_modules/selenium-standalone/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -17880,12 +15715,6 @@ } } }, - "node_modules/selenium-standalone/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "license": "MIT" - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", @@ -17916,9 +15745,9 @@ } }, "node_modules/sentence-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -17969,29 +15798,11 @@ "license": "ISC" }, "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha1-Exkh5Q9i/xpmpGHX1i17IdXRWlE=", + "version": "2.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha1-MBbxUAciAt++kPre4FNXPMidKUM=", "license": "MIT" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha1-qscjFBmOrtl1z3eyw7a4gGleVEk=", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -18034,16 +15845,73 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha1-q9Jft80kuvRUZkBrEJa3gxySFfI=", + "version": "1.1.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -18191,16 +16059,16 @@ } }, "node_modules/snake-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha1-Vustl2rvnRRF83OmLXgaQcet2Pg=", + "version": "4.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha1-+g6v+WXMl/30JF6NR5RhhFn3VYo=", "dev": true, "license": "MIT", "dependencies": { @@ -18208,7 +16076,7 @@ "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -18228,13 +16096,13 @@ } }, "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -18245,13 +16113,6 @@ } } }, - "node_modules/socket.io-adapter/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/socket.io-adapter/node_modules/ws": { "version": "8.17.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ws/-/ws-8.17.1.tgz", @@ -18289,13 +16150,13 @@ } }, "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -18306,21 +16167,14 @@ } } }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/socket.io/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -18331,17 +16185,10 @@ } } }, - "node_modules/socket.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks/-/socks-2.8.3.tgz", - "integrity": "sha1-Hr0PCcUrqVoJdQr+Pz+fckqADLU=", + "version": "2.8.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/socks/-/socks-2.8.4.tgz", + "integrity": "sha1-BxCXVc3U2gMmm9pHJbqgYatW1cw=", "dev": true, "license": "MIT", "dependencies": { @@ -18369,13 +16216,13 @@ } }, "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -18386,13 +16233,6 @@ } } }, - "node_modules/socks-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/source-map/-/source-map-0.6.1.tgz", @@ -18444,9 +16284,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha1-IqqSLc8vKIWmSUomHy2LdTRdAyY=", + "version": "3.0.21", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha1-bW6YDJ3ytvyQU0OjstcCpiOVNsM=", "dev": true, "license": "CC0-1.0" }, @@ -18549,13 +16389,13 @@ } }, "node_modules/streamroller/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -18591,13 +16431,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/streamroller/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/streamroller/node_modules/universalify": { "version": "0.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universalify/-/universalify-0.1.2.tgz", @@ -18609,14 +16442,13 @@ } }, "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha1-W8GlHrQSpmfr/c1ObPam/GVyGsc=", + "version": "2.22.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha1-zXteV8larvD/myrveQWvpi7G5Kc=", "dev": true, "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" }, "optionalDependencies": { @@ -18746,18 +16578,18 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -18809,9 +16641,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha1-+VTXd2fk5u35czhOHrlfj4HWTtk=", + "version": "3.0.9", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha1-1XB5PGNw1weJJsQfpCKJFWagthc=", "dev": true, "license": "MIT", "dependencies": { @@ -18819,8 +16651,8 @@ "tar-stream": "^3.1.5" }, "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, "node_modules/tar-fs/node_modules/tar-stream": { @@ -18885,9 +16717,9 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.31.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.31.2.tgz", - "integrity": "sha1-tcoYgQe3BghNyoL5iAifphAuuhE=", + "version": "5.39.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser/-/terser-5.39.0.tgz", + "integrity": "sha1-DoIDPtV7Pd8flnCNEjzKcX2Gyjo=", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -18904,17 +16736,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha1-kE9MkZPG/SoD9pOiFQxiqS9A0Zk=", + "version": "5.3.14", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha1-kDHUjlerJ1Z/AqzoXH1pDbZsPgY=", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -18938,16 +16770,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-worker/-/jest-worker-27.5.1.tgz", @@ -18963,25 +16785,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha1-9QqIh3w8AWUqFbYirp6Xld96YP4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-8.1.1.tgz", @@ -19046,9 +16849,9 @@ } }, "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha1-XfnCJM66xKeXdyC58IP576Gu/eg=", + "version": "1.2.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha1-sZ2jZNmBsjJtX0MJnDEMyA13DGU=", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -19093,16 +16896,6 @@ "dev": true, "license": "MIT" }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19183,9 +16976,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha1-S0kOJxKfHo5oa0XMSrY3FNxg7qE=", + "version": "1.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha1-v8IhX+ZSj+yrKw+6VwouikJjsGQ=", "dev": true, "license": "MIT", "engines": { @@ -19196,21 +16989,21 @@ } }, "node_modules/ts-jest": { - "version": "29.2.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.2.2.tgz", - "integrity": "sha1-DSOHuwTTkXSyCgUXKpaPJYrt/00=", + "version": "29.2.6", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.2.6.tgz", + "integrity": "sha1-31Pt+LcvuJ3gMs+jEKvzdYKFHZo=", "dev": true, "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.0.0", - "fast-json-stable-stringify": "2.x", + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -19245,9 +17038,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -19278,73 +17071,10 @@ "webpack": "*" } }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ts-loader/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -19354,19 +17084,6 @@ "node": ">=10" } }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-node/-/ts-node-10.9.2.tgz", @@ -19450,13 +17167,13 @@ } }, "node_modules/tuf-js/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -19532,13 +17249,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/tuf-js/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tunnel/-/tunnel-0.0.6.tgz", @@ -19599,10 +17309,17 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha1-krZdvApCZV/M9K6xoIsd3c6K9fI=", + "dev": true, + "license": "MIT" + }, "node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha1-4bCjw5QZCDigsWjncbCtVqCvD6o=", + "version": "5.8.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha1-gXCzcC90t52y5aliB8FeZYB5meQ=", "dev": true, "license": "Apache-2.0", "bin": { @@ -19614,9 +17331,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.38", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ua-parser-js/-/ua-parser-js-0.7.38.tgz", - "integrity": "sha1-9JfYpNwf7G6FTlyqSy+ZE0Iu8FQ=", + "version": "0.7.40", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ua-parser-js/-/ua-parser-js-0.7.40.tgz", + "integrity": "sha1-yH2Dt7slgi7Ppjl6DaWQOTTqFWI=", "dev": true, "funding": [ { @@ -19633,6 +17350,9 @@ } ], "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } @@ -19649,15 +17369,15 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=", + "version": "6.20.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha1-gXG/IsH1iNFVTVW/IEvGJK84hDM=", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=", + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha1-yzFz/kfKdD4ighbko93EyE1ijMI=", "dev": true, "license": "MIT", "engines": { @@ -19679,9 +17399,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha1-y1//3NFqBRJPWksL98N3Agisu+A=", + "version": "2.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha1-oEAa7nJxRZj3ObaLEE5P46DLPHE=", "dev": true, "license": "MIT", "engines": { @@ -19744,9 +17464,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha1-fKYcDYZQdmCQcoBG5BaozeaChZ4=", + "version": "1.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha1-NIN33SRSFvnnBg/1CxWht0C3VCA=", "dev": true, "funding": [ { @@ -19764,8 +17484,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -19795,16 +17515,16 @@ } }, "node_modules/upper-case-first/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, "node_modules/upper-case/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha1-BDj4EK16ntzeeiQcPYDbaTyMv+A=", + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", "dev": true, "license": "0BSD" }, @@ -19838,13 +17558,6 @@ "requires-port": "^1.0.0" } }, - "node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", - "integrity": "sha1-8KA6l7+wPN8zVT5eeaKq3SLKyOw=", - "dev": true, - "license": "MIT" - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -19958,9 +17671,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha1-KTCPLKwVD6jkyS+Q4OyVSp/tf/8=", + "version": "2.4.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha1-L+6u1nQS58MxhOWnnKc4+9OFZNo=", "dev": true, "license": "MIT", "dependencies": { @@ -20080,22 +17793,21 @@ } }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha1-LonscDVXm9+6l2DSbGOsXDRipeU=", + "version": "5.98.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha1-RK4ZqPK6l1N5eCRgcvuJ0Q0fvRc=", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -20105,9 +17817,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -20211,9 +17923,9 @@ } }, "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha1-0DdgN4ndlVW4mq7H63iEXEkIm8U=", + "version": "5.18.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha1-coqwgvi3toNt5R8WN6q107lWj68=", "dev": true, "license": "MIT", "dependencies": { @@ -20224,25 +17936,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha1-9QqIh3w8AWUqFbYirp6Xld96YP4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/webpack/node_modules/tapable": { "version": "2.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tapable/-/tapable-2.2.1.tgz", @@ -20395,78 +18088,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/wrappy/-/wrappy-1.0.2.tgz", @@ -20699,9 +18320,9 @@ } }, "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/zod/-/zod-3.23.8.tgz", - "integrity": "sha1-43uVe11SB5dp+4CXCZtZLw70Bn0=", + "version": "3.24.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/zod/-/zod-3.24.2.tgz", + "integrity": "sha1-jvp0EmKHxnXpL0aHHPyNFcNDcrM=", "dev": true, "license": "MIT", "funding": { @@ -20709,28 +18330,28 @@ } }, "src/Components/CustomElements/src/js": { - "name": "microsoft.components.customelements" + "name": "@microsoft/microsoft.components.customelements" }, "src/Components/dotnet-runtime-js": { - "name": "dotnet-runtime", + "name": "@microsoft/dotnet-runtime", "version": "1.0.0", "license": "MIT" }, "src/Components/Web.JS": { - "name": "microsoft.aspnetcore.components.web.js", + "name": "@microsoft/microsoft.aspnetcore.components.web.js", "version": "0.0.1", "devDependencies": { "@babel/core": "^7.23.6", "@babel/preset-env": "^7.23.6", "@babel/preset-typescript": "^7.23.3", "@microsoft/dotnet-js-interop": "*", + "@microsoft/dotnet-runtime": "*", "@microsoft/signalr": "*", "@microsoft/signalr-protocol-msgpack": "*", "@types/jsdom": "^16.2.14", "@typescript-eslint/eslint-plugin": "^5.26.0", "@typescript-eslint/parser": "^5.26.0", "babel-jest": "^29.7.0", - "dotnet-runtime": "*", "eslint": "^8.16.0", "eslint-plugin-header": "^3.1.1", "jest": "^29.7.0", @@ -20755,27 +18376,34 @@ } }, "src/Components/WebAssembly/Authentication.Msal/src/Interop": { - "name": "microsoft.msal.components.webassembly", + "name": "@microsoft/microsoft.msal.components.webassembly", "dependencies": { "@azure/msal-browser": "^2.28.3" } }, "src/Components/WebAssembly/WebAssembly.Authentication/src/Interop": { - "name": "components.authentication", + "name": "@microsoft/components.authentication", "dependencies": { "oidc-client": "^1.11.5" } }, "src/JSInterop/Microsoft.JSInterop.JS/src": { "name": "@microsoft/dotnet-js-interop", - "version": "8.0.0-dev", + "version": "10.0.0-dev", "license": "MIT", "devDependencies": { + "@babel/core": "^7.23.6", + "@babel/preset-env": "^7.23.6", + "@babel/preset-typescript": "^7.26.0", "@typescript-eslint/eslint-plugin": "^6.15.0", "@typescript-eslint/parser": "^6.15.0", + "babel-jest": "^29.7.0", "eslint": "^8.56.0", "eslint-plugin-jsdoc": "^46.9.1", "eslint-plugin-prefer-arrow": "^1.2.3", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-junit": "^16.0.0", "rimraf": "^5.0.5", "typescript": "^5.3.3" } @@ -21014,13 +18642,13 @@ } }, "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.5.tgz", - "integrity": "sha1-6DRE7Ouf7dSh2lbWca4kRqAabh4=", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -21031,19 +18659,6 @@ } } }, - "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/eslint-plugin-jsdoc": { "version": "46.10.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", @@ -21068,6 +18683,22 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, + "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/jest-junit": { + "version": "16.0.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/jest-junit/-/jest-junit-16.0.0.tgz", + "integrity": "sha1-2DjoxWHPn91+tU9jAgd37uQTZ4U=", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.3.tgz", @@ -21084,17 +18715,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true, - "license": "MIT" - }, "src/JSInterop/Microsoft.JSInterop.JS/src/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.2.tgz", - "integrity": "sha1-Hjs0dZ+Jbo8U1hNHMs55iusMbhM=", + "version": "7.7.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", + "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", "dev": true, "license": "ISC", "bin": { @@ -21116,7 +18740,7 @@ } }, "src/ProjectTemplates/test/Templates.Tests": { - "name": "microsoft.aspnetcore.projecttemplates.tests", + "name": "@microsoft/microsoft.aspnetcore.projecttemplates.tests", "version": "0.0.1", "license": "MIT", "dependencies": { @@ -21125,7 +18749,7 @@ } }, "src/SignalR/clients/ts": { - "name": "client-ts", + "name": "@microsoft/client-ts", "version": "1.0.0", "license": "MIT", "devDependencies": { @@ -21145,12 +18769,12 @@ "ts-jest": "^29.0.5", "ts-loader": "^8.0.17", "typescript": "^4.9.5", - "webpack": "^5.76.3", + "webpack": "^5.94.0", "webpack-cli": "^4.9.2" } }, "src/SignalR/clients/ts/FunctionalTests": { - "name": "functionaltests", + "name": "@microsoft/functionaltests", "version": "1.0.0", "license": "MIT", "dependencies": { @@ -21187,7 +18811,7 @@ "rxjs": "^6.3.3", "ts-node": "^10.9.2", "typescript": "^5.0.2", - "webpack": "^5.76.3", + "webpack": "^5.94.0", "ws": " ^6.0.0" } }, @@ -21199,9 +18823,9 @@ "license": "MIT" }, "src/SignalR/clients/ts/FunctionalTests/node_modules/typescript": { - "version": "5.5.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.5.3.tgz", - "integrity": "sha1-4bCjw5QZCDigsWjncbCtVqCvD6o=", + "version": "5.8.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha1-gXCzcC90t52y5aliB8FeZYB5meQ=", "dev": true, "license": "Apache-2.0", "bin": { @@ -21272,22 +18896,22 @@ }, "src/SignalR/clients/ts/signalr": { "name": "@microsoft/signalr", - "version": "5.0.0-dev", + "version": "10.0.0-dev", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "eventsource": "^2.0.2", "fetch-cookie": "^2.0.3", "node-fetch": "^2.6.7", - "ws": "^7.4.5" + "ws": "^7.5.10" } }, "src/SignalR/clients/ts/signalr-protocol-msgpack": { "name": "@microsoft/signalr-protocol-msgpack", - "version": "5.0.0-dev", + "version": "10.0.0-dev", "license": "MIT", "dependencies": { - "@microsoft/signalr": "*", + "@microsoft/signalr": ">=10.0.0-dev", "@msgpack/msgpack": "^2.7.0" } }, diff --git a/package.json b/package.json index 32c7d1df34ce..48c94efe5535 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "aspnetcore", + "name": "@microsoft/aspnetcore", "version": "1.0.0", "private": true, "workspaces": [ diff --git a/print-hash.ps1 b/print-hash.ps1 new file mode 100644 index 000000000000..0218ee5fda9a --- /dev/null +++ b/print-hash.ps1 @@ -0,0 +1,11 @@ +# Get all .msi files in the current directory +$msiFiles = Get-ChildItem -Path "artifacts\installers\Release" -Filter "*.msi" + +# For each .msi file +foreach ($file in $msiFiles) { + # Calculate the SHA-1 hash + $hash = Get-FileHash -Algorithm SHA1 $file.FullName + + # Print the file name and the hash + Write-Output "* $($file.Name): $($hash.Hash)" +} diff --git a/sign.installers.ps1 b/sign.installers.ps1 new file mode 100644 index 000000000000..1953e69518ff --- /dev/null +++ b/sign.installers.ps1 @@ -0,0 +1,134 @@ +if ($env:CI -eq "true") { + exit 0 +} + +# Function to check if a binary is ARM64 +function Test-IsArm64Binary { + param ( + [Parameter(Mandatory = $true)] + [string]$FilePath + ) + + try { + # Read the PE header to determine the architecture + $fileStream = [System.IO.File]::OpenRead($FilePath) + $binaryReader = New-Object System.IO.BinaryReader($fileStream) + + # Check DOS header magic number (MZ) + $dosHeader = $binaryReader.ReadUInt16() + if ($dosHeader -ne 0x5A4D) { # "MZ" signature + $binaryReader.Close() + $fileStream.Close() + return $false + } + + # Seek to e_lfanew field (offset 60) + $fileStream.Position = 60 + $peHeaderOffset = $binaryReader.ReadUInt32() + + # Go to PE header and verify signature + $fileStream.Position = $peHeaderOffset + $peSignature = $binaryReader.ReadUInt32() + if ($peSignature -ne 0x00004550) { # "PE\0\0" signature + $binaryReader.Close() + $fileStream.Close() + return $false + } + + # Machine type is at offset PE header + 4 + $fileStream.Position = $peHeaderOffset + 4 + $machineType = $binaryReader.ReadUInt16() + + $binaryReader.Close() + $fileStream.Close() + + # 0x8664 = AMD64 (x64), 0x14c = i386, 0xAA64 = ARM64 + return $machineType -eq 0xAA64 + } + catch { + Write-Host "Error examining binary: $_" + return $false + } +} + +$cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert | Select-Object -First 1 +if ($null -eq $cert) { + Write-Host "No code signing certificate found in MY store. Exit." + exit 1 +} + +Write-Host "Certificate found. Sign the MSI installers." + +# Determine if we're running on ARM64 +$isArm64System = [System.Environment]::Is64BitOperatingSystem -and [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64 + +# Find signtool.exe candidates +$signtoolCandidates = Get-ChildItem -Path "${env:ProgramFiles(x86)}\Windows Kits\10\bin" -Recurse -Filter "signtool.exe" +if ($signtoolCandidates.Count -eq 0) { + Write-Host "No signtool.exe found. Exit." + exit 1 +} + +# Prioritize ARM64 candidates if on ARM64 system +if ($isArm64System) { + Write-Host "Running on ARM64 Windows, prioritizing ARM64 signtool..." + $prioritizedCandidates = @() + $nonArm64Candidates = @() + + foreach ($candidate in $signtoolCandidates) { + if (Test-IsArm64Binary -FilePath $candidate.FullName) { + Write-Host "Found ARM64 signtool at $($candidate.FullName)" + $prioritizedCandidates += $candidate + } else { + $nonArm64Candidates += $candidate + } + } + + # Combine ARM64 candidates first, then non-ARM64 candidates + $signtoolCandidates = $prioritizedCandidates + $nonArm64Candidates +} + +Write-Host "Found $($signtoolCandidates.Count) signtool candidates." +$files = Get-ChildItem .\artifacts\installers\Release\* -Include ('*.msi') -File +Write-Host "Found $($files.Count) MSI installers to sign." + +# Try each signtool until one works +$signedSuccessfully = $false +foreach ($signtoolCandidate in $signtoolCandidates) { + $signtool = $signtoolCandidate.FullName + Write-Host "Trying signtool at: $signtool" + + $allFilesSigned = $true + + foreach ($file in $files) { + Write-Host "Signing $($file.FullName) with $signtool" + & $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /d "HTTP Bridge Module for IIS" /a $file.FullName 2>&1 | Write-Debug + + if ($LASTEXITCODE -ne 0) { + Write-Host "Failed to sign $($file.FullName) with $signtool (exit code $LASTEXITCODE)" + $allFilesSigned = $false + break + } + + # Verify immediately after signing + & $signtool verify /pa /q $file.FullName 2>&1 | Write-Debug + if ($LASTEXITCODE -ne 0) { + Write-Host "Failed to verify $($file.FullName) with $signtool (exit code $LASTEXITCODE)" + $allFilesSigned = $false + break + } + } + + if ($allFilesSigned) { + $signedSuccessfully = $true + Write-Host "Successfully signed all MSI installers with $signtool" + break + } +} + +if (-not $signedSuccessfully) { + Write-Host "Failed to sign MSI installers with any available signtool. Exit." + exit 1 +} + +Write-Host "Signing and verification finished successfully." diff --git a/src/Analyzers/Analyzers.slnf b/src/Analyzers/Analyzers.slnf index bfb010ea2d1c..af0bf459e28e 100644 --- a/src/Analyzers/Analyzers.slnf +++ b/src/Analyzers/Analyzers.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects" : [ "src\\Mvc\\Mvc\\src\\Microsoft.AspNetCore.Mvc.csproj", "src\\SignalR\\server\\SignalR\\src\\Microsoft.AspNetCore.SignalR.csproj", diff --git a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj index 5c89ff96a301..9290cc9741f5 100644 --- a/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj +++ b/src/Analyzers/Analyzers/test/Microsoft.AspNetCore.Analyzers.Test.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Analyzers/Analyzers/test/StartupCSharpAnalyzerTest.cs b/src/Analyzers/Analyzers/test/StartupCSharpAnalyzerTest.cs index 42b9fbd86036..0e5e579977d9 100644 --- a/src/Analyzers/Analyzers/test/StartupCSharpAnalyzerTest.cs +++ b/src/Analyzers/Analyzers/test/StartupCSharpAnalyzerTest.cs @@ -5,11 +5,11 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Testing; using Microsoft.CodeAnalysis.Diagnostics; -using Microsoft.CodeAnalysis.Testing.Verifiers; +using Microsoft.CodeAnalysis.Testing; namespace Microsoft.AspNetCore.Analyzers; -internal sealed class StartupCSharpAnalyzerTest : CSharpAnalyzerTest +internal sealed class StartupCSharpAnalyzerTest : CSharpAnalyzerTest { public StartupCSharpAnalyzerTest(StartupAnalyzer analyzer, ImmutableArray metadataReferences) { diff --git a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs index 7f0f69a709f7..7dcaff1b6808 100644 --- a/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs +++ b/src/Analyzers/Microsoft.AspNetCore.Analyzer.Testing/src/Assert.cs @@ -18,7 +18,7 @@ public static void DiagnosticLocation(DiagnosticLocation expected, Location actu { if (actualLinePosition.Line + 1 != expected.Line) { - throw new DiagnosticLocationAssertException( + throw EqualException.ForMismatchedValues( expected, actual, $"Expected diagnostic to be on line \"{expected.Line}\" was actually on line \"{actualLinePosition.Line + 1}\""); @@ -30,25 +30,11 @@ public static void DiagnosticLocation(DiagnosticLocation expected, Location actu { if (actualLinePosition.Character + 1 != expected.Column) { - throw new DiagnosticLocationAssertException( + throw EqualException.ForMismatchedValues( expected, actual, $"Expected diagnostic to start at column \"{expected.Column}\" was actually on column \"{actualLinePosition.Character + 1}\""); } } } - - private sealed class DiagnosticLocationAssertException : EqualException - { - public DiagnosticLocationAssertException( - DiagnosticLocation expected, - Location actual, - string message) - : base(expected, actual) - { - Message = message; - } - - public override string Message { get; } - } } diff --git a/src/Antiforgery/Antiforgery.slnf b/src/Antiforgery/Antiforgery.slnf index 4329531a5f8f..7ce6a6ecf3dd 100644 --- a/src/Antiforgery/Antiforgery.slnf +++ b/src/Antiforgery/Antiforgery.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "src\\Antiforgery\\samples\\MinimalFormSample\\MinimalFormSample.csproj", "src\\Antiforgery\\src\\Microsoft.AspNetCore.Antiforgery.csproj", diff --git a/src/Antiforgery/src/PublicAPI.Shipped.txt b/src/Antiforgery/src/PublicAPI.Shipped.txt index fe55066bc165..a83f5d0b56fc 100644 --- a/src/Antiforgery/src/PublicAPI.Shipped.txt +++ b/src/Antiforgery/src/PublicAPI.Shipped.txt @@ -7,6 +7,8 @@ Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.get -> string! Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.set -> void Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.get -> string? Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.set -> void +Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressReadingTokenFromFormBody.get -> bool +Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressReadingTokenFromFormBody.set -> void Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.get -> bool Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.set -> void Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet diff --git a/src/Antiforgery/src/PublicAPI.Unshipped.txt b/src/Antiforgery/src/PublicAPI.Unshipped.txt index cdd99e7d264d..7dc5c58110bf 100644 --- a/src/Antiforgery/src/PublicAPI.Unshipped.txt +++ b/src/Antiforgery/src/PublicAPI.Unshipped.txt @@ -1,3 +1 @@ #nullable enable -Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressReadingTokenFromFormBody.get -> bool -Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressReadingTokenFromFormBody.set -> void diff --git a/src/Antiforgery/test/BinaryBlobTest.cs b/src/Antiforgery/test/BinaryBlobTest.cs index c239927f9d32..5a1fe5993372 100644 --- a/src/Antiforgery/test/BinaryBlobTest.cs +++ b/src/Antiforgery/test/BinaryBlobTest.cs @@ -56,10 +56,10 @@ public void Ctor_Data() [Theory] [InlineData((object[]?)null)] [InlineData(new byte[] { 0x01, 0x02, 0x03 })] - public void Ctor_Data_Bad(byte[] data) + public void Ctor_Data_Bad(byte[]? data) { // Act & assert - var ex = Assert.Throws(() => new BinaryBlob(32, data)); + var ex = Assert.Throws(() => new BinaryBlob(32, data!)); Assert.Equal("data", ex.ParamName); } diff --git a/src/Antiforgery/test/DefaultAntiforgeryTest.cs b/src/Antiforgery/test/DefaultAntiforgeryTest.cs index a3819c95d12f..4e3fc6b2d41b 100644 --- a/src/Antiforgery/test/DefaultAntiforgeryTest.cs +++ b/src/Antiforgery/test/DefaultAntiforgeryTest.cs @@ -1079,7 +1079,7 @@ public void SetCookieTokenAndHeader_OverridesExistingCachingHeaders() [InlineData(true, null)] public void SetCookieTokenAndHeader_AddsXFrameOptionsHeader( bool suppressXFrameOptions, - string expectedHeaderValue) + string? expectedHeaderValue) { // Arrange var options = new AntiforgeryOptions() diff --git a/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs b/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs index 65a3536d8051..bfef37e4dd40 100644 --- a/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs +++ b/src/Antiforgery/test/DefaultAntiforgeryTokenStoreTest.cs @@ -396,7 +396,7 @@ public void SaveCookieToken_HonorsCookieSecurePolicy_OnOptions( [InlineData("/", "/")] [InlineData("/vdir1", "/vdir1")] [InlineData("/vdir1/vdir2", "/vdir1/vdir2")] - public void SaveCookieToken_SetsCookieWithApproriatePathBase(string requestPathBase, string expectedCookiePath) + public void SaveCookieToken_SetsCookieWithApproriatePathBase(string? requestPathBase, string expectedCookiePath) { // Arrange var token = "serialized-value"; diff --git a/src/Assets/Microsoft.AspNetCore.App.Internal.Assets.csproj b/src/Assets/Microsoft.AspNetCore.App.Internal.Assets.csproj new file mode 100644 index 000000000000..bdb335eba896 --- /dev/null +++ b/src/Assets/Microsoft.AspNetCore.App.Internal.Assets.csproj @@ -0,0 +1,51 @@ + + + + $(DefaultNetCoreTargetFramework) + ASP.NET Core static framework assets + Microsoft.AspNetCore.App.Internal.Assets + true + Library + true + false + false + false + disable + + + $(NoWarn);NU5128 + + + + <_BlazorJSContentRoot Condition="'$(Configuration)' == 'Debug'">$(RepoRoot)src\Components\Web.JS\dist\Debug + <_BlazorJSContentRoot Condition="'$(Configuration)' == 'Release'">$(RepoRoot)src\Components\Web.JS\dist\Release + + + + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.web.js" /> + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.server.js" /> + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.webassembly.js" /> + + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.web.js.map" /> + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.server.js.map" /> + <_BlazorJSFile Include="$(_BlazorJSContentRoot)\blazor.webassembly.js.map" /> + + + + + + + + + + + + <_MissingBlazorJSFile Include="@(_BlazorJSFile)" Condition="!EXISTS('%(_BlazorJSFile.FullPath)')" /> + + + + + + diff --git a/src/Assets/build.cmd b/src/Assets/build.cmd new file mode 100644 index 000000000000..5274e00264f0 --- /dev/null +++ b/src/Assets/build.cmd @@ -0,0 +1,3 @@ +@ECHO OFF +SET RepoRoot=%~dp0..\.. +%RepoRoot%\eng\build.cmd -projects %~dp0**\*.*proj %* diff --git a/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.props b/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.props new file mode 100644 index 000000000000..8c119d5413b5 --- /dev/null +++ b/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.props @@ -0,0 +1,2 @@ + + diff --git a/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.targets b/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.targets new file mode 100644 index 000000000000..12b2cf3736b3 --- /dev/null +++ b/src/Assets/build/Microsoft.AspNetCore.App.Internal.Assets.targets @@ -0,0 +1,72 @@ + + + + $(ResolveStaticWebAssetsInputsDependsOn); + _AddBlazorFrameworkStaticWebAssets; + + + + + $(MSBuildThisFileDirectory)..\_framework + + + + + <_FrameworkStaticWebAssetCandidate Include="$(BlazorFrameworkStaticWebAssetRoot)\blazor.web.js"> + _framework/blazor.web.js + + <_FrameworkStaticWebAssetCandidate Include="$(BlazorFrameworkStaticWebAssetRoot)\blazor.server.js"> + _framework/blazor.server.js + + + + + <_FrameworkStaticWebAssetCandidate Include="$(BlazorFrameworkStaticWebAssetRoot)\blazor.web.js.map"> + _framework/blazor.web.js.map + + <_FrameworkStaticWebAssetCandidate Include="$(BlazorFrameworkStaticWebAssetRoot)\blazor.server.js.map"> + _framework/blazor.server.js.map + + + + + <_MissingFrameworkStaticWebAssetCandidate + Include="@(_FrameworkStaticWebAssetCandidate)" + Condition="!EXISTS('%(Identity)')" /> + <_FrameworkStaticWebAssetCandidate Remove="@(_MissingFrameworkStaticWebAssetCandidate)" /> + + + + + + + + + + + + + + + + + + + diff --git a/src/Assets/buildMultiTargeting/Microsoft.AspNetCore.App.Internal.Assets.targets b/src/Assets/buildMultiTargeting/Microsoft.AspNetCore.App.Internal.Assets.targets new file mode 100644 index 000000000000..37470182e922 --- /dev/null +++ b/src/Assets/buildMultiTargeting/Microsoft.AspNetCore.App.Internal.Assets.targets @@ -0,0 +1,3 @@ + + + diff --git a/src/Assets/buildTransitive/Microsoft.AspNetCore.App.Internal.Assets.targets b/src/Assets/buildTransitive/Microsoft.AspNetCore.App.Internal.Assets.targets new file mode 100644 index 000000000000..79251dcb3657 --- /dev/null +++ b/src/Assets/buildTransitive/Microsoft.AspNetCore.App.Internal.Assets.targets @@ -0,0 +1,3 @@ + + + diff --git a/src/Azure/Azure.slnf b/src/Azure/Azure.slnf index cc5388ec225f..0726d70db8ac 100644 --- a/src/Azure/Azure.slnf +++ b/src/Azure/Azure.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "src\\Antiforgery\\src\\Microsoft.AspNetCore.Antiforgery.csproj", "src\\Azure\\AzureAppServices.HostingStartup\\src\\Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj", diff --git a/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj b/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj index fe1c0f19275e..dbc464028962 100644 --- a/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj +++ b/src/Azure/AzureAppServices.HostingStartup/src/Microsoft.AspNetCore.AzureAppServices.HostingStartup.csproj @@ -13,7 +13,6 @@ - diff --git a/src/BuildAfterTargetingPack/BuildAfterTargetingPack.csproj b/src/BuildAfterTargetingPack/BuildAfterTargetingPack.csproj index c7d6da260af9..49a8a3b6431e 100644 --- a/src/BuildAfterTargetingPack/BuildAfterTargetingPack.csproj +++ b/src/BuildAfterTargetingPack/BuildAfterTargetingPack.csproj @@ -32,16 +32,17 @@ - + - + - + - + - + - + diff --git a/src/Caching/Caching.slnf b/src/Caching/Caching.slnf index 094d2826ef12..7b0c24b73089 100644 --- a/src/Caching/Caching.slnf +++ b/src/Caching/Caching.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "src\\Caching\\SqlServer\\src\\Microsoft.Extensions.Caching.SqlServer.csproj", "src\\Caching\\SqlServer\\test\\Microsoft.Extensions.Caching.SqlServer.Tests.csproj", diff --git a/src/Caching/SqlServer/src/CompatibilitySuppressions.xml b/src/Caching/SqlServer/src/CompatibilitySuppressions.xml deleted file mode 100644 index fa12ab27fb23..000000000000 --- a/src/Caching/SqlServer/src/CompatibilitySuppressions.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - CP1002 - System.ServiceModel.Internals.dll - - - CP1002 - SMDiagnostics.dll - - \ No newline at end of file diff --git a/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj b/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj index c3f7de250341..4c53c8507e96 100644 --- a/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj +++ b/src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj @@ -2,7 +2,8 @@ Distributed cache implementation of Microsoft.Extensions.Caching.Distributed.IDistributedCache using Redis. - $(DefaultNetCoreTargetFramework);$(DefaultNetFxTargetFramework);netstandard2.0;$(CurrentLtsTargetFramework) + $(DefaultNetCoreTargetFramework);$(DefaultNetFxTargetFramework);netstandard2.0 + $(TargetFrameworks);$(CurrentLtsTargetFramework) true cache;distributedcache;redis true diff --git a/src/Caching/StackExchangeRedis/src/PACKAGE.md b/src/Caching/StackExchangeRedis/src/PACKAGE.md new file mode 100644 index 000000000000..23d0d2ca7785 --- /dev/null +++ b/src/Caching/StackExchangeRedis/src/PACKAGE.md @@ -0,0 +1,40 @@ +## About + +`Microsoft.Extensions.Caching.StackExchangeRedis` provides a distributed cache implementation of `Microsoft.Extensions.Caching.Distributed.IDistributedCache` using Redis. + +## How to Use + +To use `Microsoft.Extensions.Caching.StackExchangeRedis`, follow these steps: + +### Installation + +```shell +dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis +``` + +### Configuration + +To configure the Redis cache in your app, use the `AddStackExchangeRedisCache` extension method. Here's an example: + +```csharp +var builder = WebApplication.CreateBuilder(); + +builder.Services.AddStackExchangeRedisCache(options => +{ + options.Configuration = builder.Configuration.GetConnectionString("MyRedisConStr"); + options.InstanceName = "MyCache"; +}); +``` + +## Main Types + +* `RedisCache`: Provides a distributed cache implementation using Redis +* `RedisCacheOptions`: Provides options used for configuring a `RedisCache` + +## Additional Documentation + +For additional documentation and examples, refer to the [official documentation](https://learn.microsoft.com/aspnet/core/performance/caching/distributed#distributed-redis-cache) on using the Distributed Redis Cache in ASP.NET Core. + +## Feedback & Contributing + +`Microsoft.Extensions.Caching.StackExchangeRedis` is released as open-source under the [MIT license](https://licenses.nuget.org/MIT). Bug reports and contributions are welcome at [the GitHub repository](https://github.com/dotnet/aspnetcore). diff --git a/src/Caching/StackExchangeRedis/src/PublicAPI/net9.0/PublicAPI.Shipped.txt b/src/Caching/StackExchangeRedis/src/PublicAPI/net10.0/PublicAPI.Shipped.txt similarity index 100% rename from src/Caching/StackExchangeRedis/src/PublicAPI/net9.0/PublicAPI.Shipped.txt rename to src/Caching/StackExchangeRedis/src/PublicAPI/net10.0/PublicAPI.Shipped.txt diff --git a/src/Caching/StackExchangeRedis/src/PublicAPI/net9.0/PublicAPI.Unshipped.txt b/src/Caching/StackExchangeRedis/src/PublicAPI/net10.0/PublicAPI.Unshipped.txt similarity index 100% rename from src/Caching/StackExchangeRedis/src/PublicAPI/net9.0/PublicAPI.Unshipped.txt rename to src/Caching/StackExchangeRedis/src/PublicAPI/net10.0/PublicAPI.Unshipped.txt diff --git a/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Shipped.txt b/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Shipped.txt index 7dc5c58110bf..bb997fdc8643 100644 --- a/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Shipped.txt +++ b/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Shipped.txt @@ -1 +1,26 @@ #nullable enable +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Dispose() -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Get(string! key) -> byte[]? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RedisCache(Microsoft.Extensions.Options.IOptions! optionsAccessor) -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Refresh(string! key) -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RefreshAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Remove(string! key) -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RemoveAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Set(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options) -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.SetAsync(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.get -> string? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.set -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.get -> StackExchange.Redis.ConfigurationOptions? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.set -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.get -> System.Func!>? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.set -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.get -> string? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.set -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.get -> System.Func? +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.set -> void +Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.RedisCacheOptions() -> void +Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions +static Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions.AddStackExchangeRedisCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! diff --git a/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Unshipped.txt b/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Unshipped.txt index bb997fdc8643..7dc5c58110bf 100644 --- a/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Unshipped.txt +++ b/src/Caching/StackExchangeRedis/src/PublicAPI/net8.0/PublicAPI.Unshipped.txt @@ -1,26 +1 @@ #nullable enable -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Dispose() -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Get(string! key) -> byte[]? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RedisCache(Microsoft.Extensions.Options.IOptions! optionsAccessor) -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Refresh(string! key) -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RefreshAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Remove(string! key) -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RemoveAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Set(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options) -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.SetAsync(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.get -> string? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.set -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.get -> StackExchange.Redis.ConfigurationOptions? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.set -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.get -> System.Func!>? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.set -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.get -> string? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.set -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.get -> System.Func? -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.set -> void -Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.RedisCacheOptions() -> void -Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions -static Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions.AddStackExchangeRedisCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! diff --git a/src/Caching/StackExchangeRedis/src/RedisCache.cs b/src/Caching/StackExchangeRedis/src/RedisCache.cs index debec0237040..95bba7dd0088 100644 --- a/src/Caching/StackExchangeRedis/src/RedisCache.cs +++ b/src/Caching/StackExchangeRedis/src/RedisCache.cs @@ -53,6 +53,8 @@ private static RedisValue[] GetHashFields(bool getData) => getData private long _firstErrorTimeTicks; private long _previousErrorTimeTicks; + internal virtual bool IsHybridCacheActive() => false; + // StackExchange.Redis will also be trying to reconnect internally, // so limit how often we recreate the ConnectionMultiplexer instance // in an attempt to reconnect @@ -375,6 +377,11 @@ private void TryAddSuffix(IConnectionMultiplexer connection) { connection.AddLibraryNameSuffix("aspnet"); connection.AddLibraryNameSuffix("DC"); + + if (IsHybridCacheActive()) + { + connection.AddLibraryNameSuffix("HC"); + } } catch (Exception ex) { diff --git a/src/Caching/StackExchangeRedis/src/RedisCacheImpl.cs b/src/Caching/StackExchangeRedis/src/RedisCacheImpl.cs index dab5bfc8655b..0a58d43e136d 100644 --- a/src/Caching/StackExchangeRedis/src/RedisCacheImpl.cs +++ b/src/Caching/StackExchangeRedis/src/RedisCacheImpl.cs @@ -1,6 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; +using Microsoft.Extensions.Caching.Hybrid; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -8,13 +11,20 @@ namespace Microsoft.Extensions.Caching.StackExchangeRedis; internal sealed class RedisCacheImpl : RedisCache { - public RedisCacheImpl(IOptions optionsAccessor, ILogger logger) + private readonly IServiceProvider _services; + + internal override bool IsHybridCacheActive() + => _services.GetService() is not null; + + public RedisCacheImpl(IOptions optionsAccessor, ILogger logger, IServiceProvider services) : base(optionsAccessor, logger) { + _services = services; // important: do not check for HybridCache here due to dependency - creates a cycle } - public RedisCacheImpl(IOptions optionsAccessor) + public RedisCacheImpl(IOptions optionsAccessor, IServiceProvider services) : base(optionsAccessor) { + _services = services; // important: do not check for HybridCache here due to dependency - creates a cycle } } diff --git a/src/Caching/StackExchangeRedis/test/CacheServiceExtensionsTests.cs b/src/Caching/StackExchangeRedis/test/CacheServiceExtensionsTests.cs index 29a49a7cec70..71e31d19928a 100644 --- a/src/Caching/StackExchangeRedis/test/CacheServiceExtensionsTests.cs +++ b/src/Caching/StackExchangeRedis/test/CacheServiceExtensionsTests.cs @@ -1,11 +1,19 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; +using System.Collections.Generic; using System.Linq; +using System.Threading; +using System.Threading.Tasks; using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Hybrid; +using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Moq; using Xunit; @@ -121,4 +129,71 @@ public void AddStackExchangeRedisCache_UsesLoggerFactoryAlreadyRegisteredWithSer loggerFactory.Verify(); } + + [Theory] + [InlineData(true)] + [InlineData(false)] + public void AddStackExchangeRedisCache_HybridCacheDetected(bool hybridCacheActive) + { + // Arrange + var services = new ServiceCollection(); + + services.AddLogging(); + + // Act + services.AddStackExchangeRedisCache(options => { }); + if (hybridCacheActive) + { + services.AddMemoryCache(); + services.TryAddSingleton(); + } + + using var provider = services.BuildServiceProvider(); + var cache = Assert.IsAssignableFrom(provider.GetRequiredService()); + Assert.Equal(hybridCacheActive, cache.IsHybridCacheActive()); + } + + sealed class DummyHybridCache : HybridCache + { + // emulate the layout from HybridCache in dotnet/extensions + public DummyHybridCache(IOptions options, IServiceProvider services) + { + if (services is null) + { + throw new ArgumentNullException(nameof(services)); + } + + var l1 = services.GetRequiredService(); + _ = options.Value; + var logger = services.GetService()?.CreateLogger(typeof(HybridCache)) ?? NullLogger.Instance; + // var clock = services.GetService() ?? TimeProvider.System; + var l2 = services.GetService(); // note optional + + // ignore L2 if it is really just the same L1, wrapped + // (note not just an "is" test; if someone has a custom subclass, who knows what it does?) + if (l2 is not null + && l2.GetType() == typeof(MemoryDistributedCache) + && l1.GetType() == typeof(MemoryCache)) + { + l2 = null; + } + + IHybridCacheSerializerFactory[] factories = services.GetServices().ToArray(); + Array.Reverse(factories); + } + + public class HybridCacheOptions { } + + public override ValueTask GetOrCreateAsync(string key, TState state, Func> factory, HybridCacheEntryOptions options = null, IEnumerable tags = null, CancellationToken cancellationToken = default) + => throw new NotSupportedException(); + + public override ValueTask RemoveAsync(string key, CancellationToken cancellationToken = default) + => throw new NotSupportedException(); + + public override ValueTask RemoveByTagAsync(string tag, CancellationToken cancellationToken = default) + => throw new NotSupportedException(); + + public override ValueTask SetAsync(string key, T value, HybridCacheEntryOptions options = null, IEnumerable tags = null, CancellationToken cancellationToken = default) + => throw new NotSupportedException(); + } } diff --git a/src/Components/Analyzers/src/ComponentFacts.cs b/src/Components/Analyzers/src/ComponentFacts.cs index 43561128b0a5..debd00db09ee 100644 --- a/src/Components/Analyzers/src/ComponentFacts.cs +++ b/src/Components/Analyzers/src/ComponentFacts.cs @@ -87,6 +87,77 @@ public static bool IsCascadingParameter(ComponentSymbols symbols, IPropertySymbo return property.GetAttributes().Any(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.CascadingParameterAttribute)); } + public static bool IsSupplyParameterFromForm(ComponentSymbols symbols, IPropertySymbol property) + { + if (symbols == null) + { + throw new ArgumentNullException(nameof(symbols)); + } + + if (property == null) + { + throw new ArgumentNullException(nameof(property)); + } + + if (symbols.SupplyParameterFromFormAttribute == null) + { + return false; + } + + return property.GetAttributes().Any(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.SupplyParameterFromFormAttribute)); + } + + public static bool IsPersistentState(ComponentSymbols symbols, IPropertySymbol property) + { + if (symbols == null) + { + throw new ArgumentNullException(nameof(symbols)); + } + + if (property == null) + { + throw new ArgumentNullException(nameof(property)); + } + + if (symbols.PersistentStateAttribute == null) + { + return false; + } + + return property.GetAttributes().Any(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, symbols.PersistentStateAttribute)); + } + + public static bool IsComponentBase(ComponentSymbols symbols, INamedTypeSymbol type) + { + if (symbols is null) + { + throw new ArgumentNullException(nameof(symbols)); + } + + if (type is null) + { + throw new ArgumentNullException(nameof(type)); + } + + if (symbols.ComponentBaseType == null) + { + return false; + } + + // Check if the type inherits from ComponentBase + var current = type.BaseType; + while (current != null) + { + if (SymbolEqualityComparer.Default.Equals(current, symbols.ComponentBaseType)) + { + return true; + } + current = current.BaseType; + } + + return false; + } + public static bool IsComponent(ComponentSymbols symbols, Compilation compilation, INamedTypeSymbol type) { if (symbols is null) diff --git a/src/Components/Analyzers/src/ComponentSymbols.cs b/src/Components/Analyzers/src/ComponentSymbols.cs index ccdca61d9749..52b9c175ea27 100644 --- a/src/Components/Analyzers/src/ComponentSymbols.cs +++ b/src/Components/Analyzers/src/ComponentSymbols.cs @@ -47,9 +47,17 @@ public static bool TryCreate(Compilation compilation, out ComponentSymbols symbo var parameterCaptureUnmatchedValuesRuntimeType = dictionary.Construct(@string, @object); + // Try to get optional symbols for SupplyParameterFromForm and PersistentState analyzers + var supplyParameterFromFormAttribute = compilation.GetTypeByMetadataName(ComponentsApi.SupplyParameterFromFormAttribute.MetadataName); + var persistentStateAttribute = compilation.GetTypeByMetadataName(ComponentsApi.PersistentStateAttribute.MetadataName); + var componentBaseType = compilation.GetTypeByMetadataName(ComponentsApi.ComponentBase.MetadataName); + symbols = new ComponentSymbols( parameterAttribute, cascadingParameterAttribute, + supplyParameterFromFormAttribute, + persistentStateAttribute, + componentBaseType, parameterCaptureUnmatchedValuesRuntimeType, icomponentType); return true; @@ -58,11 +66,17 @@ public static bool TryCreate(Compilation compilation, out ComponentSymbols symbo private ComponentSymbols( INamedTypeSymbol parameterAttribute, INamedTypeSymbol cascadingParameterAttribute, + INamedTypeSymbol supplyParameterFromFormAttribute, + INamedTypeSymbol persistentStateAttribute, + INamedTypeSymbol componentBaseType, INamedTypeSymbol parameterCaptureUnmatchedValuesRuntimeType, INamedTypeSymbol icomponentType) { ParameterAttribute = parameterAttribute; CascadingParameterAttribute = cascadingParameterAttribute; + SupplyParameterFromFormAttribute = supplyParameterFromFormAttribute; // Can be null + PersistentStateAttribute = persistentStateAttribute; // Can be null + ComponentBaseType = componentBaseType; // Can be null ParameterCaptureUnmatchedValuesRuntimeType = parameterCaptureUnmatchedValuesRuntimeType; IComponentType = icomponentType; } @@ -74,5 +88,11 @@ private ComponentSymbols( public INamedTypeSymbol CascadingParameterAttribute { get; } + public INamedTypeSymbol SupplyParameterFromFormAttribute { get; } // Can be null if not available + + public INamedTypeSymbol PersistentStateAttribute { get; } // Can be null if not available + + public INamedTypeSymbol ComponentBaseType { get; } // Can be null if not available + public INamedTypeSymbol IComponentType { get; } } diff --git a/src/Components/Analyzers/src/ComponentsApi.cs b/src/Components/Analyzers/src/ComponentsApi.cs index a62d070dedef..a2dc5b852c6d 100644 --- a/src/Components/Analyzers/src/ComponentsApi.cs +++ b/src/Components/Analyzers/src/ComponentsApi.cs @@ -23,6 +23,24 @@ public static class CascadingParameterAttribute public const string MetadataName = FullTypeName; } + public static class SupplyParameterFromFormAttribute + { + public const string FullTypeName = "Microsoft.AspNetCore.Components.SupplyParameterFromFormAttribute"; + public const string MetadataName = FullTypeName; + } + + public static class ComponentBase + { + public const string FullTypeName = "Microsoft.AspNetCore.Components.ComponentBase"; + public const string MetadataName = FullTypeName; + } + + public static class PersistentStateAttribute + { + public const string FullTypeName = "Microsoft.AspNetCore.Components.PersistentStateAttribute"; + public const string MetadataName = FullTypeName; + } + public static class IComponent { public const string FullTypeName = "Microsoft.AspNetCore.Components.IComponent"; diff --git a/src/Components/Analyzers/src/DiagnosticDescriptors.cs b/src/Components/Analyzers/src/DiagnosticDescriptors.cs index 6fb448f45b34..5f67edaf8447 100644 --- a/src/Components/Analyzers/src/DiagnosticDescriptors.cs +++ b/src/Components/Analyzers/src/DiagnosticDescriptors.cs @@ -8,65 +8,88 @@ namespace Microsoft.AspNetCore.Components.Analyzers; [System.Diagnostics.CodeAnalysis.SuppressMessage("MicrosoftCodeAnalysisReleaseTracking", "RS2008:Enable analyzer release tracking")] internal static class DiagnosticDescriptors { - public static readonly DiagnosticDescriptor ComponentParameterSettersShouldBePublic = new DiagnosticDescriptor( + private const string Encapsulation = "Encapsulation"; + private const string Usage = "Usage"; + + private static LocalizableResourceString CreateLocalizableResourceString(string resource) => new(resource, Resources.ResourceManager, typeof(Resources)); + + public static readonly DiagnosticDescriptor ComponentParameterSettersShouldBePublic = new( "BL0001", - new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Format), Resources.ResourceManager, typeof(Resources)), - "Encapsulation", + CreateLocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Format)), + Encapsulation, DiagnosticSeverity.Error, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.ComponentParameterSettersShouldBePublic_Description))); - public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesMustBeUnique = new DiagnosticDescriptor( + public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesMustBeUnique = new( "BL0002", - new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format), Resources.ResourceManager, typeof(Resources)), - "Usage", + CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format)), + Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description))); - public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesHasWrongType = new DiagnosticDescriptor( + public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesHasWrongType = new( "BL0003", - new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Format), Resources.ResourceManager, typeof(Resources)), - "Usage", + CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Format)), + Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Description))); - public static readonly DiagnosticDescriptor ComponentParametersShouldBePublic = new DiagnosticDescriptor( + public static readonly DiagnosticDescriptor ComponentParametersShouldBePublic = new( "BL0004", - new LocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Format), Resources.ResourceManager, typeof(Resources)), - "Encapsulation", + CreateLocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParameterShouldBePublic_Format)), + Encapsulation, DiagnosticSeverity.Error, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.ComponentParametersShouldBePublic_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.ComponentParametersShouldBePublic_Description))); - public static readonly DiagnosticDescriptor ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent = new DiagnosticDescriptor( + public static readonly DiagnosticDescriptor ComponentParametersShouldNotBeSetOutsideOfTheirDeclaredComponent = new( "BL0005", - new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Format), Resources.ResourceManager, typeof(Resources)), - "Usage", + CreateLocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Format)), + Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.ComponentParameterShouldNotBeSetOutsideOfTheirDeclaredComponent_Description))); - public static readonly DiagnosticDescriptor DoNotUseRenderTreeTypes = new DiagnosticDescriptor( + public static readonly DiagnosticDescriptor DoNotUseRenderTreeTypes = new( "BL0006", - new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description), Resources.ResourceManager, typeof(Resources)), - "Usage", + CreateLocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Title)), + CreateLocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description)), + Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true, - description: new LocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description), Resources.ResourceManager, typeof(Resources))); + description: CreateLocalizableResourceString(nameof(Resources.DoNotUseRenderTreeTypes_Description))); public static readonly DiagnosticDescriptor ComponentParametersShouldBeAutoProperties = new( "BL0007", - new LocalizableResourceString(nameof(Resources.ComponentParametersShouldBeAutoProperties_Title), Resources.ResourceManager, typeof(Resources)), - new LocalizableResourceString(nameof(Resources.ComponentParametersShouldBeAutoProperties_Message), Resources.ResourceManager, typeof(Resources)), - "Usage", + CreateLocalizableResourceString(nameof(Resources.ComponentParametersShouldBeAutoProperties_Title)), + CreateLocalizableResourceString(nameof(Resources.ComponentParametersShouldBeAutoProperties_Message)), + Usage, DiagnosticSeverity.Warning, isEnabledByDefault: true); + + public static readonly DiagnosticDescriptor SupplyParameterFromFormShouldNotHavePropertyInitializer = new( + "BL0008", + CreateLocalizableResourceString(nameof(Resources.SupplyParameterFromFormShouldNotHavePropertyInitializer_Title)), + CreateLocalizableResourceString(nameof(Resources.SupplyParameterFromFormShouldNotHavePropertyInitializer_Format)), + Usage, + DiagnosticSeverity.Warning, + isEnabledByDefault: true, + description: CreateLocalizableResourceString(nameof(Resources.SupplyParameterFromFormShouldNotHavePropertyInitializer_Description))); + + public static readonly DiagnosticDescriptor PersistentStateShouldNotHavePropertyInitializer = new( + "BL0009", + CreateLocalizableResourceString(nameof(Resources.PersistentStateShouldNotHavePropertyInitializer_Title)), + CreateLocalizableResourceString(nameof(Resources.PersistentStateShouldNotHavePropertyInitializer_Format)), + Usage, + DiagnosticSeverity.Warning, + isEnabledByDefault: true, + description: CreateLocalizableResourceString(nameof(Resources.PersistentStateShouldNotHavePropertyInitializer_Description))); } diff --git a/src/Components/Analyzers/src/PersistentStateAnalyzer.cs b/src/Components/Analyzers/src/PersistentStateAnalyzer.cs new file mode 100644 index 000000000000..8cd361302d3c --- /dev/null +++ b/src/Components/Analyzers/src/PersistentStateAnalyzer.cs @@ -0,0 +1,101 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +#nullable enable + +namespace Microsoft.AspNetCore.Components.Analyzers; + +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class PersistentStateAnalyzer : DiagnosticAnalyzer +{ + public PersistentStateAnalyzer() + { + SupportedDiagnostics = ImmutableArray.Create( + DiagnosticDescriptors.PersistentStateShouldNotHavePropertyInitializer); + } + + public override ImmutableArray SupportedDiagnostics { get; } + + public override void Initialize(AnalysisContext context) + { + context.EnableConcurrentExecution(); + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics); + context.RegisterCompilationStartAction(context => + { + if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols)) + { + // Types we need are not defined. + return; + } + + context.RegisterSyntaxNodeAction(context => + { + var propertyDeclaration = (PropertyDeclarationSyntax)context.Node; + + // Check if property has an initializer + if (propertyDeclaration.Initializer == null) + { + return; + } + + // Ignore initializers that set to default values (null, default, etc.) + if (IsDefaultValueInitializer(propertyDeclaration.Initializer.Value)) + { + return; + } + + var propertySymbol = context.SemanticModel.GetDeclaredSymbol(propertyDeclaration); + if (propertySymbol == null) + { + return; + } + + // Check if property has [PersistentState] attribute + if (!ComponentFacts.IsPersistentState(symbols, propertySymbol)) + { + return; + } + + // Check if the containing type inherits from ComponentBase + var containingType = propertySymbol.ContainingType; + if (!ComponentFacts.IsComponentBase(symbols, containingType)) + { + return; + } + + var propertyLocation = propertySymbol.Locations.FirstOrDefault(); + if (propertyLocation != null) + { + context.ReportDiagnostic(Diagnostic.Create( + DiagnosticDescriptors.PersistentStateShouldNotHavePropertyInitializer, + propertyLocation, + propertySymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat))); + } + }, SyntaxKind.PropertyDeclaration); + }); + } + + private static bool IsDefaultValueInitializer(ExpressionSyntax expression) + { + return expression switch + { + // null + LiteralExpressionSyntax { Token.ValueText: "null" } => true, + // null! + PostfixUnaryExpressionSyntax { Operand: LiteralExpressionSyntax { Token.ValueText: "null" }, OperatorToken.ValueText: "!" } => true, + // default + LiteralExpressionSyntax literal when literal.Token.IsKind(SyntaxKind.DefaultKeyword) => true, + // default! + PostfixUnaryExpressionSyntax { Operand: LiteralExpressionSyntax literal, OperatorToken.ValueText: "!" } + when literal.Token.IsKind(SyntaxKind.DefaultKeyword) => true, + _ => false + }; + } +} \ No newline at end of file diff --git a/src/Components/Analyzers/src/Resources.resx b/src/Components/Analyzers/src/Resources.resx index 5ef9f54b53eb..6a23211094aa 100644 --- a/src/Components/Analyzers/src/Resources.resx +++ b/src/Components/Analyzers/src/Resources.resx @@ -180,4 +180,22 @@ Component parameters should be auto properties + + The value of a property decorated with [SupplyParameterFromForm] and initialized with a property initializer can be overwritten with null when the component receives parameters. To ensure the initialized value is not overwritten, move the initialization to a component lifecycle method like OnInitialized or OnInitializedAsync + + + Property '{0}' has [SupplyParameterFromForm] and a property initializer. This can be overwritten with null during form posts. + + + Property with [SupplyParameterFromForm] should not have initializer + + + The value of a property decorated with [PersistentState] and initialized with a property initializer can be overwritten when the component receives parameters. To ensure the initialized value is not overwritten, move the initialization to a component lifecycle method like OnInitialized or OnInitializedAsync + + + Property '{0}' has [PersistentState] and a property initializer. This can be overwritten during parameter binding. + + + Property with [PersistentState] should not have initializer + \ No newline at end of file diff --git a/src/Components/Analyzers/src/SupplyParameterFromFormAnalyzer.cs b/src/Components/Analyzers/src/SupplyParameterFromFormAnalyzer.cs new file mode 100644 index 000000000000..00bbbcaa1180 --- /dev/null +++ b/src/Components/Analyzers/src/SupplyParameterFromFormAnalyzer.cs @@ -0,0 +1,101 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +#nullable enable + +namespace Microsoft.AspNetCore.Components.Analyzers; + +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class SupplyParameterFromFormAnalyzer : DiagnosticAnalyzer +{ + public SupplyParameterFromFormAnalyzer() + { + SupportedDiagnostics = ImmutableArray.Create( + DiagnosticDescriptors.SupplyParameterFromFormShouldNotHavePropertyInitializer); + } + + public override ImmutableArray SupportedDiagnostics { get; } + + public override void Initialize(AnalysisContext context) + { + context.EnableConcurrentExecution(); + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics); + context.RegisterCompilationStartAction(context => + { + if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols)) + { + // Types we need are not defined. + return; + } + + context.RegisterSyntaxNodeAction(context => + { + var propertyDeclaration = (PropertyDeclarationSyntax)context.Node; + + // Check if property has an initializer + if (propertyDeclaration.Initializer == null) + { + return; + } + + // Ignore initializers that set to default values (null, default, etc.) + if (IsDefaultValueInitializer(propertyDeclaration.Initializer.Value)) + { + return; + } + + var propertySymbol = context.SemanticModel.GetDeclaredSymbol(propertyDeclaration); + if (propertySymbol == null) + { + return; + } + + // Check if property has [SupplyParameterFromForm] attribute + if (!ComponentFacts.IsSupplyParameterFromForm(symbols, propertySymbol)) + { + return; + } + + // Check if the containing type inherits from ComponentBase + var containingType = propertySymbol.ContainingType; + if (!ComponentFacts.IsComponentBase(symbols, containingType)) + { + return; + } + + var propertyLocation = propertySymbol.Locations.FirstOrDefault(); + if (propertyLocation != null) + { + context.ReportDiagnostic(Diagnostic.Create( + DiagnosticDescriptors.SupplyParameterFromFormShouldNotHavePropertyInitializer, + propertyLocation, + propertySymbol.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat))); + } + }, SyntaxKind.PropertyDeclaration); + }); + } + + private static bool IsDefaultValueInitializer(ExpressionSyntax expression) + { + return expression switch + { + // null + LiteralExpressionSyntax { Token.ValueText: "null" } => true, + // null! + PostfixUnaryExpressionSyntax { Operand: LiteralExpressionSyntax { Token.ValueText: "null" }, OperatorToken.ValueText: "!" } => true, + // default + LiteralExpressionSyntax literal when literal.Token.IsKind(SyntaxKind.DefaultKeyword) => true, + // default! + PostfixUnaryExpressionSyntax { Operand: LiteralExpressionSyntax literal, OperatorToken.ValueText: "!" } + when literal.Token.IsKind(SyntaxKind.DefaultKeyword) => true, + _ => false + }; + } +} \ No newline at end of file diff --git a/src/Components/Analyzers/test/PersistentStateAnalyzerTest.cs b/src/Components/Analyzers/test/PersistentStateAnalyzerTest.cs new file mode 100644 index 000000000000..f95df939f0e5 --- /dev/null +++ b/src/Components/Analyzers/test/PersistentStateAnalyzerTest.cs @@ -0,0 +1,282 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Diagnostics; +using TestHelper; + +namespace Microsoft.AspNetCore.Components.Analyzers.Test; + +public class PersistentStateAnalyzerTest : DiagnosticVerifier +{ + protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new PersistentStateAnalyzer(); + + private static readonly string TestDeclarations = $@" + namespace {typeof(ParameterAttribute).Namespace} + {{ + public class {typeof(ParameterAttribute).Name} : System.Attribute + {{ + public bool CaptureUnmatchedValues {{ get; set; }} + }} + + public class {typeof(CascadingParameterAttribute).Name} : System.Attribute + {{ + }} + + public abstract class CascadingParameterAttributeBase : System.Attribute + {{ + }} + + public class PersistentStateAttribute : CascadingParameterAttributeBase + {{ + public RestoreBehavior RestoreBehavior {{ get; set; }} + public bool AllowUpdates {{ get; set; }} + }} + + public enum RestoreBehavior + {{ + Default, + SkipInitialValue, + SkipLastSnapshot + }} + + public interface {typeof(IComponent).Name} + {{ + }} + + public abstract class ComponentBase : {typeof(IComponent).Name} + {{ + }} + }} +"; + + [Fact] + public void IgnoresPropertiesWithoutPersistentStateAttribute() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresPersistentStateWithoutInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresNonComponentBaseClasses() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class NotAComponent + {{ + [PersistentState] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void ReportsWarningForPersistentStateWithInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0009", + Message = "Property 'ConsoleApplication1.TestComponent.MyProperty' has [PersistentState] and a property initializer. This can be overwritten during parameter binding.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 7, 45) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } + + [Fact] + public void ReportsWarningForPersistentStateWithObjectInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public InputModel Input {{ get; set; }} = new InputModel(); + }} + + class InputModel + {{ + public string Value {{ get; set; }} = """"; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0009", + Message = "Property 'ConsoleApplication1.TestComponent.Input' has [PersistentState] and a property initializer. This can be overwritten during parameter binding.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 7, 49) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } + + [Fact] + public void IgnoresPersistentStateWithNullInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} = null; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresPersistentStateWithNullForgivingInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} = null!; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresPersistentStateWithDefaultInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} = default; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresPersistentStateWithDefaultForgivingInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState] public string MyProperty {{ get; set; }} = default!; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void WorksWithInheritedComponentBase() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class BaseComponent : ComponentBase + {{ + }} + + class TestComponent : BaseComponent + {{ + [PersistentState] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0009", + Message = "Property 'ConsoleApplication1.TestComponent.MyProperty' has [PersistentState] and a property initializer. This can be overwritten during parameter binding.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 11, 45) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } + + [Fact] + public void WorksWithPersistentStateAttributeWithParameters() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [PersistentState(RestoreBehavior = RestoreBehavior.SkipInitialValue, AllowUpdates = true)] + public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0009", + Message = "Property 'ConsoleApplication1.TestComponent.MyProperty' has [PersistentState] and a property initializer. This can be overwritten during parameter binding.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 8, 27) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } +} \ No newline at end of file diff --git a/src/Components/Analyzers/test/SupplyParameterFromFormAnalyzerTest.cs b/src/Components/Analyzers/test/SupplyParameterFromFormAnalyzerTest.cs new file mode 100644 index 000000000000..549b3cf115ec --- /dev/null +++ b/src/Components/Analyzers/test/SupplyParameterFromFormAnalyzerTest.cs @@ -0,0 +1,243 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Diagnostics; +using TestHelper; + +namespace Microsoft.AspNetCore.Components.Analyzers.Test; + +public class SupplyParameterFromFormAnalyzerTest : DiagnosticVerifier +{ + protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new SupplyParameterFromFormAnalyzer(); + + private static readonly string TestDeclarations = $@" + namespace {typeof(ParameterAttribute).Namespace} + {{ + public class {typeof(ParameterAttribute).Name} : System.Attribute + {{ + public bool CaptureUnmatchedValues {{ get; set; }} + }} + + public class {typeof(CascadingParameterAttribute).Name} : System.Attribute + {{ + }} + + public class SupplyParameterFromFormAttribute : System.Attribute + {{ + public string Name {{ get; set; }} + public string FormName {{ get; set; }} + }} + + public interface {typeof(IComponent).Name} + {{ + }} + + public abstract class ComponentBase : {typeof(IComponent).Name} + {{ + }} + }} +"; + + [Fact] + public void IgnoresPropertiesWithoutSupplyParameterFromFormAttribute() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresSupplyParameterFromFormWithoutInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresNonComponentBaseClasses() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class NotAComponent + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void ReportsWarningForSupplyParameterFromFormWithInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0008", + Message = "Property 'ConsoleApplication1.TestComponent.MyProperty' has [SupplyParameterFromForm] and a property initializer. This can be overwritten with null during form posts.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 7, 53) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } + + [Fact] + public void ReportsWarningForSupplyParameterFromFormWithObjectInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public InputModel Input {{ get; set; }} = new InputModel(); + }} + + class InputModel + {{ + public string Value {{ get; set; }} = """"; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0008", + Message = "Property 'ConsoleApplication1.TestComponent.Input' has [SupplyParameterFromForm] and a property initializer. This can be overwritten with null during form posts.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 7, 57) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } + + [Fact] + public void IgnoresSupplyParameterFromFormWithNullInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = null; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresSupplyParameterFromFormWithNullForgivingInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = null!; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresSupplyParameterFromFormWithDefaultInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = default; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void IgnoresSupplyParameterFromFormWithDefaultForgivingInitializer() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class TestComponent : ComponentBase + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = default!; + }} + }}" + TestDeclarations; + + VerifyCSharpDiagnostic(test); + } + + [Fact] + public void WorksWithInheritedComponentBase() + { + var test = $@" + namespace ConsoleApplication1 + {{ + using {typeof(ParameterAttribute).Namespace}; + class BaseComponent : ComponentBase + {{ + }} + + class TestComponent : BaseComponent + {{ + [SupplyParameterFromForm] public string MyProperty {{ get; set; }} = ""initial-value""; + }} + }}" + TestDeclarations; + + var expected = new DiagnosticResult + { + Id = "BL0008", + Message = "Property 'ConsoleApplication1.TestComponent.MyProperty' has [SupplyParameterFromForm] and a property initializer. This can be overwritten with null during form posts.", + Severity = DiagnosticSeverity.Warning, + Locations = new[] + { + new DiagnosticResultLocation("Test0.cs", 11, 53) + } + }; + + VerifyCSharpDiagnostic(test, expected); + } +} \ No newline at end of file diff --git a/src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs b/src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs index 53c978d3f847..0d156fd8d051 100644 --- a/src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs +++ b/src/Components/Analyzers/test/Verifiers/CodeFixVerifier.cs @@ -109,7 +109,7 @@ private void VerifyFix(string language, DiagnosticAnalyzer analyzer, CodeFixProv document = document.WithSyntaxRoot(Formatter.Format(document.GetSyntaxRootAsync().Result, Formatter.Annotation, document.Project.Solution.Workspace)); newCompilerDiagnostics = GetNewDiagnostics(compilerDiagnostics, GetCompilerDiagnostics(document)); - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Fix introduced new compiler diagnostics:\r\n{0}\r\n\r\nNew document:\r\n{1}\r\n", diff --git a/src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs b/src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs index 8dde75a73683..f1d5a434de28 100644 --- a/src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs +++ b/src/Components/Analyzers/test/Verifiers/DiagnosticVerifier.cs @@ -112,7 +112,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult { string diagnosticsOutput = actualResults.Any() ? FormatDiagnostics(analyzer, actualResults.ToArray()) : " NONE."; - Assert.True(false, + Assert.Fail( string.Format(CultureInfo.InvariantCulture, "Mismatch between number of diagnostics returned, expected \"{0}\" actual \"{1}\"\r\n\r\nDiagnostics:\r\n{2}\r\n", expectedCount, actualCount, diagnosticsOutput)); } @@ -125,7 +125,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult { if (actual.Location != Location.None) { - Assert.True(false, + Assert.Fail( string.Format(CultureInfo.InvariantCulture, "Expected:\nA project diagnostic with No location\nActual:\n{0}", FormatDiagnostics(analyzer, actual))); } @@ -137,7 +137,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult if (additionalLocations.Length != expected.Locations.Length - 1) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected {0} additional locations but got {1} for Diagnostic:\r\n {2}\r\n", @@ -153,7 +153,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult if (actual.Id != expected.Id) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected diagnostic id to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n", @@ -162,7 +162,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult if (actual.Severity != expected.Severity) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected diagnostic severity to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n", @@ -171,7 +171,7 @@ private static void VerifyDiagnosticResults(IEnumerable actualResult if (actual.GetMessage(CultureInfo.InvariantCulture) != expected.Message) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected diagnostic message to be \"{0}\" was \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n", @@ -204,7 +204,7 @@ private static void VerifyDiagnosticLocation(DiagnosticAnalyzer analyzer, Diagno { if (actualLinePosition.Line + 1 != expected.Line) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected diagnostic to be on line \"{0}\" was actually on line \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n", @@ -217,7 +217,7 @@ private static void VerifyDiagnosticLocation(DiagnosticAnalyzer analyzer, Diagno { if (actualLinePosition.Character + 1 != expected.Column) { - Assert.True(false, + Assert.Fail( string.Format( CultureInfo.InvariantCulture, "Expected diagnostic to start at column \"{0}\" was actually at column \"{1}\"\r\n\r\nDiagnostic:\r\n {2}\r\n", diff --git a/src/Components/Authorization/src/AttributeAuthorizeDataCache.cs b/src/Components/Authorization/src/AttributeAuthorizeDataCache.cs index 1181537155cc..6f7f4bd06539 100644 --- a/src/Components/Authorization/src/AttributeAuthorizeDataCache.cs +++ b/src/Components/Authorization/src/AttributeAuthorizeDataCache.cs @@ -3,13 +3,24 @@ using System.Collections.Concurrent; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components.HotReload; namespace Microsoft.AspNetCore.Components.Authorization; internal static class AttributeAuthorizeDataCache { + static AttributeAuthorizeDataCache() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCache; + } + } + private static readonly ConcurrentDictionary _cache = new(); + private static void ClearCache() => _cache.Clear(); + public static IAuthorizeData[]? GetAuthorizeDataForType(Type type) { if (!_cache.TryGetValue(type, out var result)) diff --git a/src/Components/Authorization/src/Microsoft.AspNetCore.Components.Authorization.csproj b/src/Components/Authorization/src/Microsoft.AspNetCore.Components.Authorization.csproj index 53340c6d6159..cef47c8d844d 100644 --- a/src/Components/Authorization/src/Microsoft.AspNetCore.Components.Authorization.csproj +++ b/src/Components/Authorization/src/Microsoft.AspNetCore.Components.Authorization.csproj @@ -14,4 +14,8 @@ + + + + diff --git a/src/Components/Authorization/src/PublicAPI.Shipped.txt b/src/Components/Authorization/src/PublicAPI.Shipped.txt index 247a98915bb8..2151d091daf8 100644 --- a/src/Components/Authorization/src/PublicAPI.Shipped.txt +++ b/src/Components/Authorization/src/PublicAPI.Shipped.txt @@ -6,6 +6,14 @@ Microsoft.AspNetCore.Components.Authorization.AuthenticationState Microsoft.AspNetCore.Components.Authorization.AuthenticationState.AuthenticationState(System.Security.Claims.ClaimsPrincipal! user) -> void Microsoft.AspNetCore.Components.Authorization.AuthenticationState.User.get -> System.Security.Claims.ClaimsPrincipal! Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.AuthenticationStateData() -> void +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.Claims.get -> System.Collections.Generic.IList! +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.Claims.set -> void +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.NameClaimType.get -> string! +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.NameClaimType.set -> void +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.RoleClaimType.get -> string! +Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.RoleClaimType.set -> void Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.AuthenticationStateChanged -> Microsoft.AspNetCore.Components.Authorization.AuthenticationStateChangedHandler? Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider.AuthenticationStateProvider() -> void @@ -40,6 +48,12 @@ Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.CascadingAuthenticationState() -> void Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent.get -> Microsoft.AspNetCore.Components.RenderFragment? Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent.set -> void +Microsoft.AspNetCore.Components.Authorization.ClaimData +Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData() -> void +Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData(string! type, string! value) -> void +Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData(System.Security.Claims.Claim! claim) -> void +Microsoft.AspNetCore.Components.Authorization.ClaimData.Type.get -> string! +Microsoft.AspNetCore.Components.Authorization.ClaimData.Value.get -> string! Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider Microsoft.AspNetCore.Components.Authorization.IHostEnvironmentAuthenticationStateProvider.SetAuthenticationState(System.Threading.Tasks.Task! authenticationStateTask) -> void Microsoft.Extensions.DependencyInjection.CascadingAuthenticationStateServiceCollectionExtensions diff --git a/src/Components/Authorization/src/PublicAPI.Unshipped.txt b/src/Components/Authorization/src/PublicAPI.Unshipped.txt index e02769f17caf..7dc5c58110bf 100644 --- a/src/Components/Authorization/src/PublicAPI.Unshipped.txt +++ b/src/Components/Authorization/src/PublicAPI.Unshipped.txt @@ -1,15 +1 @@ #nullable enable -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.AuthenticationStateData() -> void -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.Claims.get -> System.Collections.Generic.IList! -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.Claims.set -> void -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.NameClaimType.get -> string! -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.NameClaimType.set -> void -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.RoleClaimType.get -> string! -Microsoft.AspNetCore.Components.Authorization.AuthenticationStateData.RoleClaimType.set -> void -Microsoft.AspNetCore.Components.Authorization.ClaimData -Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData() -> void -Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData(string! type, string! value) -> void -Microsoft.AspNetCore.Components.Authorization.ClaimData.ClaimData(System.Security.Claims.Claim! claim) -> void -Microsoft.AspNetCore.Components.Authorization.ClaimData.Type.get -> string! -Microsoft.AspNetCore.Components.Authorization.ClaimData.Value.get -> string! diff --git a/src/Components/Authorization/test/AuthorizeViewTest.cs b/src/Components/Authorization/test/AuthorizeViewTest.cs index 5db236f3afc2..d957d76e311f 100644 --- a/src/Components/Authorization/test/AuthorizeViewTest.cs +++ b/src/Components/Authorization/test/AuthorizeViewTest.cs @@ -321,7 +321,7 @@ public async Task RendersAuthorizingUntilAuthorizationCompletedAsync() // (This wouldn't happen under the sync context or in wasm) var renderTcs = new TaskCompletionSource(); renderer.OnUpdateDisplayComplete = () => renderTcs.SetResult(); - authTcs.SetResult(CreateAuthenticationState("Monsieur").Result); + authTcs.SetResult(await CreateAuthenticationState("Monsieur")); await renderTcs.Task; Assert.Equal(2, renderer.Batches.Count); @@ -347,7 +347,7 @@ public async Task RendersAuthorizingUntilAuthorizationCompletedAsync() } [Fact] - public void RendersAuthorizingUntilAuthorizationCompleted() + public async Task RendersAuthorizingUntilAuthorizationCompleted() { // Arrange var @event = new ManualResetEventSlim(); @@ -377,7 +377,7 @@ public void RendersAuthorizingUntilAuthorizationCompleted() // Act/Assert 2: Auth process completes asynchronously @event.Reset(); - authTcs.SetResult(CreateAuthenticationState("Monsieur").Result); + authTcs.SetResult(await CreateAuthenticationState("Monsieur")); // We need to wait here because the continuations of SetResult will be scheduled to run asynchronously. @event.Wait(Timeout); diff --git a/src/Components/Components.slnf b/src/Components/Components.slnf index b3975358cac3..aa83a0f8a9ef 100644 --- a/src/Components/Components.slnf +++ b/src/Components/Components.slnf @@ -1,9 +1,10 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "src\\Analyzers\\Microsoft.AspNetCore.Analyzer.Testing\\src\\Microsoft.AspNetCore.Analyzer.Testing.csproj", "src\\Antiforgery\\src\\Microsoft.AspNetCore.Antiforgery.csproj", + "src\\Assets\\Microsoft.AspNetCore.App.Internal.Assets.csproj", "src\\Components\\Analyzers\\src\\Microsoft.AspNetCore.Components.Analyzers.csproj", "src\\Components\\Analyzers\\test\\Microsoft.AspNetCore.Components.Analyzers.Tests.csproj", "src\\Components\\Authorization\\src\\Microsoft.AspNetCore.Components.Authorization.csproj", @@ -18,6 +19,7 @@ "src\\Components\\Forms\\test\\Microsoft.AspNetCore.Components.Forms.Tests.csproj", "src\\Components\\QuickGrid\\Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter\\src\\Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter.csproj", "src\\Components\\QuickGrid\\Microsoft.AspNetCore.Components.QuickGrid\\src\\Microsoft.AspNetCore.Components.QuickGrid.csproj", + "src\\Components\\QuickGrid\\Microsoft.AspNetCore.Components.QuickGrid\\test\\Microsoft.AspNetCore.Components.QuickGrid.Tests.csproj", "src\\Components\\Samples\\BlazorServerApp\\BlazorServerApp.csproj", "src\\Components\\Samples\\BlazorUnitedApp.Client\\BlazorUnitedApp.Client.csproj", "src\\Components\\Samples\\BlazorUnitedApp\\BlazorUnitedApp.csproj", @@ -153,6 +155,10 @@ "src\\StaticAssets\\src\\Microsoft.AspNetCore.StaticAssets.csproj", "src\\StaticAssets\\test\\Microsoft.AspNetCore.StaticAssets.Tests.csproj", "src\\Testing\\src\\Microsoft.AspNetCore.InternalTesting.csproj", + "src\\Validation\\gen\\Microsoft.Extensions.Validation.ValidationsGenerator.csproj", + "src\\Validation\\src\\Microsoft.Extensions.Validation.csproj", + "src\\Validation\\test\\Microsoft.Extensions.Validation.GeneratorTests\\Microsoft.Extensions.Validation.GeneratorTests.csproj", + "src\\Validation\\test\\Microsoft.Extensions.Validation.Tests\\Microsoft.Extensions.Validation.Tests.csproj", "src\\WebEncoders\\src\\Microsoft.Extensions.WebEncoders.csproj" ] } diff --git a/src/Components/Components/src/BindConverter.cs b/src/Components/Components/src/BindConverter.cs index 06a03a05f390..a3e68de026a5 100644 --- a/src/Components/Components/src/BindConverter.cs +++ b/src/Components/Components/src/BindConverter.cs @@ -8,6 +8,7 @@ using System.Reflection; using System.Text; using System.Text.Json; +using Microsoft.AspNetCore.Components.HotReload; namespace Microsoft.AspNetCore.Components; @@ -1667,6 +1668,14 @@ private static class FormatterDelegateCache { private static readonly ConcurrentDictionary _cache = new ConcurrentDictionary(); + static FormatterDelegateCache() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _cache.Clear; + } + } + private static MethodInfo? _makeArrayFormatter; [UnconditionalSuppressMessage( @@ -1856,6 +1865,14 @@ internal static class ParserDelegateCache { private static readonly ConcurrentDictionary _cache = new ConcurrentDictionary(); + static ParserDelegateCache() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _cache.Clear; + } + } + private static MethodInfo? _convertToEnum; private static MethodInfo? _convertToNullableEnum; private static MethodInfo? _makeArrayTypeConverter; diff --git a/src/Components/Components/src/CascadingParameterState.cs b/src/Components/Components/src/CascadingParameterState.cs index ae4f526d5d3a..2193e49b4766 100644 --- a/src/Components/Components/src/CascadingParameterState.cs +++ b/src/Components/Components/src/CascadingParameterState.cs @@ -13,17 +13,16 @@ namespace Microsoft.AspNetCore.Components; internal readonly struct CascadingParameterState + (in CascadingParameterInfo parameterInfo, ICascadingValueSupplier valueSupplier, object? key) { private static readonly ConcurrentDictionary _cachedInfos = new(); - public CascadingParameterInfo ParameterInfo { get; } - public ICascadingValueSupplier ValueSupplier { get; } + public CascadingParameterInfo ParameterInfo { get; } = parameterInfo; + public ICascadingValueSupplier ValueSupplier { get; } = valueSupplier; + public object? Key { get; } = key; public CascadingParameterState(in CascadingParameterInfo parameterInfo, ICascadingValueSupplier valueSupplier) - { - ParameterInfo = parameterInfo; - ValueSupplier = valueSupplier; - } + : this(parameterInfo, valueSupplier, key: null) { } public static IReadOnlyList FindCascadingParameters(ComponentState componentState, out bool hasSingleDeliveryParameters) { @@ -55,7 +54,7 @@ public static IReadOnlyList FindCascadingParameters(Com { // Although not all parameters might be matched, we know the maximum number resultStates ??= new List(infos.Length - infoIndex); - resultStates.Add(new CascadingParameterState(info, supplier)); + resultStates.Add(new CascadingParameterState(info, supplier, componentState)); if (info.Attribute.SingleDelivery) { diff --git a/src/Components/Components/src/CascadingValue.cs b/src/Components/Components/src/CascadingValue.cs index a040894ac57c..d89320a53566 100644 --- a/src/Components/Components/src/CascadingValue.cs +++ b/src/Components/Components/src/CascadingValue.cs @@ -140,7 +140,7 @@ bool ICascadingValueSupplier.CanSupplyValue(in CascadingParameterInfo parameterI || string.Equals(requestedName, Name, StringComparison.OrdinalIgnoreCase); // Also match on name } - object? ICascadingValueSupplier.GetCurrentValue(in CascadingParameterInfo parameterInfo) + object? ICascadingValueSupplier.GetCurrentValue(object? key, in CascadingParameterInfo parameterInfo) { return Value; } diff --git a/src/Components/Components/src/CascadingValueSource.cs b/src/Components/Components/src/CascadingValueSource.cs index 3645b17bed39..eb17138786c6 100644 --- a/src/Components/Components/src/CascadingValueSource.cs +++ b/src/Components/Components/src/CascadingValueSource.cs @@ -149,7 +149,7 @@ bool ICascadingValueSupplier.CanSupplyValue(in CascadingParameterInfo parameterI || string.Equals(requestedName, _name, StringComparison.OrdinalIgnoreCase); // Also match on name } - object? ICascadingValueSupplier.GetCurrentValue(in CascadingParameterInfo parameterInfo) + object? ICascadingValueSupplier.GetCurrentValue(object? key, in CascadingParameterInfo parameterInfo) { if (_initialValueFactory is not null) { diff --git a/src/Components/Components/src/ChangeDetection.cs b/src/Components/Components/src/ChangeDetection.cs index 68918d023758..952debeb8f90 100644 --- a/src/Components/Components/src/ChangeDetection.cs +++ b/src/Components/Components/src/ChangeDetection.cs @@ -1,10 +1,23 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Collections.Concurrent; +using Microsoft.AspNetCore.Components.HotReload; + namespace Microsoft.AspNetCore.Components; internal sealed class ChangeDetection { + private static readonly ConcurrentDictionary _immutableObjectTypesCache = new(); + + static ChangeDetection() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _immutableObjectTypesCache.Clear; + } + } + public static bool MayHaveChanged(T1 oldValue, T2 newValue) { var oldIsNotNull = oldValue != null; @@ -30,10 +43,6 @@ public static bool MayHaveChanged(T1 oldValue, T2 newValue) return false; } - // The contents of this list need to trade off false negatives against computation - // time. So we don't want a huge list of types to check (or would have to move to - // a hashtable lookup, which is differently expensive). It's better not to include - // uncommon types here even if they are known to be immutable. // This logic assumes that no new System.TypeCode enum entries have been declared since 7.0, or at least that any new ones // represent immutable types. If System.TypeCode changes, review this logic to ensure it is still correct. // Supported immutable types : bool, byte, sbyte, short, ushort, int, uint, long, ulong, char, double, @@ -41,6 +50,11 @@ public static bool MayHaveChanged(T1 oldValue, T2 newValue) // For performance reasons, the following immutable types are not supported: IntPtr, UIntPtr, Type. private static bool IsKnownImmutableType(Type type) => Type.GetTypeCode(type) != TypeCode.Object - || type == typeof(Guid) + || _immutableObjectTypesCache.GetOrAdd(type, IsImmutableObjectTypeCore); + + private static bool IsImmutableObjectTypeCore(Type type) + => type == typeof(Guid) + || type == typeof(DateOnly) + || type == typeof(TimeOnly) || typeof(IEventCallback).IsAssignableFrom(type); } diff --git a/src/Components/Components/src/ComponentBase.cs b/src/Components/Components/src/ComponentBase.cs index 5de04ae8d70b..eefe8eb74655 100644 --- a/src/Components/Components/src/ComponentBase.cs +++ b/src/Components/Components/src/ComponentBase.cs @@ -283,7 +283,10 @@ private async Task RunInitAndSetParametersAsync() // to defer calling StateHasChanged up until the first bit of async code happens or until // the end. Additionally, we want to avoid calling StateHasChanged if no // async work is to be performed. - StateHasChanged(); + if (task.Status != TaskStatus.Faulted) + { + StateHasChanged(); + } try { @@ -319,7 +322,10 @@ private Task CallOnParametersSetAsync() // We always call StateHasChanged here as we want to trigger a rerender after OnParametersSet and // the synchronous part of OnParametersSetAsync has run. - StateHasChanged(); + if (task.Status != TaskStatus.Faulted) + { + StateHasChanged(); + } return shouldAwaitTask ? CallStateHasChangedOnAsyncCompletion(task) : diff --git a/src/Components/Components/src/ComponentFactory.cs b/src/Components/Components/src/ComponentFactory.cs index 12ad8ba03dea..0618c9a4d20a 100644 --- a/src/Components/Components/src/ComponentFactory.cs +++ b/src/Components/Components/src/ComponentFactory.cs @@ -4,6 +4,7 @@ using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.Reflection; +using Microsoft.AspNetCore.Components.HotReload; using Microsoft.AspNetCore.Components.Reflection; using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.Extensions.DependencyInjection; @@ -13,11 +14,24 @@ namespace Microsoft.AspNetCore.Components; internal sealed class ComponentFactory { + // This switch is unsupported and will be removed in a future version. + private static readonly bool _propertyInjectionDisabled = + AppContext.TryGetSwitch("Microsoft.AspNetCore.Components.Unsupported.DisablePropertyInjection", out var isDisabled) && + isDisabled; + private const BindingFlags _injectablePropertyBindingFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; private static readonly ConcurrentDictionary _cachedComponentTypeInfo = new(); + static ComponentFactory() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCache; + } + } + private readonly IComponentActivator _componentActivator; private readonly Renderer _renderer; @@ -73,15 +87,18 @@ public IComponent InstantiateComponent(IServiceProvider serviceProvider, [Dynami throw new InvalidOperationException($"The component activator returned a null value for a component of type {componentType.FullName}."); } - if (component.GetType() == componentType) + if (!_propertyInjectionDisabled) { - // Fast, common case: use the cached data we already looked up - propertyInjector(serviceProvider, component); - } - else - { - // Uncommon case where the activator/resolver returned a different type. Needs an extra cache lookup. - PerformPropertyInjection(serviceProvider, component); + if (component.GetType() == componentType) + { + // Fast, common case: use the cached data we already looked up + propertyInjector(serviceProvider, component); + } + else + { + // Uncommon case where the activator/resolver returned a different type. Needs an extra cache lookup. + PerformPropertyInjection(serviceProvider, component); + } } return component; diff --git a/src/Components/Components/src/ComponentSubscriptionKey.cs b/src/Components/Components/src/ComponentSubscriptionKey.cs new file mode 100644 index 000000000000..010510f480a6 --- /dev/null +++ b/src/Components/Components/src/ComponentSubscriptionKey.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.AspNetCore.Components.Rendering; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +[DebuggerDisplay("{GetDebuggerDisplay(),nq}")] +internal readonly struct ComponentSubscriptionKey(ComponentState subscriber, string propertyName) : IEquatable +{ + public ComponentState Subscriber { get; } = subscriber; + + public string PropertyName { get; } = propertyName; + + public bool Equals(ComponentSubscriptionKey other) + => Subscriber == other.Subscriber && PropertyName == other.PropertyName; + + public override bool Equals(object? obj) + => obj is ComponentSubscriptionKey other && Equals(other); + + public override int GetHashCode() + => HashCode.Combine(Subscriber, PropertyName); + + private string GetDebuggerDisplay() + => $"{Subscriber.Component.GetType().Name}.{PropertyName}"; +} diff --git a/src/Components/Components/src/ComponentsActivitySource.cs b/src/Components/Components/src/ComponentsActivitySource.cs new file mode 100644 index 000000000000..add795e7ec24 --- /dev/null +++ b/src/Components/Components/src/ComponentsActivitySource.cs @@ -0,0 +1,143 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.AspNetCore.Components.Infrastructure; + +namespace Microsoft.AspNetCore.Components; + +/// +/// This is instance scoped per renderer +/// +internal class ComponentsActivitySource +{ + internal const string Name = "Microsoft.AspNetCore.Components"; + internal const string OnRouteName = $"{Name}.Navigate"; + internal const string OnEventName = $"{Name}.HandleEvent"; + + private static ActivitySource ActivitySource { get; } = new ActivitySource(Name); + private ComponentsActivityLinkStore? _componentsActivityLinkStore; + + public void Init(ComponentsActivityLinkStore store) + { + _componentsActivityLinkStore = store; + } + + public ComponentsActivityHandle StartNavigateActivity(string componentType, string route) + { + var activity = ActivitySource.CreateActivity(OnRouteName, ActivityKind.Internal, parentId: null, null, null); + if (activity is not null) + { + var httpActivity = Activity.Current; + activity.DisplayName = $"Route {route ?? "[unknown path]"} -> {componentType ?? "[unknown component]"}"; + Activity.Current = null; // do not inherit the parent activity + activity.Start(); + + if (activity.IsAllDataRequested) + { + if (componentType != null) + { + activity.SetTag("aspnetcore.components.type", componentType); + } + if (route != null) + { + activity.SetTag("aspnetcore.components.route", route); + + // store self link + _componentsActivityLinkStore!.SetActivityContext(ComponentsActivityLinkStore.Route, activity.Context, + new KeyValuePair("aspnetcore.components.route", route)); + } + } + + return new ComponentsActivityHandle { Activity = activity, Previous = httpActivity }; + } + return default; + } + + public void StopNavigateActivity(ComponentsActivityHandle activityHandle, Exception? ex) + { + StopComponentActivity(ComponentsActivityLinkStore.Route, activityHandle, ex); + } + + public static ComponentsActivityHandle StartHandleEventActivity(string? componentType, string? methodName, string? attributeName) + { + var activity = ActivitySource.CreateActivity(OnEventName, ActivityKind.Internal, parentId: null, null, null); + + if (activity is not null) + { + var previousActivity = Activity.Current; + activity.DisplayName = $"Event {attributeName ?? "[unknown attribute]"} -> {componentType ?? "[unknown component]"}.{methodName ?? "[unknown method]"}"; + Activity.Current = null; // do not inherit the parent activity + activity.Start(); + + if (activity.IsAllDataRequested) + { + if (componentType != null) + { + activity.SetTag("aspnetcore.components.type", componentType); + } + if (methodName != null) + { + activity.SetTag("code.function.name", methodName); + } + if (attributeName != null) + { + activity.SetTag("aspnetcore.components.attribute.name", attributeName); + } + } + + return new ComponentsActivityHandle { Activity = activity, Previous = previousActivity }; + } + return default; + } + + public void StopHandleEventActivity(ComponentsActivityHandle activityHandle, Exception? ex) + { + StopComponentActivity(ComponentsActivityLinkStore.Event, activityHandle, ex); + } + + public async Task CaptureHandleEventStopAsync(Task task, ComponentsActivityHandle activityHandle) + { + try + { + await task; + StopHandleEventActivity(activityHandle, null); + } + catch (Exception ex) + { + StopHandleEventActivity(activityHandle, ex); + } + } + + private void StopComponentActivity(string category, ComponentsActivityHandle activityHandle, Exception? ex) + { + var activity = activityHandle.Activity; + if (activity != null && !activity.IsStopped) + { + if (ex != null) + { + activity.SetTag("error.type", ex.GetType().FullName); + activity.SetStatus(ActivityStatusCode.Error); + } + if (activity.IsAllDataRequested) + { + _componentsActivityLinkStore!.AddActivityContexts(category, activity); + } + activity.Stop(); + + if (Activity.Current == null && activityHandle.Previous != null && !activityHandle.Previous.IsStopped) + { + Activity.Current = activityHandle.Previous; + } + } + } +} + +/// +/// Named tuple for restoring the previous activity after stopping the current one. +/// +internal struct ComponentsActivityHandle +{ + public Activity? Previous; + public Activity? Activity; +} diff --git a/src/Components/Components/src/ComponentsMetrics.cs b/src/Components/Components/src/ComponentsMetrics.cs new file mode 100644 index 000000000000..64fad76c66dd --- /dev/null +++ b/src/Components/Components/src/ComponentsMetrics.cs @@ -0,0 +1,209 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Diagnostics.Metrics; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Http; + +namespace Microsoft.AspNetCore.Components; + +internal sealed class ComponentsMetrics : IDisposable +{ + public const string MeterName = "Microsoft.AspNetCore.Components"; + public const string LifecycleMeterName = "Microsoft.AspNetCore.Components.Lifecycle"; + private readonly Meter _meter; + private readonly Meter _lifeCycleMeter; + + private readonly Counter _navigationCount; + + private readonly Histogram _eventDuration; + private readonly Histogram _parametersDuration; + private readonly Histogram _batchDuration; + private readonly Histogram _batchSize; + + public bool IsNavigationEnabled => _navigationCount.Enabled; + + public bool IsEventEnabled => _eventDuration.Enabled; + + public bool IsParametersEnabled => _parametersDuration.Enabled; + + public bool IsBatchEnabled => _batchDuration.Enabled; + + public ComponentsMetrics(IMeterFactory meterFactory) + { + Debug.Assert(meterFactory != null); + + _meter = meterFactory.Create(MeterName); + _lifeCycleMeter = meterFactory.Create(LifecycleMeterName); + + _navigationCount = _meter.CreateCounter( + "aspnetcore.components.navigate", + unit: "{route}", + description: "Total number of route changes."); + + _eventDuration = _meter.CreateHistogram( + "aspnetcore.components.handle_event.duration", + unit: "s", + description: "Duration of processing browser event. It includes business logic of the component but not affected child components.", + advice: new InstrumentAdvice { HistogramBucketBoundaries = MetricsConstants.ShortSecondsBucketBoundaries }); + + _parametersDuration = _lifeCycleMeter.CreateHistogram( + "aspnetcore.components.update_parameters.duration", + unit: "s", + description: "Duration of processing component parameters. It includes business logic of the component.", + advice: new InstrumentAdvice { HistogramBucketBoundaries = MetricsConstants.BlazorRenderingSecondsBucketBoundaries }); + + _batchDuration = _lifeCycleMeter.CreateHistogram( + "aspnetcore.components.render_diff.duration", + unit: "s", + description: "Duration of rendering component tree and producing HTML diff. It includes business logic of the changed components.", + advice: new InstrumentAdvice { HistogramBucketBoundaries = MetricsConstants.BlazorRenderingSecondsBucketBoundaries }); + + _batchSize = _lifeCycleMeter.CreateHistogram( + "aspnetcore.components.render_diff.size", + unit: "{elements}", + description: "Number of HTML elements modified during a rendering batch.", + advice: new InstrumentAdvice { HistogramBucketBoundaries = MetricsConstants.BlazorRenderingDiffLengthBucketBoundaries }); + } + + public void Navigation(string componentType, string route) + { + var tags = new TagList(); + AddComponentTypeTag(ref tags, componentType); + AddRouteTag(ref tags, route); + + _navigationCount.Add(1, tags); + } + + public async Task CaptureEventDuration(Task task, long startTimestamp, string? componentType, string? methodName, string? attributeName) + { + var tags = new TagList(); + AddComponentTypeTag(ref tags, componentType); + AddMethodNameTag(ref tags, methodName); + AddAttributeNameTag(ref tags, attributeName); + + try + { + await task; + } + catch (Exception ex) + { + AddErrorTag(ref tags, ex); + } + var duration = Stopwatch.GetElapsedTime(startTimestamp); + _eventDuration.Record(duration.TotalSeconds, tags); + } + + public void FailEventSync(Exception ex, long startTimestamp, string? componentType, string? methodName, string? attributeName) + { + var tags = new TagList(); + AddComponentTypeTag(ref tags, componentType); + AddMethodNameTag(ref tags, methodName); + AddAttributeNameTag(ref tags, attributeName); + AddErrorTag(ref tags, ex); + + var duration = Stopwatch.GetElapsedTime(startTimestamp); + _eventDuration.Record(duration.TotalSeconds, tags); + } + + public async Task CaptureParametersDuration(Task task, long startTimestamp, string? componentType) + { + var tags = new TagList(); + AddComponentTypeTag(ref tags, componentType); + + try + { + await task; + } + catch(Exception ex) + { + AddErrorTag(ref tags, ex); + } + var duration = Stopwatch.GetElapsedTime(startTimestamp); + _parametersDuration.Record(duration.TotalSeconds, tags); + } + + public void FailParametersSync(Exception ex, long startTimestamp, string? componentType) + { + var duration = Stopwatch.GetElapsedTime(startTimestamp); + var tags = new TagList(); + AddComponentTypeTag(ref tags, componentType); + AddErrorTag(ref tags, ex); + + _parametersDuration.Record(duration.TotalSeconds, tags); + } + + public async Task CaptureBatchDuration(Task task, long startTimestamp, int diffLength) + { + var tags = new TagList(); + + try + { + await task; + } + catch (Exception ex) + { + AddErrorTag(ref tags, ex); + } + var duration = Stopwatch.GetElapsedTime(startTimestamp); + _batchDuration.Record(duration.TotalSeconds, tags); + _batchSize.Record(diffLength, tags); + } + + public void FailBatchSync(Exception ex, long startTimestamp) + { + var duration = Stopwatch.GetElapsedTime(startTimestamp); + var tags = new TagList(); + AddErrorTag(ref tags, ex); + + _batchDuration.Record(duration.TotalSeconds, tags); + } + + public void Dispose() + { + _meter.Dispose(); + _lifeCycleMeter.Dispose(); + } + + private static void AddComponentTypeTag(ref TagList tags, string? componentType) + { + if (componentType != null) + { + tags.Add("aspnetcore.components.type", componentType); + } + } + + private static void AddRouteTag(ref TagList tags, string? route) + { + if (route != null) + { + tags.Add("aspnetcore.components.route", route); + } + } + + private static void AddMethodNameTag(ref TagList tags, string? methodName) + { + if (methodName != null) + { + tags.Add("code.function.name", methodName); + } + } + + private static void AddAttributeNameTag(ref TagList tags, string? attributeName) + { + if (attributeName != null) + { + tags.Add("aspnetcore.components.attribute.name", attributeName); + } + } + + private static void AddErrorTag(ref TagList tags, Exception? exception) + { + var errorType = exception?.GetType().FullName; + if (errorType is not null) + { + tags.Add("error.type", errorType); + } + } +} diff --git a/src/Components/Components/src/DefaultComponentActivator.cs b/src/Components/Components/src/DefaultComponentActivator.cs index 716591e4a660..24b92dcb1056 100644 --- a/src/Components/Components/src/DefaultComponentActivator.cs +++ b/src/Components/Components/src/DefaultComponentActivator.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; +using Microsoft.AspNetCore.Components.HotReload; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Components; @@ -11,6 +12,14 @@ internal sealed class DefaultComponentActivator(IServiceProvider serviceProvider { private static readonly ConcurrentDictionary _cachedComponentTypeInfo = new(); + static DefaultComponentActivator() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCache; + } + } + public static void ClearCache() => _cachedComponentTypeInfo.Clear(); /// diff --git a/src/Components/Components/src/EventCallback.cs b/src/Components/Components/src/EventCallback.cs index 07efd535c082..cc4a63bacf4b 100644 --- a/src/Components/Components/src/EventCallback.cs +++ b/src/Components/Components/src/EventCallback.cs @@ -80,5 +80,5 @@ public override int GetHashCode() public override bool Equals(object? obj) => obj is EventCallback other && ReferenceEquals(Receiver, other.Receiver) - && ReferenceEquals(Delegate, other.Delegate); + && (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null)); } diff --git a/src/Components/Components/src/EventCallbackOfT.cs b/src/Components/Components/src/EventCallbackOfT.cs index e22317d9114f..f2c84c942646 100644 --- a/src/Components/Components/src/EventCallbackOfT.cs +++ b/src/Components/Components/src/EventCallbackOfT.cs @@ -80,5 +80,5 @@ public override int GetHashCode() public override bool Equals(object? obj) => obj is EventCallback other && ReferenceEquals(Receiver, other.Receiver) - && ReferenceEquals(Delegate, other.Delegate); + && (Delegate?.Equals(other.Delegate) ?? (other.Delegate == null)); } diff --git a/src/Components/Components/src/ICascadingValueSupplier.cs b/src/Components/Components/src/ICascadingValueSupplier.cs index c535d9cfda16..c61362537062 100644 --- a/src/Components/Components/src/ICascadingValueSupplier.cs +++ b/src/Components/Components/src/ICascadingValueSupplier.cs @@ -11,7 +11,7 @@ internal interface ICascadingValueSupplier bool CanSupplyValue(in CascadingParameterInfo parameterInfo); - object? GetCurrentValue(in CascadingParameterInfo parameterInfo); + object? GetCurrentValue(object? key, in CascadingParameterInfo parameterInfo); void Subscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo); diff --git a/src/Components/Components/src/IPersistentComponentStateSerializer.cs b/src/Components/Components/src/IPersistentComponentStateSerializer.cs new file mode 100644 index 000000000000..bcbfebbacf0a --- /dev/null +++ b/src/Components/Components/src/IPersistentComponentStateSerializer.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; + +namespace Microsoft.AspNetCore.Components; + +internal interface IPersistentComponentStateSerializer +{ + void Persist(Type type, object value, IBufferWriter writer); + object Restore(Type type, ReadOnlySequence data); +} \ No newline at end of file diff --git a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj index 9ebdbfc3778f..f165e6f82489 100644 --- a/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj +++ b/src/Components/Components/src/Microsoft.AspNetCore.Components.csproj @@ -17,11 +17,15 @@ + + + + @@ -85,6 +89,7 @@ + diff --git a/src/Components/Components/src/Microsoft.AspNetCore.Components.netcoreapp.nuspec b/src/Components/Components/src/Microsoft.AspNetCore.Components.netcoreapp.nuspec index 2ec67a3f538c..41a3ecd9d4a1 100644 --- a/src/Components/Components/src/Microsoft.AspNetCore.Components.netcoreapp.nuspec +++ b/src/Components/Components/src/Microsoft.AspNetCore.Components.netcoreapp.nuspec @@ -3,7 +3,7 @@ $CommonMetadataElements$ - + diff --git a/src/Components/Components/src/NavigationManager.cs b/src/Components/Components/src/NavigationManager.cs index fab5c69e9635..fecbfaca6c28 100644 --- a/src/Components/Components/src/NavigationManager.cs +++ b/src/Components/Components/src/NavigationManager.cs @@ -35,6 +35,25 @@ public event EventHandler LocationChanged private CancellationTokenSource? _locationChangingCts; + /// + /// An event that fires when the page is not found. + /// + public event EventHandler OnNotFound + { + add + { + AssertInitialized(); + _notFound += value; + } + remove + { + AssertInitialized(); + _notFound -= value; + } + } + + private EventHandler? _notFound; + // For the baseUri it's worth storing as a System.Uri so we can do operations // on that type. System.Uri gives us access to the original string anyway. private Uri? _baseUri; @@ -177,6 +196,24 @@ protected virtual void NavigateToCore([StringSyntax(StringSyntaxAttribute.Uri)] public virtual void Refresh(bool forceReload = false) => NavigateTo(Uri, forceLoad: true, replace: true); + /// + /// Handles setting the NotFound state. + /// + public void NotFound() => NotFoundCore(); + + private void NotFoundCore() + { + if (_notFound == null) + { + // global router doesn't exist, no events were registered + return; + } + else + { + _notFound.Invoke(this, new NotFoundEventArgs()); + } + } + /// /// Called to initialize BaseURI and current URI before these values are used for the first time. /// Override and call this method to dynamically calculate these values. diff --git a/src/Components/Components/src/OwningComponentBase.cs b/src/Components/Components/src/OwningComponentBase.cs index 739f0614258d..b2e9d9ef554a 100644 --- a/src/Components/Components/src/OwningComponentBase.cs +++ b/src/Components/Components/src/OwningComponentBase.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Components; /// requires disposal such as a repository or database abstraction. Using /// as a base class ensures that the service provider scope is disposed with the component. /// -public abstract class OwningComponentBase : ComponentBase, IDisposable +public abstract class OwningComponentBase : ComponentBase, IDisposable, IAsyncDisposable { private AsyncServiceScope? _scope; @@ -44,20 +44,53 @@ protected IServiceProvider ScopedServices } } + /// void IDisposable.Dispose() + { + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + + /// + /// Releases the service scope used by the component. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected virtual void Dispose(bool disposing) { if (!IsDisposed) { - _scope?.Dispose(); - _scope = null; - Dispose(disposing: true); + if (disposing && _scope.HasValue && _scope.Value is IDisposable disposable) + { + disposable.Dispose(); + _scope = null; + } + IsDisposed = true; } } - /// - protected virtual void Dispose(bool disposing) + /// + async ValueTask IAsyncDisposable.DisposeAsync() { + await DisposeAsyncCore().ConfigureAwait(false); + + Dispose(disposing: false); + GC.SuppressFinalize(this); + } + + /// + /// Asynchronously releases the service scope used by the component. + /// + /// A task that represents the asynchronous dispose operation. + protected virtual async ValueTask DisposeAsyncCore() + { + if (!IsDisposed && _scope.HasValue) + { + await _scope.Value.DisposeAsync().ConfigureAwait(false); + _scope = null; + } + + IsDisposed = true; } } diff --git a/src/Components/Components/src/ParameterView.cs b/src/Components/Components/src/ParameterView.cs index 01252270fbe5..a1dc464399d6 100644 --- a/src/Components/Components/src/ParameterView.cs +++ b/src/Components/Components/src/ParameterView.cs @@ -437,7 +437,7 @@ public bool MoveNext() _currentIndex = nextIndex; var state = _cascadingParameters[_currentIndex]; - var currentValue = state.ValueSupplier.GetCurrentValue(state.ParameterInfo); + var currentValue = state.ValueSupplier.GetCurrentValue(state.Key, state.ParameterInfo); _current = new ParameterValue(state.ParameterInfo.PropertyName, currentValue!, true); return true; } diff --git a/src/Components/Components/src/PersistentComponentState.cs b/src/Components/Components/src/PersistentComponentState.cs index bc193dd77e5f..56b669f5e2fe 100644 --- a/src/Components/Components/src/PersistentComponentState.cs +++ b/src/Components/Components/src/PersistentComponentState.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using static Microsoft.AspNetCore.Internal.LinkerFlags; @@ -16,24 +17,30 @@ public class PersistentComponentState private readonly IDictionary _currentState; private readonly List _registeredCallbacks; + private readonly List _registeredRestoringCallbacks; internal PersistentComponentState( - IDictionary currentState, - List pauseCallbacks) + IDictionary currentState, + List pauseCallbacks, + List restoringCallbacks) { _currentState = currentState; _registeredCallbacks = pauseCallbacks; + _registeredRestoringCallbacks = restoringCallbacks; } internal bool PersistingState { get; set; } - internal void InitializeExistingState(IDictionary existingState) + internal RestoreContext CurrentContext { get; private set; } = RestoreContext.InitialValue; + + internal void InitializeExistingState(IDictionary existingState, RestoreContext context) { if (_existingState != null) { throw new InvalidOperationException("PersistentComponentState already initialized."); } _existingState = existingState ?? throw new ArgumentNullException(nameof(existingState)); + CurrentContext = context; } /// @@ -56,6 +63,11 @@ public PersistingComponentStateSubscription RegisterOnPersisting(Func call { ArgumentNullException.ThrowIfNull(callback); + if (PersistingState) + { + throw new InvalidOperationException("Registering a callback while persisting state is not allowed."); + } + var persistenceCallback = new PersistComponentStateRegistration(callback, renderMode); _registeredCallbacks.Add(persistenceCallback); @@ -63,6 +75,30 @@ public PersistingComponentStateSubscription RegisterOnPersisting(Func call return new PersistingComponentStateSubscription(_registeredCallbacks, persistenceCallback); } + /// + /// Register a callback to restore the state when the application state is being restored. + /// + /// The callback to invoke when the application state is being restored. + /// Options that control the restoration behavior. + /// A subscription that can be used to unregister the callback when disposed. + public RestoringComponentStateSubscription RegisterOnRestoring(Action callback, RestoreOptions options) + { + Debug.Assert(CurrentContext != null); + if (CurrentContext.ShouldRestore(options)) + { + callback(); + } + + if (options.AllowUpdates) + { + var registration = new RestoreComponentStateRegistration(callback); + _registeredRestoringCallbacks.Add(registration); + return new RestoringComponentStateSubscription(_registeredRestoringCallbacks, registration); + } + + return default; + } + /// /// Serializes as JSON and persists it under the given . /// @@ -79,12 +115,46 @@ public PersistingComponentStateSubscription RegisterOnPersisting(Func call throw new InvalidOperationException("Persisting state is only allowed during an OnPersisting callback."); } - if (_currentState.ContainsKey(key)) + if (!_currentState.TryAdd(key, JsonSerializer.SerializeToUtf8Bytes(instance, JsonSerializerOptionsProvider.Options))) { throw new ArgumentException($"There is already a persisted object under the same key '{key}'"); } + } + + [RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed.")] + internal void PersistAsJson(string key, object instance, [DynamicallyAccessedMembers(JsonSerialized)] Type type) + { + ArgumentNullException.ThrowIfNull(key); + + if (!PersistingState) + { + throw new InvalidOperationException("Persisting state is only allowed during an OnPersisting callback."); + } + + if (!_currentState.TryAdd(key, JsonSerializer.SerializeToUtf8Bytes(instance, type, JsonSerializerOptionsProvider.Options))) + { + throw new ArgumentException($"There is already a persisted object under the same key '{key}'"); + } + } + + /// + /// Persists the provided byte array under the given key. + /// + /// The key to use to persist the state. + /// The byte array to persist. + internal void PersistAsBytes(string key, byte[] data) + { + ArgumentNullException.ThrowIfNull(key); + + if (!PersistingState) + { + throw new InvalidOperationException("Persisting state is only allowed during an OnPersisting callback."); + } - _currentState.Add(key, JsonSerializer.SerializeToUtf8Bytes(instance, JsonSerializerOptionsProvider.Options)); + if (!_currentState.TryAdd(key, data)) + { + throw new ArgumentException($"There is already a persisted object under the same key '{key}'"); + } } /// @@ -114,6 +184,37 @@ public PersistingComponentStateSubscription RegisterOnPersisting(Func call } } + [RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed.")] + internal bool TryTakeFromJson(string key, [DynamicallyAccessedMembers(JsonSerialized)] Type type, [MaybeNullWhen(false)] out object? instance) + { + ArgumentNullException.ThrowIfNull(type); + ArgumentNullException.ThrowIfNull(key); + if (TryTake(key, out var data)) + { + var reader = new Utf8JsonReader(data); + instance = JsonSerializer.Deserialize(ref reader, type, JsonSerializerOptionsProvider.Options); + return true; + } + else + { + instance = default; + return false; + } + } + + /// + /// Tries to retrieve the persisted state as raw bytes with the given . + /// When the key is present, the raw bytes are successfully returned via + /// and removed from the . + /// + /// The key used to persist the data. + /// The persisted raw bytes. + /// true if the state was found; false otherwise. + internal bool TryTakeBytes(string key, [MaybeNullWhen(false)] out byte[]? data) + { + return TryTake(key, out data); + } + private bool TryTake(string key, out byte[]? value) { ArgumentNullException.ThrowIfNull(key); @@ -138,4 +239,17 @@ private bool TryTake(string key, out byte[]? value) return false; } } + + internal void UpdateExistingState(IDictionary state, RestoreContext context) + { + ArgumentNullException.ThrowIfNull(state); + + if (_existingState == null || _existingState.Count > 0) + { + throw new InvalidOperationException("Cannot update existing state: previous state has not been cleared or state is not initialized."); + } + + _existingState = state; + CurrentContext = context; + } } diff --git a/src/Components/Components/src/Infrastructure/ComponentStatePersistenceManager.cs b/src/Components/Components/src/PersistentState/ComponentStatePersistenceManager.cs similarity index 53% rename from src/Components/Components/src/Infrastructure/ComponentStatePersistenceManager.cs rename to src/Components/Components/src/PersistentState/ComponentStatePersistenceManager.cs index e1b4fdf605ec..e0f82daf4b57 100644 --- a/src/Components/Components/src/Infrastructure/ComponentStatePersistenceManager.cs +++ b/src/Components/Components/src/PersistentState/ComponentStatePersistenceManager.cs @@ -12,20 +12,40 @@ namespace Microsoft.AspNetCore.Components.Infrastructure; public class ComponentStatePersistenceManager { private readonly List _registeredCallbacks = new(); + private readonly List _registeredRestoringCallbacks = new(); private readonly ILogger _logger; private bool _stateIsPersisted; + private bool _stateIsInitialized; + private readonly PersistentServicesRegistry? _servicesRegistry; private readonly Dictionary _currentState = new(StringComparer.Ordinal); /// /// Initializes a new instance of . /// + /// public ComponentStatePersistenceManager(ILogger logger) { - State = new PersistentComponentState(_currentState, _registeredCallbacks); + State = new PersistentComponentState(_currentState, _registeredCallbacks, _registeredRestoringCallbacks); _logger = logger; } + /// + /// Initializes a new instance of . + /// + /// + /// + public ComponentStatePersistenceManager(ILogger logger, IServiceProvider serviceProvider) : this(logger) + { + _servicesRegistry = new PersistentServicesRegistry(serviceProvider); + } + + // For testing purposes only + internal PersistentServicesRegistry? ServicesRegistry => _servicesRegistry; + + // For testing purposes only + internal List RegisteredCallbacks => _registeredCallbacks; + /// /// Gets the associated with the . /// @@ -37,9 +57,38 @@ public ComponentStatePersistenceManager(ILoggerThe to restore the application state from. /// A that will complete when the state has been restored. public async Task RestoreStateAsync(IPersistentComponentStateStore store) + { + await RestoreStateAsync(store, RestoreContext.InitialValue); + } + + /// + /// Restores the application state. + /// + /// The to restore the application state from. + /// The that provides additional context for the restoration. + /// A that will complete when the state has been restored. + public async Task RestoreStateAsync(IPersistentComponentStateStore store, RestoreContext context) { var data = await store.GetPersistedStateAsync(); - State.InitializeExistingState(data); + + if (_stateIsInitialized) + { + if (context != RestoreContext.ValueUpdate) + { + throw new InvalidOperationException("State already initialized."); + } + State.UpdateExistingState(data, context); + foreach (var registration in _registeredRestoringCallbacks) + { + registration.Callback(); + } + } + else + { + State.InitializeExistingState(data, context); + _servicesRegistry?.RegisterForPersistence(State); + _stateIsInitialized = true; + } } /// @@ -72,29 +121,64 @@ async Task PauseAndPersistState() // the next store can start with a clean slate. foreach (var store in compositeStore) { - await PersistState(store); + var result = await TryPersistState(store); + if (!result) + { + break; + } _currentState.Clear(); } } else { - await PersistState(store); + await TryPersistState(store); } State.PersistingState = false; _stateIsPersisted = true; } - async Task PersistState(IPersistentComponentStateStore store) + async Task TryPersistState(IPersistentComponentStateStore store) { - await PauseAsync(store); + if (!await TryPauseAsync(store)) + { + _currentState.Clear(); + return false; + } + await store.PersistStateAsync(_currentState); + return true; } } + /// + /// Initializes the render mode for state persisted by the platform. + /// + /// The render mode to use for state persisted by the platform. + /// when the render mode is already set. + public void SetPlatformRenderMode(IComponentRenderMode renderMode) + { + if (_servicesRegistry == null) + { + return; + } + else if (_servicesRegistry?.RenderMode != null) + { + throw new InvalidOperationException("Render mode already set."); + } + + _servicesRegistry!.RenderMode = renderMode; + } + private void InferRenderModes(Renderer renderer) { - for (var i = 0; i < _registeredCallbacks.Count; i++) + // We are iterating backwards to allow the callbacks to remove themselves from the list. + // Otherwise, we would have to make a copy of the list to avoid running into situations + // where we don't run all the callbacks because the count of the list changed while we + // were iterating over it. + // It is not allowed to register a callback while we are persisting the state, so we don't + // need to worry about new callbacks being added to the list. + for (var i = _registeredCallbacks.Count - 1; i >= 0; i--) { var registration = _registeredCallbacks[i]; if (registration.RenderMode != null) @@ -125,11 +209,17 @@ private void InferRenderModes(Renderer renderer) } } - internal Task PauseAsync(IPersistentComponentStateStore store) + internal Task TryPauseAsync(IPersistentComponentStateStore store) { - List? pendingCallbackTasks = null; + List>? pendingCallbackTasks = null; - for (var i = 0; i < _registeredCallbacks.Count; i++) + // We are iterating backwards to allow the callbacks to remove themselves from the list. + // Otherwise, we would have to make a copy of the list to avoid running into situations + // where we don't run all the callbacks because the count of the list changed while we + // were iterating over it. + // It is not allowed to register a callback while we are persisting the state, so we don't + // need to worry about new callbacks being added to the list. + for (var i = _registeredCallbacks.Count - 1; i >= 0; i--) { var registration = _registeredCallbacks[i]; @@ -142,31 +232,38 @@ internal Task PauseAsync(IPersistentComponentStateStore store) continue; } - var result = ExecuteCallback(registration.Callback, _logger); + var result = TryExecuteCallback(registration.Callback, _logger); if (!result.IsCompletedSuccessfully) { - pendingCallbackTasks ??= new(); + pendingCallbackTasks ??= []; pendingCallbackTasks.Add(result); } + else + { + if (!result.Result) + { + return Task.FromResult(false); + } + } } if (pendingCallbackTasks != null) { - return Task.WhenAll(pendingCallbackTasks); + return AnyTaskFailed(pendingCallbackTasks); } else { - return Task.CompletedTask; + return Task.FromResult(true); } - static Task ExecuteCallback(Func callback, ILogger logger) + static Task TryExecuteCallback(Func callback, ILogger logger) { try { var current = callback(); if (current.IsCompletedSuccessfully) { - return current; + return Task.FromResult(true); } else { @@ -176,21 +273,36 @@ static Task ExecuteCallback(Func callback, ILogger logger) + static async Task Awaited(Task task, ILogger logger) { try { await task; + return true; } catch (Exception ex) { logger.LogError(new EventId(1000, "PersistenceCallbackError"), ex, "There was an error executing a callback while pausing the application."); - return; + return false; + } + } + } + + static async Task AnyTaskFailed(List> pendingCallbackTasks) + { + foreach (var result in await Task.WhenAll(pendingCallbackTasks)) + { + if (!result) + { + return false; } } + + return true; } } + } diff --git a/src/Components/Components/src/PersistentState/IPersistentServiceRegistration.cs b/src/Components/Components/src/PersistentState/IPersistentServiceRegistration.cs new file mode 100644 index 000000000000..47f10fee8abc --- /dev/null +++ b/src/Components/Components/src/PersistentState/IPersistentServiceRegistration.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +// Represents a component that is registered for state persistence. +internal interface IPersistentServiceRegistration +{ + public string Assembly { get; } + public string FullTypeName { get; } + + public IComponentRenderMode? GetRenderModeOrDefault(); + + public Type? GetResolvedTypeOrNull() => null; +} diff --git a/src/Components/Components/src/PersistComponentStateRegistration.cs b/src/Components/Components/src/PersistentState/PersistComponentStateRegistration.cs similarity index 100% rename from src/Components/Components/src/PersistComponentStateRegistration.cs rename to src/Components/Components/src/PersistentState/PersistComponentStateRegistration.cs diff --git a/src/Components/Components/src/PersistentState/PersistentComponentStateSerializer.cs b/src/Components/Components/src/PersistentState/PersistentComponentStateSerializer.cs new file mode 100644 index 000000000000..c3705bdc4197 --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentComponentStateSerializer.cs @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; + +namespace Microsoft.AspNetCore.Components; + +/// +/// Provides custom serialization logic for persistent component state values of type . +/// +/// The type of the value to serialize. +public abstract class PersistentComponentStateSerializer : IPersistentComponentStateSerializer +{ + /// + /// Serializes the provided and writes it to the . + /// + /// The value to serialize. + /// The buffer writer to write the serialized data to. + public abstract void Persist(T value, IBufferWriter writer); + + /// + /// Deserializes a value of type from the provided . + /// This method must be synchronous to avoid UI tearing during component state restoration. + /// + /// The serialized data to deserialize. + /// The deserialized value. + public abstract T Restore(ReadOnlySequence data); + + /// + /// Explicit interface implementation for non-generic serialization. + /// + void IPersistentComponentStateSerializer.Persist(Type type, object value, IBufferWriter writer) + => Persist((T)value, writer); + + /// + /// Explicit interface implementation for non-generic deserialization. + /// + object IPersistentComponentStateSerializer.Restore(Type type, ReadOnlySequence data) + => Restore(data)!; +} \ No newline at end of file diff --git a/src/Components/Components/src/PersistentState/PersistentServiceRegistration.cs b/src/Components/Components/src/PersistentState/PersistentServiceRegistration.cs new file mode 100644 index 000000000000..060a35df76d7 --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentServiceRegistration.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; + +namespace Microsoft.AspNetCore.Components; + +[DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")] +internal sealed class PersistentServiceRegistration(IComponentRenderMode componentRenderMode) : IPersistentServiceRegistration +{ + public string Assembly => typeof(TService).Assembly.GetName().Name!; + public string FullTypeName => typeof(TService).FullName!; + + public IComponentRenderMode? GetRenderModeOrDefault() => componentRenderMode; + + public Type? GetResolvedTypeOrNull() => typeof(TService); + + private string GetDebuggerDisplay() => $"{Assembly}::{FullTypeName}"; +} diff --git a/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs b/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs new file mode 100644 index 000000000000..e27e5c2560b0 --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentServicesRegistry.cs @@ -0,0 +1,254 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Reflection; +using System.Security.Cryptography; +using System.Text; +using Microsoft.AspNetCore.Components.HotReload; +using Microsoft.AspNetCore.Components.Reflection; +using Microsoft.AspNetCore.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +internal sealed class PersistentServicesRegistry +{ + private static readonly string _registryKey = typeof(PersistentServicesRegistry).FullName!; + private static readonly RootTypeCache _persistentServiceTypeCache = new(); + + private readonly IServiceProvider _serviceProvider; + private IPersistentServiceRegistration[] _registrations; + private List<(PersistingComponentStateSubscription, RestoringComponentStateSubscription)> _subscriptions = []; + private static readonly ConcurrentDictionary _cachedAccessorsByType = new(); + + static PersistentServicesRegistry() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _cachedAccessorsByType.Clear; + } + } + + public PersistentServicesRegistry(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + _registrations = ResolveRegistrations(serviceProvider.GetService()?.Registrations ?? []); + } + + internal IComponentRenderMode? RenderMode { get; set; } + + internal IReadOnlyList Registrations => _registrations; + + [UnconditionalSuppressMessage( + "Trimming", + "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", + Justification = "Types registered for persistence are preserved in the API call to register them and typically live in assemblies that aren't trimmed.")] + internal void RegisterForPersistence(PersistentComponentState state) + { + if (_subscriptions.Count != 0) + { + return; + } + + UpdateRegistrations(state); + var subscriptions = new List<(PersistingComponentStateSubscription, RestoringComponentStateSubscription)>( + _registrations.Length + 1); + for (var i = 0; i < _registrations.Length; i++) + { + var registration = _registrations[i]; + var type = ResolveType(registration); + if (type == null) + { + continue; + } + + var renderMode = registration.GetRenderModeOrDefault(); + + var instance = _serviceProvider.GetRequiredService(type); + subscriptions.Add(( + state.RegisterOnPersisting(() => + { + PersistInstanceState(instance, type, state); + return Task.CompletedTask; + }, renderMode), + // In order to avoid registering one callback per property, we register a single callback with the most + // permissive options and perform the filtering inside of it. + state.RegisterOnRestoring(() => + { + RestoreInstanceState(instance, type, state); + }, new RestoreOptions { AllowUpdates = true }))); + } + + if (RenderMode != null) + { + subscriptions.Add(( + state.RegisterOnPersisting(() => + { + state.PersistAsJson(_registryKey, _registrations); + return Task.CompletedTask; + }, RenderMode), + default)); + } + + _subscriptions = subscriptions; + } + + [RequiresUnreferencedCode("Calls Microsoft.AspNetCore.Components.PersistentComponentState.PersistAsJson(String, Object, Type)")] + private static void PersistInstanceState(object instance, Type type, PersistentComponentState state) + { + var accessors = _cachedAccessorsByType.GetOrAdd(instance.GetType(), static (runtimeType, declaredType) => new PropertiesAccessor(runtimeType, declaredType), type); + foreach (var (key, propertyType) in accessors.KeyTypePairs) + { + var (setter, getter, options) = accessors.GetAccessor(key); + var value = getter.GetValue(instance); + if (value != null) + { + state.PersistAsJson(key, value, propertyType); + } + } + } + + [UnconditionalSuppressMessage("Trimming", + "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", + Justification = "Types registered for persistence are preserved in the API call to register them and typically live in assemblies that aren't trimmed.")] + [DynamicDependency(LinkerFlags.JsonSerialized, typeof(PersistentServiceRegistration))] + private void UpdateRegistrations(PersistentComponentState state) + { + if (state.TryTakeFromJson(_registryKey, out var registry) && registry != null) + { + _registrations = ResolveRegistrations(_registrations.Concat(registry)); + } + } + + [RequiresUnreferencedCode("Calls Microsoft.AspNetCore.Components.PersistentComponentState.TryTakeFromJson(String, Type, out Object)")] + private static void RestoreInstanceState(object instance, Type type, PersistentComponentState state) + { + var accessors = _cachedAccessorsByType.GetOrAdd(instance.GetType(), static (runtimeType, declaredType) => new PropertiesAccessor(runtimeType, declaredType), type); + foreach (var (key, propertyType) in accessors.KeyTypePairs) + { + var (setter, getter, options) = accessors.GetAccessor(key); + if (!state.CurrentContext.ShouldRestore(options)) + { + continue; + } + if (state.TryTakeFromJson(key, propertyType, out var result)) + { + setter.SetValue(instance, result!); + } + } + } + + internal static IPersistentServiceRegistration[] ResolveRegistrations(IEnumerable registrations) => [.. registrations.DistinctBy(r => (r.Assembly, r.FullTypeName)).OrderBy(r => r.Assembly).ThenBy(r => r.FullTypeName)]; + + private static Type? ResolveType(IPersistentServiceRegistration registration) + { + if (registration.GetResolvedTypeOrNull() is Type type) + { + return type; + } + var assembly = registration.Assembly; + var fullTypeName = registration.FullTypeName; + return _persistentServiceTypeCache.GetRootType(assembly, fullTypeName); + } + + private sealed class PropertiesAccessor + { + internal const BindingFlags BindablePropertyFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase; + + private readonly Dictionary _underlyingAccessors; + private readonly (string, Type)[] _cachedKeysForService; + + public PropertiesAccessor([DynamicallyAccessedMembers(LinkerFlags.Component)] Type targetType, Type keyType) + { + _underlyingAccessors = new Dictionary(StringComparer.OrdinalIgnoreCase); + + var keys = new List<(string, Type)>(); + foreach (var propertyInfo in GetCandidateBindableProperties(targetType)) + { + PersistentStateAttribute? parameterAttribute = null; + foreach (var attribute in propertyInfo.GetCustomAttributes()) + { + if (attribute is PersistentStateAttribute persistentStateAttribute) + { + parameterAttribute = persistentStateAttribute; + break; + } + } + if (parameterAttribute == null) + { + continue; + } + + var propertyName = propertyInfo.Name; + var key = ComputeKey(keyType, propertyName); + keys.Add(new(key, propertyInfo.PropertyType)); + if (propertyInfo.SetMethod == null || !propertyInfo.SetMethod.IsPublic) + { + throw new InvalidOperationException( + $"The type '{targetType.FullName}' declares a property matching the name '{propertyName}' that is not public. Persistent service properties must be public."); + } + + if (propertyInfo.GetMethod == null || !propertyInfo.GetMethod.IsPublic) + { + throw new InvalidOperationException( + $"The type '{targetType.FullName}' declares a property matching the name '{propertyName}' that is not public. Persistent service properties must be public."); + } + + var restoreOptions = new RestoreOptions + { + RestoreBehavior = parameterAttribute.RestoreBehavior, + AllowUpdates = parameterAttribute.AllowUpdates, + }; + + var propertySetter = new PropertySetter(targetType, propertyInfo); + var propertyGetter = new PropertyGetter(targetType, propertyInfo); + + _underlyingAccessors.Add(key, (propertySetter, propertyGetter, restoreOptions)); + } + + _cachedKeysForService = [.. keys]; + } + + public (string, Type)[] KeyTypePairs => _cachedKeysForService; + + private static string ComputeKey(Type keyType, string propertyName) + { + // This happens once per type and property combo, so allocations are ok. + var assemblyName = keyType.Assembly.FullName; + var typeName = keyType.FullName; + + // Internal classes can be bundled in different assemblies during prerendering and WASM rendering. + bool isTypeInternal = (!keyType.IsPublic && !keyType.IsNested) || keyType.IsNestedAssembly; + var inputString = isTypeInternal + ? string.Join(".", typeName, propertyName) + : string.Join(".", assemblyName, typeName, propertyName); + + var input = Encoding.UTF8.GetBytes(inputString); + var hash = SHA256.HashData(input); + return Convert.ToBase64String(hash); + } + + internal static IEnumerable GetCandidateBindableProperties( + [DynamicallyAccessedMembers(LinkerFlags.Component)] Type targetType) + => MemberAssignment.GetPropertiesIncludingInherited(targetType, BindablePropertyFlags); + + internal (PropertySetter setter, PropertyGetter getter, RestoreOptions options) GetAccessor(string key) => + _underlyingAccessors.TryGetValue(key, out var result) ? result : default; + } + + [DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")] + private class PersistentServiceRegistration : IPersistentServiceRegistration + { + public string Assembly { get; set; } = ""; + + public string FullTypeName { get; set; } = ""; + + public IComponentRenderMode? GetRenderModeOrDefault() => null; + + private string GetDebuggerDisplay() => $"{Assembly}::{FullTypeName}"; + } +} diff --git a/src/Components/Components/src/PersistentState/PersistentStateProviderServiceCollectionExtensions.cs b/src/Components/Components/src/PersistentState/PersistentStateProviderServiceCollectionExtensions.cs new file mode 100644 index 000000000000..f806a7597a30 --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentStateProviderServiceCollectionExtensions.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +/// +/// Enables component parameters to be supplied from with . +/// +public static class PersistentStateProviderServiceCollectionExtensions +{ + /// + /// Enables component parameters to be supplied from with . + /// + /// The . + /// The . + public static IServiceCollection AddSupplyValueFromPersistentComponentStateProvider(this IServiceCollection services) + { + services.TryAddEnumerable(ServiceDescriptor.Scoped()); + return services; + } +} diff --git a/src/Components/Components/src/PersistentState/PersistentStateValueProvider.cs b/src/Components/Components/src/PersistentState/PersistentStateValueProvider.cs new file mode 100644 index 000000000000..53158b44e0db --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentStateValueProvider.cs @@ -0,0 +1,63 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.Extensions.Logging; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +internal sealed partial class PersistentStateValueProvider(PersistentComponentState state, ILogger logger, IServiceProvider serviceProvider) : ICascadingValueSupplier +{ + private readonly Dictionary _subscriptions = []; + + public bool IsFixed => false; + // For testing purposes only + internal Dictionary Subscriptions => _subscriptions; + + public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) + => parameterInfo.Attribute is PersistentStateAttribute; + + [UnconditionalSuppressMessage( + "ReflectionAnalysis", + "IL2026:RequiresUnreferencedCode message", + Justification = "JSON serialization and deserialization might require types that cannot be statically analyzed.")] + [UnconditionalSuppressMessage( + "Trimming", + "IL2072:Target parameter argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.", + Justification = "JSON serialization and deserialization might require types that cannot be statically analyzed.")] + public object? GetCurrentValue(object? key, in CascadingParameterInfo parameterInfo) + { + var componentState = (ComponentState)key!; + + if (_subscriptions.TryGetValue(new(componentState, parameterInfo.PropertyName), out var subscription)) + { + return subscription.GetOrComputeLastValue(); + } + + return null; + } + + public void Subscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo) + { + var propertyName = parameterInfo.PropertyName; + + var componentSubscription = new PersistentValueProviderComponentSubscription( + state, + subscriber, + parameterInfo, + serviceProvider, + logger); + + _subscriptions.Add(new ComponentSubscriptionKey(subscriber, propertyName), componentSubscription); + } + + public void Unsubscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo) + { + if (_subscriptions.TryGetValue(new(subscriber, parameterInfo.PropertyName), out var subscription)) + { + subscription.Dispose(); + _subscriptions.Remove(new(subscriber, parameterInfo.PropertyName)); + } + } +} diff --git a/src/Components/Components/src/PersistentState/PersistentStateValueProviderKeyResolver.cs b/src/Components/Components/src/PersistentState/PersistentStateValueProviderKeyResolver.cs new file mode 100644 index 000000000000..8de18363342c --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentStateValueProviderKeyResolver.cs @@ -0,0 +1,214 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; +using System.Collections.Concurrent; +using System.Diagnostics; +using System.Globalization; +using System.Security.Cryptography; +using System.Text; +using Microsoft.AspNetCore.Components.HotReload; +using Microsoft.AspNetCore.Components.Rendering; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +internal static class PersistentStateValueProviderKeyResolver +{ + private static readonly ConcurrentDictionary<(string, string, string), byte[]> _keyCache = new(); + + static PersistentStateValueProviderKeyResolver() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCaches; + } + } + + private static void ClearCaches() + { + _keyCache.Clear(); + } + + // Internal for testing only + internal static string ComputeKey(ComponentState componentState, string propertyName) + { + // We need to come up with a pseudo-unique key for the storage key. + // We need to consider the property name, the component type, and its position within the component tree. + // If only one component of a given type is present on the page, then only the component type + property name is enough. + // If multiple components of the same type are present on the page, then we need to consider the position within the tree. + // To do that, we are going to use the `@key` directive on the component if present and if we deem it serializable. + // Serializable keys are Guid, DateOnly, TimeOnly, and any primitive type. + // The key is composed of four segments: + // Parent component type + // Component type + // Property name + // @key directive if present and serializable. + // We combine the first three parts into an identifier, and then we generate a derived identifier with the key + // We do it this way because the information for the first three pieces of data is static for the lifetime of the + // program and can be cached on each situation. + + var parentComponentType = GetParentComponentType(componentState); + var componentType = GetComponentType(componentState); + + var preKey = _keyCache.GetOrAdd((parentComponentType, componentType, propertyName), KeyFactory); + var finalKey = ComputeFinalKey(preKey, componentState); + + return finalKey; + } + + private static string ComputeFinalKey(byte[] preKey, ComponentState componentState) + { + Span keyHash = stackalloc byte[SHA256.HashSizeInBytes]; + + var key = GetSerializableKey(componentState); + byte[]? pool = null; + try + { + Span keyBuffer = stackalloc byte[1024]; + var currentBuffer = keyBuffer; + preKey.CopyTo(keyBuffer); + if (key is IUtf8SpanFormattable spanFormattable) + { + var wroteKey = false; + while (!wroteKey) + { + currentBuffer = keyBuffer[preKey.Length..]; + wroteKey = spanFormattable.TryFormat(currentBuffer, out var written, "", CultureInfo.InvariantCulture); + if (!wroteKey) + { + // It is really unlikely that we will enter here, but we need to handle this case + Debug.Assert(written == 0); + GrowBuffer(ref pool, ref keyBuffer); + } + else + { + currentBuffer = currentBuffer[..written]; + } + } + } + else + { + var keySpan = ResolveKeySpan(key); + var wroteKey = false; + while (!wroteKey) + { + currentBuffer = keyBuffer[preKey.Length..]; + wroteKey = Encoding.UTF8.TryGetBytes(keySpan, currentBuffer, out var written); + if (!wroteKey) + { + // It is really unlikely that we will enter here, but we need to handle this case + Debug.Assert(written == 0); + // Since this is utf-8, grab a buffer the size of the key * 4 + the preKey size + // this guarantees we have enough space to encode the key + GrowBuffer(ref pool, ref keyBuffer, keySpan.Length * 4 + preKey.Length); + } + else + { + currentBuffer = currentBuffer[..written]; + } + } + } + + keyBuffer = keyBuffer[..(preKey.Length + currentBuffer.Length)]; + + var hashSucceeded = SHA256.TryHashData(keyBuffer, keyHash, out _); + Debug.Assert(hashSucceeded); + return Convert.ToBase64String(keyHash); + } + finally + { + if (pool != null) + { + ArrayPool.Shared.Return(pool, clearArray: true); + } + } + } + + private static ReadOnlySpan ResolveKeySpan(object? key) + { + if (key is IFormattable formattable) + { + var keyString = formattable.ToString("", CultureInfo.InvariantCulture); + return keyString.AsSpan(); + } + else if (key is IConvertible convertible) + { + var keyString = convertible.ToString(CultureInfo.InvariantCulture); + return keyString.AsSpan(); + } + return default; + } + + private static void GrowBuffer(ref byte[]? pool, ref Span keyBuffer, int? size = null) + { + var newPool = pool == null ? ArrayPool.Shared.Rent(size ?? 2048) : ArrayPool.Shared.Rent(pool.Length * 2); + keyBuffer.CopyTo(newPool); + keyBuffer = newPool; + if (pool != null) + { + ArrayPool.Shared.Return(pool, clearArray: true); + } + pool = newPool; + } + + private static object? GetSerializableKey(ComponentState componentState) + { + var componentKey = componentState.GetComponentKey(); + if (componentKey != null && IsSerializableKey(componentKey)) + { + return componentKey; + } + + return null; + } + + private static string GetComponentType(ComponentState componentState) => componentState.Component.GetType().FullName!; + + private static string GetParentComponentType(ComponentState componentState) + { + if (componentState.ParentComponentState == null) + { + return ""; + } + if (componentState.ParentComponentState.Component == null) + { + return ""; + } + + if (componentState.ParentComponentState.ParentComponentState != null) + { + var renderer = componentState.Renderer; + var parentRenderMode = renderer.GetComponentRenderMode(componentState.ParentComponentState.Component); + var grandParentRenderMode = renderer.GetComponentRenderMode(componentState.ParentComponentState.ParentComponentState.Component); + if (parentRenderMode != grandParentRenderMode) + { + // This is the case when EndpointHtmlRenderer introduces an SSRRenderBoundary component. + // We want to return "" because the SSRRenderBoundary component is not a real component + // and won't appear on the component tree in the WebAssemblyRenderer and RemoteRenderer + // interactive scenarios. + return ""; + } + } + + return GetComponentType(componentState.ParentComponentState); + } + + private static byte[] KeyFactory((string parentComponentType, string componentType, string propertyName) parts) => + SHA256.HashData(Encoding.UTF8.GetBytes(string.Join(".", parts.parentComponentType, parts.componentType, parts.propertyName))); + + private static bool IsSerializableKey(object key) + { + if (key == null) + { + return false; + } + var keyType = key.GetType(); + var result = Type.GetTypeCode(keyType) != TypeCode.Object + || keyType == typeof(Guid) + || keyType == typeof(DateTimeOffset) + || keyType == typeof(DateOnly) + || keyType == typeof(TimeOnly); + + return result; + } +} diff --git a/src/Components/Components/src/PersistentState/PersistentValueProviderComponentSubscription.cs b/src/Components/Components/src/PersistentState/PersistentValueProviderComponentSubscription.cs new file mode 100644 index 000000000000..35ad18735816 --- /dev/null +++ b/src/Components/Components/src/PersistentState/PersistentValueProviderComponentSubscription.cs @@ -0,0 +1,264 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; +using System.Collections.Concurrent; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using Microsoft.AspNetCore.Components.HotReload; +using Microsoft.AspNetCore.Components.Reflection; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Internal; +using Microsoft.Extensions.Logging; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +internal partial class PersistentValueProviderComponentSubscription : IDisposable +{ + private static readonly ConcurrentDictionary<(Type, string), PropertyGetter> _propertyGetterCache = new(); + private static readonly ConcurrentDictionary _serializerCache = new(); + private static readonly object _uninitializedSentinel = new(); + + static PersistentValueProviderComponentSubscription() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCaches; + } + } + + private static void ClearCaches() + { + _propertyGetterCache.Clear(); + _serializerCache.Clear(); + } + + private readonly PersistentComponentState _state; + private readonly ComponentState _subscriber; + private readonly string _propertyName; + private readonly Type _propertyType; + private readonly PropertyGetter _propertyGetter; + private readonly IPersistentComponentStateSerializer? _customSerializer; + private readonly ILogger _logger; + + private readonly PersistingComponentStateSubscription? _persistingSubscription; + private readonly RestoringComponentStateSubscription? _restoringSubscription; + private object? _lastValue = _uninitializedSentinel; + private bool _hasPendingInitialValue; + private bool _ignoreComponentPropertyValue; + private string? _storageKey; + + public PersistentValueProviderComponentSubscription( + PersistentComponentState state, + ComponentState subscriber, + CascadingParameterInfo parameterInfo, + IServiceProvider serviceProvider, + ILogger logger) + { + _state = state; + _subscriber = subscriber; + _propertyName = parameterInfo.PropertyName; + _propertyType = parameterInfo.PropertyType; + _logger = logger; + var attribute = (PersistentStateAttribute)parameterInfo.Attribute; + + _customSerializer = _serializerCache.GetOrAdd(_propertyType, SerializerFactory, serviceProvider); + _propertyGetter = _propertyGetterCache.GetOrAdd((subscriber.Component.GetType(), _propertyName), PropertyGetterFactory); + + _persistingSubscription = state.RegisterOnPersisting( + PersistProperty, + subscriber.Renderer.GetComponentRenderMode(subscriber.Component)); + + _restoringSubscription = state.RegisterOnRestoring( + RestoreProperty, + new RestoreOptions { RestoreBehavior = attribute.RestoreBehavior, AllowUpdates = attribute.AllowUpdates }); + } + + // GetOrComputeLastValue is a bit of a special provider. + // Right after a Restore operation it will capture the last value and return that, but it must support the user + // overriding the property at a later point, so to support that, we need to keep track of whether or not we have + // delivered the last value, and if so, instead of returning the _lastValue, we simply read the property and return + // that instead. That way, if the component updates the property in SetParametersAsync, we won't revert it to the + // value we restored from the persistent state. + internal object? GetOrComputeLastValue() + { + var isInitialized = !ReferenceEquals(_lastValue, _uninitializedSentinel); + if (!isInitialized) + { + // Remove the uninitialized sentinel. + _lastValue = null; + if (_hasPendingInitialValue) + { + RestoreProperty(); + _hasPendingInitialValue = false; + } + } + else + { + if (_ignoreComponentPropertyValue) + { + // At this point, we just received a value update from `RestoreProperty`. + // The property value might have been modified by the component and in this + // case we want to overwrite it with the value we just restored. + _ignoreComponentPropertyValue = false; + return _lastValue; + } + else + { + // In this case, the component might have modified the property value after + // we restored it from the persistent state. We don't want to overwrite it + // with a previously restored value. + var currentPropertyValue = _propertyGetter.GetValue(_subscriber.Component); + return currentPropertyValue; + } + } + + return _lastValue; + } + + [UnconditionalSuppressMessage("Trimming", "IL2075:'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2072:Target parameter argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2077:'type' argument does not satisfy 'DynamicallyAccessedMemberTypes' in call to target method. The source field does not have matching annotations.", Justification = "Property types on components are preserved through other means.")] + internal void RestoreProperty() + { + var skipNotifications = _hasPendingInitialValue; + if (ReferenceEquals(_lastValue, _uninitializedSentinel) && !_hasPendingInitialValue) + { + // Upon subscribing, the callback might be invoked right away, + // but this is too early to restore the first value since the component state + // hasn't been fully initialized yet. + // For that reason, we make a mark to restore the state on GetOrComputeLastValue. + _hasPendingInitialValue = true; + return; + } + + // The key needs to be computed here, do not move this outside of the lambda. + _storageKey ??= PersistentStateValueProviderKeyResolver.ComputeKey(_subscriber, _propertyName); + + if (_customSerializer != null) + { + if (_state.TryTakeBytes(_storageKey, out var data)) + { + Log.RestoringValueFromState(_logger, _storageKey, _propertyType.Name, _propertyName); + var sequence = new ReadOnlySequence(data!); + _lastValue = _customSerializer.Restore(_propertyType, sequence); + _ignoreComponentPropertyValue = true; + if (!skipNotifications) + { + _subscriber.NotifyCascadingValueChanged(ParameterViewLifetime.Unbound); + } + } + else + { + Log.ValueNotFoundInPersistentState(_logger, _storageKey, _propertyType.Name, "null", _propertyName); + } + } + else + { + if (_state.TryTakeFromJson(_storageKey, _propertyType, out var value)) + { + Log.RestoredValueFromPersistentState(_logger, _storageKey, _propertyType.Name, "null", _propertyName); + _lastValue = value; + _ignoreComponentPropertyValue = true; + if (!skipNotifications) + { + _subscriber.NotifyCascadingValueChanged(ParameterViewLifetime.Unbound); + } + } + else + { + Log.NoValueToRestoreFromState(_logger, _storageKey, _propertyType.Name, _propertyName); + } + } + } + + [UnconditionalSuppressMessage("Trimming", "IL2075:'this' argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2072:Target parameter argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The return value of the source method does not have matching annotations.", Justification = "OpenComponent already has the right set of attributes")] + [UnconditionalSuppressMessage("Trimming", "IL2077:'type' argument does not satisfy 'DynamicallyAccessedMemberTypes' in call to target method. The source field does not have matching annotations.", Justification = "Property types on components are preserved through other means.")] + private Task PersistProperty() + { + // The key needs to be computed here, do not move this outside of the lambda. + _storageKey ??= PersistentStateValueProviderKeyResolver.ComputeKey(_subscriber, _propertyName); + + var property = _propertyGetter.GetValue(_subscriber.Component); + if (property == null) + { + Log.SkippedPersistingNullValue(_logger, _storageKey, _propertyType.Name, _subscriber.Component.GetType().Name, _propertyName); + return Task.CompletedTask; + } + + if (_customSerializer != null) + { + Log.PersistingValueToState(_logger, _storageKey, _propertyType.Name, _subscriber.Component.GetType().Name, _propertyName); + + using var writer = new PooledArrayBufferWriter(); + _customSerializer.Persist(_propertyType, property, writer); + _state.PersistAsBytes(_storageKey, writer.WrittenMemory.ToArray()); + return Task.CompletedTask; + } + + // Fallback to JSON serialization + Log.PersistingValueToState(_logger, _storageKey, _propertyType.Name, _subscriber.Component.GetType().Name, _propertyName); + _state.PersistAsJson(_storageKey, property, _propertyType); + return Task.CompletedTask; + } + + public void Dispose() + { + _persistingSubscription?.Dispose(); + _restoringSubscription?.Dispose(); + } + + private IPersistentComponentStateSerializer? SerializerFactory(Type type, IServiceProvider serviceProvider) + { + var serializerType = typeof(PersistentComponentStateSerializer<>).MakeGenericType(type); + var serializer = serviceProvider.GetService(serializerType); + + // The generic class now inherits from the internal interface, so we can cast directly + return serializer as IPersistentComponentStateSerializer; + } + + [UnconditionalSuppressMessage( + "Trimming", + "IL2077:Target parameter argument does not satisfy 'DynamicallyAccessedMembersAttribute' in call to target method. The source field does not have matching annotations.", + Justification = "Properties of rendered components are preserved through other means and won't get trimmed.")] + + private static PropertyGetter PropertyGetterFactory((Type type, string propertyName) key) + { + var (type, propertyName) = key; + var propertyInfo = GetPropertyInfo(type, propertyName); + if (propertyInfo == null || propertyInfo.GetMethod == null || !propertyInfo.GetMethod.IsPublic) + { + throw new InvalidOperationException( + $"A public property '{propertyName}' on component type '{type.FullName}' with a public getter wasn't found."); + } + + return new PropertyGetter(type, propertyInfo); + + static PropertyInfo? GetPropertyInfo([DynamicallyAccessedMembers(LinkerFlags.Component)] Type type, string propertyName) + => type.GetProperty(propertyName); + } + + private static partial class Log + { + [LoggerMessage(1, LogLevel.Debug, "Persisting value for storage key '{StorageKey}' of type '{PropertyType}' from component '{ComponentType}' for property '{PropertyName}'", EventName = "PersistingValueToState")] + public static partial void PersistingValueToState(ILogger logger, string storageKey, string propertyType, string componentType, string propertyName); + + [LoggerMessage(2, LogLevel.Debug, "Skipped persisting null value for storage key '{StorageKey}' of type '{PropertyType}' from component '{ComponentType}' for property '{PropertyName}'", EventName = "SkippedPersistingNullValue")] + public static partial void SkippedPersistingNullValue(ILogger logger, string storageKey, string propertyType, string componentType, string propertyName); + + [LoggerMessage(3, LogLevel.Debug, "Restoring value for storage key '{StorageKey}' of type '{PropertyType}' for property '{PropertyName}'", EventName = "RestoringValueFromState")] + public static partial void RestoringValueFromState(ILogger logger, string storageKey, string propertyType, string propertyName); + + [LoggerMessage(4, LogLevel.Debug, "No value to restore for storage key '{StorageKey}' of type '{PropertyType}' for property '{PropertyName}'", EventName = "NoValueToRestoreFromState")] + public static partial void NoValueToRestoreFromState(ILogger logger, string storageKey, string propertyType, string propertyName); + + [LoggerMessage(5, LogLevel.Debug, "Restored value from persistent state for storage key '{StorageKey}' of type '{PropertyType}' for component '{ComponentType}' for property '{PropertyName}'", EventName = "RestoredValueFromPersistentState")] + public static partial void RestoredValueFromPersistentState(ILogger logger, string storageKey, string propertyType, string componentType, string propertyName); + + [LoggerMessage(6, LogLevel.Debug, "Value not found in persistent state for storage key '{StorageKey}' of type '{PropertyType}' for component '{ComponentType}' for property '{PropertyName}'", EventName = "ValueNotFoundInPersistentState")] + public static partial void ValueNotFoundInPersistentState(ILogger logger, string storageKey, string propertyType, string componentType, string propertyName); + } +} diff --git a/src/Components/Components/src/PersistingComponentStateSubscription.cs b/src/Components/Components/src/PersistentState/PersistingComponentStateSubscription.cs similarity index 100% rename from src/Components/Components/src/PersistingComponentStateSubscription.cs rename to src/Components/Components/src/PersistentState/PersistingComponentStateSubscription.cs diff --git a/src/Components/Components/src/PersistentState/RegisteredPersistentServiceRegistrationCollection.cs b/src/Components/Components/src/PersistentState/RegisteredPersistentServiceRegistrationCollection.cs new file mode 100644 index 000000000000..3885086c65da --- /dev/null +++ b/src/Components/Components/src/PersistentState/RegisteredPersistentServiceRegistrationCollection.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +internal class RegisteredPersistentServiceRegistrationCollection(IEnumerable registrations) +{ + private readonly IEnumerable _registrations = + PersistentServicesRegistry.ResolveRegistrations(registrations); + + public IEnumerable Registrations => _registrations; +} diff --git a/src/Components/Components/src/PersistentState/RestoreBehavior.cs b/src/Components/Components/src/PersistentState/RestoreBehavior.cs new file mode 100644 index 000000000000..e958eed03c15 --- /dev/null +++ b/src/Components/Components/src/PersistentState/RestoreBehavior.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +/// +/// Indicates the behavior to use when restoring state for a component parameter. +/// +/// +/// By default, it always restores the value in all situations. +/// Use to skip restoring the initial value +/// when the host starts up. +/// Use to skip restoring the last value captured +/// the last time the current host was shut down, if the host supports restarting. +/// +[Flags] +public enum RestoreBehavior +{ + /// + /// Restore the value in all situations. + /// + Default = 0, + /// + /// Avoid restoring the initial value when the host starts up. + /// + SkipInitialValue = 1, + + /// + /// Avoid restoring the last value captured when the current host was shut down. + /// + SkipLastSnapshot = 2 +} diff --git a/src/Components/Components/src/PersistentState/RestoreComponentStateRegistration.cs b/src/Components/Components/src/PersistentState/RestoreComponentStateRegistration.cs new file mode 100644 index 000000000000..1d5b16f8fce4 --- /dev/null +++ b/src/Components/Components/src/PersistentState/RestoreComponentStateRegistration.cs @@ -0,0 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +internal readonly struct RestoreComponentStateRegistration(Action callback) +{ + public Action Callback { get; } = callback; +} diff --git a/src/Components/Components/src/PersistentState/RestoreContext.cs b/src/Components/Components/src/PersistentState/RestoreContext.cs new file mode 100644 index 000000000000..461792bff6f7 --- /dev/null +++ b/src/Components/Components/src/PersistentState/RestoreContext.cs @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +/// +/// The context where the restore operation is taking place. +/// +public sealed class RestoreContext +{ + private readonly bool _initialValue; + private readonly bool _lastSnapshot; + private readonly bool _allowUpdates; + + /// + /// Gets a that indicates the host is restoring initial values. + /// + public static RestoreContext InitialValue { get; } = new RestoreContext(true, false, false); + + /// + /// Gets a that indicates the host is restoring the last snapshot + /// available from the previous time the host was running. + /// + public static RestoreContext LastSnapshot { get; } = new RestoreContext(false, true, false); + + /// + /// Gets the that indicates the host is providing an external state + /// update to the current value. + /// + public static RestoreContext ValueUpdate { get; } = new RestoreContext(false, false, true); + + private RestoreContext(bool initialValue, bool lastSnapshot, bool allowUpdates) + { + _initialValue = initialValue; + _lastSnapshot = lastSnapshot; + _allowUpdates = allowUpdates; + } + + internal bool ShouldRestore(RestoreOptions options) + { + if (_initialValue && !options.RestoreBehavior.HasFlag(RestoreBehavior.SkipInitialValue)) + { + return true; + } + + if (_lastSnapshot && !options.RestoreBehavior.HasFlag(RestoreBehavior.SkipLastSnapshot)) + { + return true; + } + + if (_allowUpdates && options.AllowUpdates) + { + return true; + } + + return false; + } +} diff --git a/src/Components/Components/src/PersistentState/RestoreOptions.cs b/src/Components/Components/src/PersistentState/RestoreOptions.cs new file mode 100644 index 000000000000..4f2696f6546f --- /dev/null +++ b/src/Components/Components/src/PersistentState/RestoreOptions.cs @@ -0,0 +1,28 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +/// +/// Represents the options available for a restore operation. +/// +public readonly struct RestoreOptions +{ + /// + /// Initializes a new instance of the struct with default values. + /// + public RestoreOptions() + { + } + + /// + /// Gets the behavior to use when restoring data. + /// + public RestoreBehavior RestoreBehavior { get; init; } = RestoreBehavior.Default; + + /// + /// Gets a value indicating whether the registration wants to receive updates beyond + /// the initially provided value. + /// + public bool AllowUpdates { get; init; } = false; +} diff --git a/src/Components/Components/src/PersistentState/RestoringComponentStateSubscription.cs b/src/Components/Components/src/PersistentState/RestoringComponentStateSubscription.cs new file mode 100644 index 000000000000..48b2319ba7cf --- /dev/null +++ b/src/Components/Components/src/PersistentState/RestoringComponentStateSubscription.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +/// +/// Represents a subscription to component state restoration events. Dispose to unsubscribe. +/// +public readonly struct RestoringComponentStateSubscription : IDisposable +{ + private readonly List _registeredRestoringCallbacks; + private readonly RestoreComponentStateRegistration? _registration; + + internal RestoringComponentStateSubscription( + List registeredRestoringCallbacks, + RestoreComponentStateRegistration registration) + { + _registeredRestoringCallbacks = registeredRestoringCallbacks; + _registration = registration; + } + + /// + /// Unsubscribes from state restoration events. + /// + public void Dispose() + { + if (_registration.HasValue) + { + _registeredRestoringCallbacks?.Remove(_registration.Value); + } + } +} diff --git a/src/Components/Components/src/PersistentStateAttribute.cs b/src/Components/Components/src/PersistentStateAttribute.cs new file mode 100644 index 000000000000..cd8de101bda9 --- /dev/null +++ b/src/Components/Components/src/PersistentStateAttribute.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +/// +/// Indicates that the value for the parameter might come from persistent component state from a +/// previous render. +/// +[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] +public sealed class PersistentStateAttribute : CascadingParameterAttributeBase +{ + /// + /// Gets or sets the behavior to use when restoring data. + /// + /// + /// By default it always restores the value on all situations. + /// Use to skip restoring the initial value + /// when the host starts up. + /// Use to skip restoring the last value captured + /// the last time the current host was shut down. + /// + public RestoreBehavior RestoreBehavior { get; set; } = RestoreBehavior.Default; + + /// + /// Gets or sets a value whether the component wants to receive updates to the parameter + /// beyond the initial value provided during initialization. + /// + public bool AllowUpdates { get; set; } +} diff --git a/src/Components/Components/src/PublicAPI.Shipped.txt b/src/Components/Components/src/PublicAPI.Shipped.txt index 0aabe63f06c2..c417cab5be3a 100644 --- a/src/Components/Components/src/PublicAPI.Shipped.txt +++ b/src/Components/Components/src/PublicAPI.Shipped.txt @@ -72,10 +72,13 @@ Microsoft.AspNetCore.Components.ChangeEventArgs.Value.get -> object? Microsoft.AspNetCore.Components.ChangeEventArgs.Value.set -> void Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers Microsoft.AspNetCore.Components.ComponentBase +Microsoft.AspNetCore.Components.ComponentBase.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! +Microsoft.AspNetCore.Components.ComponentBase.AssignedRenderMode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode? Microsoft.AspNetCore.Components.ComponentBase.ComponentBase() -> void Microsoft.AspNetCore.Components.ComponentBase.DispatchExceptionAsync(System.Exception! exception) -> System.Threading.Tasks.Task! Microsoft.AspNetCore.Components.ComponentBase.InvokeAsync(System.Action! workItem) -> System.Threading.Tasks.Task! Microsoft.AspNetCore.Components.ComponentBase.InvokeAsync(System.Func! workItem) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Components.ComponentBase.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! Microsoft.AspNetCore.Components.ComponentBase.StateHasChanged() -> void Microsoft.AspNetCore.Components.Dispatcher Microsoft.AspNetCore.Components.Dispatcher.AssertAccess() -> void @@ -150,6 +153,8 @@ Microsoft.AspNetCore.Components.EventHandlerAttribute.EnableStopPropagation.get Microsoft.AspNetCore.Components.EventHandlerAttribute.EventArgsType.get -> System.Type! Microsoft.AspNetCore.Components.EventHandlerAttribute.EventHandlerAttribute(string! attributeName, System.Type! eventArgsType) -> void Microsoft.AspNetCore.Components.EventHandlerAttribute.EventHandlerAttribute(string! attributeName, System.Type! eventArgsType, bool enableStopPropagation, bool enablePreventDefault) -> void +Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute +Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute.ExcludeFromInteractiveRoutingAttribute() -> void Microsoft.AspNetCore.Components.IComponent Microsoft.AspNetCore.Components.IComponent.Attach(Microsoft.AspNetCore.Components.RenderHandle renderHandle) -> void Microsoft.AspNetCore.Components.IComponent.SetParametersAsync(Microsoft.AspNetCore.Components.ParameterView parameters) -> System.Threading.Tasks.Task! @@ -260,15 +265,22 @@ Microsoft.AspNetCore.Components.PersistentComponentState.TryTakeFromJson Microsoft.AspNetCore.Components.PersistingComponentStateSubscription Microsoft.AspNetCore.Components.PersistingComponentStateSubscription.Dispose() -> void Microsoft.AspNetCore.Components.PersistingComponentStateSubscription.PersistingComponentStateSubscription() -> void +Microsoft.AspNetCore.Components.RendererInfo +Microsoft.AspNetCore.Components.RendererInfo.IsInteractive.get -> bool +Microsoft.AspNetCore.Components.RendererInfo.Name.get -> string! +Microsoft.AspNetCore.Components.RendererInfo.RendererInfo(string! rendererName, bool isInteractive) -> void Microsoft.AspNetCore.Components.RenderFragment Microsoft.AspNetCore.Components.RenderFragment Microsoft.AspNetCore.Components.RenderHandle +Microsoft.AspNetCore.Components.RenderHandle.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! Microsoft.AspNetCore.Components.RenderHandle.Dispatcher.get -> Microsoft.AspNetCore.Components.Dispatcher! Microsoft.AspNetCore.Components.RenderHandle.DispatchExceptionAsync(System.Exception! exception) -> System.Threading.Tasks.Task! Microsoft.AspNetCore.Components.RenderHandle.IsInitialized.get -> bool Microsoft.AspNetCore.Components.RenderHandle.IsRenderingOnMetadataUpdate.get -> bool Microsoft.AspNetCore.Components.RenderHandle.Render(Microsoft.AspNetCore.Components.RenderFragment! renderFragment) -> void +Microsoft.AspNetCore.Components.RenderHandle.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! Microsoft.AspNetCore.Components.RenderHandle.RenderHandle() -> void +Microsoft.AspNetCore.Components.RenderHandle.RenderMode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode? Microsoft.AspNetCore.Components.Rendering.ComponentState Microsoft.AspNetCore.Components.Rendering.ComponentState.Component.get -> Microsoft.AspNetCore.Components.IComponent! Microsoft.AspNetCore.Components.Rendering.ComponentState.ComponentId.get -> int @@ -403,6 +415,18 @@ Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType.NamedEvent = 10 - Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType.None = 0 -> Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType.Region = 5 -> Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType.Text = 2 -> Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrameType +Microsoft.AspNetCore.Components.ResourceAsset +Microsoft.AspNetCore.Components.ResourceAsset.Properties.get -> System.Collections.Generic.IReadOnlyList? +Microsoft.AspNetCore.Components.ResourceAsset.ResourceAsset(string! url, System.Collections.Generic.IReadOnlyList? properties) -> void +Microsoft.AspNetCore.Components.ResourceAsset.Url.get -> string! +Microsoft.AspNetCore.Components.ResourceAssetCollection +Microsoft.AspNetCore.Components.ResourceAssetCollection.IsContentSpecificUrl(string! path) -> bool +Microsoft.AspNetCore.Components.ResourceAssetCollection.ResourceAssetCollection(System.Collections.Generic.IReadOnlyList! resources) -> void +Microsoft.AspNetCore.Components.ResourceAssetCollection.this[string! key].get -> string! +Microsoft.AspNetCore.Components.ResourceAssetProperty +Microsoft.AspNetCore.Components.ResourceAssetProperty.Name.get -> string! +Microsoft.AspNetCore.Components.ResourceAssetProperty.ResourceAssetProperty(string! name, string! value) -> void +Microsoft.AspNetCore.Components.ResourceAssetProperty.Value.get -> string! Microsoft.AspNetCore.Components.RouteAttribute Microsoft.AspNetCore.Components.RouteAttribute.RouteAttribute(string! template) -> void Microsoft.AspNetCore.Components.RouteAttribute.Template.get -> string! @@ -685,6 +709,7 @@ static readonly Microsoft.AspNetCore.Components.EventCallback.Empty -> Microsoft static readonly Microsoft.AspNetCore.Components.EventCallback.Factory -> Microsoft.AspNetCore.Components.EventCallbackFactory! static readonly Microsoft.AspNetCore.Components.EventCallback.Empty -> Microsoft.AspNetCore.Components.EventCallback static readonly Microsoft.AspNetCore.Components.EventCallbackWorkItem.Empty -> Microsoft.AspNetCore.Components.EventCallbackWorkItem +static readonly Microsoft.AspNetCore.Components.ResourceAssetCollection.Empty -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.ComponentBase.BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder! builder) -> void virtual Microsoft.AspNetCore.Components.ComponentBase.OnAfterRender(bool firstRender) -> void virtual Microsoft.AspNetCore.Components.ComponentBase.OnAfterRenderAsync(bool firstRender) -> System.Threading.Tasks.Task! @@ -703,11 +728,13 @@ virtual Microsoft.AspNetCore.Components.NavigationManager.SetNavigationLockState virtual Microsoft.AspNetCore.Components.OwningComponentBase.Dispose(bool disposing) -> void virtual Microsoft.AspNetCore.Components.Rendering.ComponentState.DisposeAsync() -> System.Threading.Tasks.ValueTask virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.AddPendingTask(Microsoft.AspNetCore.Components.Rendering.ComponentState? componentState, System.Threading.Tasks.Task! task) -> void +virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.CreateComponentState(int componentId, Microsoft.AspNetCore.Components.IComponent! component, Microsoft.AspNetCore.Components.Rendering.ComponentState? parentComponentState) -> Microsoft.AspNetCore.Components.Rendering.ComponentState! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.RenderTree.EventFieldInfo? fieldInfo, System.EventArgs! eventArgs) -> System.Threading.Tasks.Task! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.DispatchEventAsync(ulong eventHandlerId, Microsoft.AspNetCore.Components.RenderTree.EventFieldInfo? fieldInfo, System.EventArgs! eventArgs, bool waitForQuiescence) -> System.Threading.Tasks.Task! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.Dispose(bool disposing) -> void virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.GetComponentRenderMode(Microsoft.AspNetCore.Components.IComponent! component) -> Microsoft.AspNetCore.Components.IComponentRenderMode? virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessPendingRender() -> void +virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.ResolveComponentForRenderMode(System.Type! componentType, int? parentComponentId, Microsoft.AspNetCore.Components.IComponentActivator! componentActivator, Microsoft.AspNetCore.Components.IComponentRenderMode! renderMode) -> Microsoft.AspNetCore.Components.IComponent! virtual Microsoft.AspNetCore.Components.RouteView.Render(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder! builder) -> void diff --git a/src/Components/Components/src/PublicAPI.Unshipped.txt b/src/Components/Components/src/PublicAPI.Unshipped.txt index e8c43eb034cf..2da7d492e710 100644 --- a/src/Components/Components/src/PublicAPI.Unshipped.txt +++ b/src/Components/Components/src/PublicAPI.Unshipped.txt @@ -1,28 +1,53 @@ #nullable enable -Microsoft.AspNetCore.Components.ComponentBase.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! -Microsoft.AspNetCore.Components.ComponentBase.AssignedRenderMode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode? -Microsoft.AspNetCore.Components.ComponentBase.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! -Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute -Microsoft.AspNetCore.Components.ExcludeFromInteractiveRoutingAttribute.ExcludeFromInteractiveRoutingAttribute() -> void -Microsoft.AspNetCore.Components.RendererInfo -Microsoft.AspNetCore.Components.RendererInfo.IsInteractive.get -> bool -Microsoft.AspNetCore.Components.RendererInfo.Name.get -> string! -Microsoft.AspNetCore.Components.RendererInfo.RendererInfo(string! rendererName, bool isInteractive) -> void -Microsoft.AspNetCore.Components.RenderHandle.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! -Microsoft.AspNetCore.Components.RenderHandle.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! -Microsoft.AspNetCore.Components.RenderHandle.RenderMode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode? -Microsoft.AspNetCore.Components.ResourceAsset -Microsoft.AspNetCore.Components.ResourceAsset.Properties.get -> System.Collections.Generic.IReadOnlyList? -Microsoft.AspNetCore.Components.ResourceAsset.ResourceAsset(string! url, System.Collections.Generic.IReadOnlyList? properties) -> void -Microsoft.AspNetCore.Components.ResourceAsset.Url.get -> string! -Microsoft.AspNetCore.Components.ResourceAssetCollection -Microsoft.AspNetCore.Components.ResourceAssetCollection.IsContentSpecificUrl(string! path) -> bool -Microsoft.AspNetCore.Components.ResourceAssetCollection.ResourceAssetCollection(System.Collections.Generic.IReadOnlyList! resources) -> void -Microsoft.AspNetCore.Components.ResourceAssetCollection.this[string! key].get -> string! -Microsoft.AspNetCore.Components.ResourceAssetProperty -Microsoft.AspNetCore.Components.ResourceAssetProperty.Name.get -> string! -Microsoft.AspNetCore.Components.ResourceAssetProperty.ResourceAssetProperty(string! name, string! value) -> void -Microsoft.AspNetCore.Components.ResourceAssetProperty.Value.get -> string! -static readonly Microsoft.AspNetCore.Components.ResourceAssetCollection.Empty -> Microsoft.AspNetCore.Components.ResourceAssetCollection! -virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.Assets.get -> Microsoft.AspNetCore.Components.ResourceAssetCollection! -virtual Microsoft.AspNetCore.Components.RenderTree.Renderer.RendererInfo.get -> Microsoft.AspNetCore.Components.RendererInfo! +*REMOVED*Microsoft.AspNetCore.Components.ResourceAsset.ResourceAsset(string! url, System.Collections.Generic.IReadOnlyList? properties) -> void +Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager.RestoreStateAsync(Microsoft.AspNetCore.Components.IPersistentComponentStateStore! store, Microsoft.AspNetCore.Components.RestoreContext! context) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.Components.PersistentComponentState.RegisterOnRestoring(System.Action! callback, Microsoft.AspNetCore.Components.RestoreOptions options) -> Microsoft.AspNetCore.Components.RestoringComponentStateSubscription +Microsoft.AspNetCore.Components.PersistentStateAttribute.AllowUpdates.get -> bool +Microsoft.AspNetCore.Components.PersistentStateAttribute.AllowUpdates.set -> void +Microsoft.AspNetCore.Components.PersistentStateAttribute.RestoreBehavior.get -> Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.PersistentStateAttribute.RestoreBehavior.set -> void +Microsoft.AspNetCore.Components.Rendering.ComponentState.Renderer.get -> Microsoft.AspNetCore.Components.RenderTree.Renderer! +Microsoft.AspNetCore.Components.ResourceAsset.ResourceAsset(string! url, System.Collections.Generic.IReadOnlyList? properties = null) -> void +Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.RestoreBehavior.Default = 0 -> Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.RestoreBehavior.SkipInitialValue = 1 -> Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.RestoreBehavior.SkipLastSnapshot = 2 -> Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.RestoreContext +Microsoft.AspNetCore.Components.RestoreOptions +Microsoft.AspNetCore.Components.RestoreOptions.AllowUpdates.get -> bool +Microsoft.AspNetCore.Components.RestoreOptions.AllowUpdates.init -> void +Microsoft.AspNetCore.Components.RestoreOptions.RestoreBehavior.get -> Microsoft.AspNetCore.Components.RestoreBehavior +Microsoft.AspNetCore.Components.RestoreOptions.RestoreBehavior.init -> void +Microsoft.AspNetCore.Components.RestoreOptions.RestoreOptions() -> void +Microsoft.AspNetCore.Components.RestoringComponentStateSubscription +Microsoft.AspNetCore.Components.RestoringComponentStateSubscription.Dispose() -> void +Microsoft.AspNetCore.Components.RestoringComponentStateSubscription.RestoringComponentStateSubscription() -> void +Microsoft.AspNetCore.Components.Routing.Router.NotFoundPage.get -> System.Type? +Microsoft.AspNetCore.Components.Routing.Router.NotFoundPage.set -> void +Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions +Microsoft.AspNetCore.Components.NavigationManager.OnNotFound -> System.EventHandler! +Microsoft.AspNetCore.Components.NavigationManager.NotFound() -> void +Microsoft.AspNetCore.Components.Routing.IHostEnvironmentNavigationManager.Initialize(string! baseUri, string! uri, System.Func! onNavigateTo) -> void +Microsoft.AspNetCore.Components.Routing.NotFoundEventArgs +Microsoft.AspNetCore.Components.Routing.NotFoundEventArgs.NotFoundEventArgs() -> void +Microsoft.AspNetCore.Components.Routing.NotFoundEventArgs.Path.get -> string? +Microsoft.AspNetCore.Components.Routing.NotFoundEventArgs.Path.set -> void +Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager.ComponentStatePersistenceManager(Microsoft.Extensions.Logging.ILogger! logger, System.IServiceProvider! serviceProvider) -> void +Microsoft.AspNetCore.Components.Infrastructure.ComponentStatePersistenceManager.SetPlatformRenderMode(Microsoft.AspNetCore.Components.IComponentRenderMode! renderMode) -> void +Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions +Microsoft.AspNetCore.Components.PersistentStateAttribute +Microsoft.AspNetCore.Components.PersistentStateAttribute.PersistentStateAttribute() -> void +Microsoft.AspNetCore.Components.Infrastructure.PersistentStateProviderServiceCollectionExtensions +Microsoft.AspNetCore.Components.PersistentComponentStateSerializer +Microsoft.AspNetCore.Components.PersistentComponentStateSerializer.PersistentComponentStateSerializer() -> void +abstract Microsoft.AspNetCore.Components.PersistentComponentStateSerializer.Persist(T value, System.Buffers.IBufferWriter! writer) -> void +abstract Microsoft.AspNetCore.Components.PersistentComponentStateSerializer.Restore(System.Buffers.ReadOnlySequence data) -> T +static Microsoft.AspNetCore.Components.Infrastructure.RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(Microsoft.Extensions.DependencyInjection.IServiceCollection! services, Microsoft.AspNetCore.Components.IComponentRenderMode! componentRenderMode) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.AspNetCore.Components.Infrastructure.ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static Microsoft.AspNetCore.Components.RestoreContext.InitialValue.get -> Microsoft.AspNetCore.Components.RestoreContext! +static Microsoft.AspNetCore.Components.RestoreContext.LastSnapshot.get -> Microsoft.AspNetCore.Components.RestoreContext! +static Microsoft.AspNetCore.Components.RestoreContext.ValueUpdate.get -> Microsoft.AspNetCore.Components.RestoreContext! +virtual Microsoft.AspNetCore.Components.OwningComponentBase.DisposeAsyncCore() -> System.Threading.Tasks.ValueTask +static Microsoft.AspNetCore.Components.Infrastructure.PersistentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +virtual Microsoft.AspNetCore.Components.Rendering.ComponentState.GetComponentKey() -> object? diff --git a/src/Components/Components/src/Reflection/ComponentProperties.cs b/src/Components/Components/src/Reflection/ComponentProperties.cs index b9e3779c43a0..353576925963 100644 --- a/src/Components/Components/src/Reflection/ComponentProperties.cs +++ b/src/Components/Components/src/Reflection/ComponentProperties.cs @@ -5,12 +5,21 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; +using Microsoft.AspNetCore.Components.HotReload; using static Microsoft.AspNetCore.Internal.LinkerFlags; namespace Microsoft.AspNetCore.Components.Reflection; internal static class ComponentProperties { + static ComponentProperties() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += ClearCache; + } + } + internal const BindingFlags BindablePropertyFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase; // Right now it's not possible for a component to define a Parameter and a Cascading Parameter with diff --git a/src/Components/Components/src/Reflection/PropertyGetter.cs b/src/Components/Components/src/Reflection/PropertyGetter.cs new file mode 100644 index 000000000000..c458feda0af7 --- /dev/null +++ b/src/Components/Components/src/Reflection/PropertyGetter.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace Microsoft.AspNetCore.Components.Reflection; + +internal sealed class PropertyGetter +{ + private static readonly MethodInfo CallPropertyGetterOpenGenericMethod = + typeof(PropertyGetter).GetMethod(nameof(CallPropertyGetter), BindingFlags.NonPublic | BindingFlags.Static)!; + + private readonly Func _GetterDelegate; + + public PropertyInfo PropertyInfo { get; } + + [UnconditionalSuppressMessage( + "ReflectionAnalysis", + "IL2060:MakeGenericMethod", + Justification = "The referenced methods don't have any DynamicallyAccessedMembers annotations. See https://github.com/mono/linker/issues/1727")] + public PropertyGetter(Type targetType, PropertyInfo property) + { + PropertyInfo = property; + + if (property.GetMethod == null) + { + throw new InvalidOperationException("Cannot provide a value for property " + + $"'{property.Name}' on type '{targetType.FullName}' because the property " + + "has no getter."); + } + + if (RuntimeFeature.IsDynamicCodeSupported) + { + var getMethod = property.GetMethod; + + var propertyGetterAsFunc = + getMethod.CreateDelegate(typeof(Func<,>).MakeGenericType(targetType, property.PropertyType)); + + var callPropertyGetterClosedGenericMethod = + CallPropertyGetterOpenGenericMethod.MakeGenericMethod(targetType, property.PropertyType); + + _GetterDelegate = (Func) + callPropertyGetterClosedGenericMethod.CreateDelegate(typeof(Func), propertyGetterAsFunc); + } + else + { + _GetterDelegate = property.GetValue; + } + } + + public object? GetValue(object target) => _GetterDelegate(target); + + private static object? CallPropertyGetter( + Func Getter, + object target) + where TTarget : notnull + { + return (object?)Getter((TTarget)target); + } +} diff --git a/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs b/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs new file mode 100644 index 000000000000..9e6d84edc4a0 --- /dev/null +++ b/src/Components/Components/src/RegisterPersistentComponentStateServiceCollectionExtensions.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using static Microsoft.AspNetCore.Internal.LinkerFlags; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +/// +/// Infrastructure APIs for registering services that persist state. +/// +public static class RegisterPersistentComponentStateServiceCollectionExtensions +{ + /// + /// Saves state when the application is persisting state and restores it at the appropriate time automatically. + /// + /// + /// Only public properties annotated with are persisted and restored. + /// + /// The service type to register for persistence. + /// The . + /// The to register the service for. + /// The . + public static IServiceCollection AddPersistentServiceRegistration<[DynamicallyAccessedMembers(JsonSerialized)] TService>( + IServiceCollection services, + IComponentRenderMode componentRenderMode) + { + // This method does something very similar to what we do when we register root components, except in this case we are registering services. + // We collect a list of all the registrations on during static rendering mode and push those registrations to interactive mode. + // When the interactive mode starts, we retrieve the registry, and this triggers the process for restoring all the states for all the services. + // The process for retrieving the services is the same as we do for root components. + // We look for the assembly in the current list of loaded assemblies. + // We look for the type inside the assembly. + // We resolve the service from the DI container. + // We loop through the properties in the type and try to restore the properties that have PersistentState on them. + services.TryAddEnumerable(ServiceDescriptor.Singleton(new PersistentServiceRegistration(componentRenderMode))); + services.TryAddSingleton(); + + return services; + } +} diff --git a/src/Components/Components/src/RegisterRenderingMetricsServiceCollectionExtensions.cs b/src/Components/Components/src/RegisterRenderingMetricsServiceCollectionExtensions.cs new file mode 100644 index 000000000000..e1e224e5f71b --- /dev/null +++ b/src/Components/Components/src/RegisterRenderingMetricsServiceCollectionExtensions.cs @@ -0,0 +1,57 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.Metrics; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; + +namespace Microsoft.AspNetCore.Components.Infrastructure; + +/// +/// Infrastructure APIs for registering diagnostic metrics. +/// +public static class ComponentsMetricsServiceCollectionExtensions +{ + /// + /// Registers component rendering metrics + /// + /// The . + /// The . + public static IServiceCollection AddComponentsMetrics( + IServiceCollection services) + { + // do not register IConfigureOptions multiple times + if (!IsMeterFactoryRegistered(services)) + { + services.AddMetrics(); + } + services.TryAddSingleton(); + + return services; + } + + /// + /// Registers component rendering traces + /// + /// The . + /// The . + public static IServiceCollection AddComponentsTracing( + IServiceCollection services) + { + services.TryAddScoped(); + + return services; + } + + private static bool IsMeterFactoryRegistered(IServiceCollection services) + { + foreach (var service in services) + { + if (service.ServiceType == typeof(IMeterFactory)) + { + return true; + } + } + return false; + } +} diff --git a/src/Components/Components/src/RenderHandle.cs b/src/Components/Components/src/RenderHandle.cs index 6ac2b7b3cdec..edcb644bddfb 100644 --- a/src/Components/Components/src/RenderHandle.cs +++ b/src/Components/Components/src/RenderHandle.cs @@ -21,6 +21,9 @@ internal RenderHandle(Renderer renderer, int componentId) _componentId = componentId; } + internal ComponentsMetrics? ComponentMetrics => _renderer?.ComponentMetrics; + internal ComponentsActivitySource? ComponentActivitySource => _renderer?.ComponentActivitySource; + /// /// Gets the associated with the component. /// diff --git a/src/Components/Components/src/RenderTree/EventArgsTypeCache.cs b/src/Components/Components/src/RenderTree/EventArgsTypeCache.cs index 1c3a795d9e25..5b9abafb0bed 100644 --- a/src/Components/Components/src/RenderTree/EventArgsTypeCache.cs +++ b/src/Components/Components/src/RenderTree/EventArgsTypeCache.cs @@ -3,6 +3,7 @@ using System.Collections.Concurrent; using System.Reflection; +using Microsoft.AspNetCore.Components.HotReload; namespace Microsoft.AspNetCore.Components.RenderTree; @@ -10,6 +11,14 @@ internal static class EventArgsTypeCache { private static readonly ConcurrentDictionary Cache = new ConcurrentDictionary(); + static EventArgsTypeCache() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += Cache.Clear; + } + } + public static Type GetEventArgsType(MethodInfo methodInfo) { return Cache.GetOrAdd(methodInfo, methodInfo => diff --git a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs index a4c3ebbf2a6e..e61fb6d2d932 100644 --- a/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs +++ b/src/Components/Components/src/RenderTree/RenderTreeDiffBuilder.cs @@ -746,10 +746,50 @@ private static void AppendDiffEntriesForFramesWithSameSequence( // We don't handle attributes here, they have their own diff logic. // See AppendDiffEntriesForAttributeFrame default: - throw new NotImplementedException($"Encountered unsupported frame type during diffing: {newTree[newFrameIndex].FrameTypeField}"); + throw new NotImplementedException(CreateDiffErrorMessage(ref diffContext, newFrameIndex)); } } + private static string CreateDiffErrorMessage(ref DiffContext diffContext, int newFrameIndex) + { + var newTree = diffContext.NewTree; + var unsupportedFrameType = newTree[newFrameIndex].FrameTypeField; + + // Build component hierarchy path + var componentPath = BuildComponentPath(diffContext.Renderer, diffContext.ComponentId); + + // Build frame types descriptor + var frameTypesDescriptor = BuildFrameTypeDescriptor(newTree, newFrameIndex); + + return $"Encountered an unsupported frame type during diffing {unsupportedFrameType} for Component Path: '{componentPath}' on tree with length '{newTree.Length}' and contents '{frameTypesDescriptor}'."; + } + + private static string BuildFrameTypeDescriptor(RenderTreeFrame[] renderTree, int frameIndex) + { + var frameTypes = new List(); + for (var i = 0; i <= frameIndex && i < renderTree.Length; i++) + { + frameTypes.Add(renderTree[i].FrameTypeField.ToString()); + } + + return string.Join(", ", frameTypes); + } + + private static string BuildComponentPath(Renderer renderer, int componentId) + { + var componentPath = new List(); + var currentComponentState = renderer.GetRequiredComponentState(componentId); + + while (currentComponentState is not null) + { + var componentType = currentComponentState.Component.GetType(); + componentPath.Insert(0, componentType.Name); + currentComponentState = currentComponentState.ParentComponentState; + } + + return string.Join(" -> ", componentPath); + } + // This should only be called for attributes that have the same name. This is an // invariant maintained by the callers. private static void AppendDiffEntriesForAttributeFrame( diff --git a/src/Components/Components/src/RenderTree/Renderer.cs b/src/Components/Components/src/RenderTree/Renderer.cs index e0fcfd834340..ad0864443da4 100644 --- a/src/Components/Components/src/RenderTree/Renderer.cs +++ b/src/Components/Components/src/RenderTree/Renderer.cs @@ -7,6 +7,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Microsoft.AspNetCore.Components.HotReload; +using Microsoft.AspNetCore.Components.Infrastructure; using Microsoft.AspNetCore.Components.Reflection; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.Extensions.DependencyInjection; @@ -15,6 +16,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree; +using CategoryLink = Tuple?>; + /// /// Types in the Microsoft.AspNetCore.Components.RenderTree are not recommended for use outside /// of the Blazor framework. These types will change in a future release. @@ -24,15 +27,22 @@ namespace Microsoft.AspNetCore.Components.RenderTree; // dispatching events to them, and notifying when the user interface is being updated. public abstract partial class Renderer : IDisposable, IAsyncDisposable { + internal static readonly Task CanceledRenderTask = Task.FromCanceled(new CancellationToken(canceled: true)); + private readonly object _lockObject = new(); private readonly IServiceProvider _serviceProvider; private readonly Dictionary _componentStateById = new Dictionary(); private readonly Dictionary _componentStateByComponent = new Dictionary(); private readonly RenderBatchBuilder _batchBuilder = new RenderBatchBuilder(); - private readonly Dictionary _eventBindings = new(); + private readonly Dictionary _eventBindings = new(); private readonly Dictionary _eventHandlerIdReplacements = new Dictionary(); private readonly ILogger _logger; private readonly ComponentFactory _componentFactory; + private readonly ComponentsMetrics? _componentsMetrics; + private readonly ComponentsActivitySource? _componentsActivitySource; + private readonly object _activityLinksStore = new Dictionary(StringComparer.OrdinalIgnoreCase); + internal object ActivityLinksStore => _activityLinksStore; + private Dictionary? _rootComponentsLatestParameters; private Task? _ongoingQuiescenceTask; @@ -44,6 +54,7 @@ public abstract partial class Renderer : IDisposable, IAsyncDisposable private bool _rendererIsDisposed; private bool _hotReloadInitialized; + private HotReloadRenderHandler? _hotReloadRenderHandler; /// /// Allows the caller to handle exceptions from the SynchronizationContext when one is available. @@ -89,12 +100,18 @@ public Renderer(IServiceProvider serviceProvider, ILoggerFactory loggerFactory, // logger name in here as a string literal. _logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Components.RenderTree.Renderer"); _componentFactory = new ComponentFactory(componentActivator, this); + _componentsMetrics = serviceProvider.GetService(); + _componentsActivitySource = serviceProvider.GetService(); + _componentsActivitySource?.Init(new ComponentsActivityLinkStore(this)); ServiceProviderCascadingValueSuppliers = serviceProvider.GetService() is null ? Array.Empty() : serviceProvider.GetServices().ToArray(); } + internal ComponentsMetrics? ComponentMetrics => _componentsMetrics; + internal ComponentsActivitySource? ComponentActivitySource => _componentsActivitySource; + internal ICascadingValueSupplier[] ServiceProviderCascadingValueSuppliers { get; } internal HotReloadManager HotReloadManager { get; set; } = HotReloadManager.Default; @@ -215,7 +232,12 @@ protected internal int AssignRootComponentId(IComponent component) _hotReloadInitialized = true; if (HotReloadManager.MetadataUpdateSupported) { - HotReloadManager.OnDeltaApplied += RenderRootComponentsOnHotReload; + // Capture the current ExecutionContext so AsyncLocal values present during initial root component + // registration flow through to hot reload re-renders. Without this, hot reload callbacks execute + // on a thread without the original ambient context and AsyncLocal values appear null. + var executionContext = ExecutionContext.Capture(); + _hotReloadRenderHandler = new HotReloadRenderHandler(this, executionContext); + HotReloadManager.OnDeltaApplied += _hotReloadRenderHandler.RerenderOnHotReload; } } @@ -316,7 +338,7 @@ protected internal void RemoveRootComponent(int componentId) /// /// The root component ID. /// The type of the component. - internal Type GetRootComponentType(int componentId) + internal Type GetRootTypeType(int componentId) => GetRequiredRootComponentState(componentId).Component.GetType(); /// @@ -371,12 +393,16 @@ private ComponentState AttachAndInitComponent(IComponent component, int parentCo var parentComponentState = GetOptionalComponentState(parentComponentId); var componentState = CreateComponentState(componentId, component, parentComponentState); Log.InitializingComponent(_logger, componentState, parentComponentState); - _componentStateById.Add(componentId, componentState); - _componentStateByComponent.Add(component, componentState); component.Attach(new RenderHandle(this, componentId)); return componentState; } + internal void RegisterComponentState(IComponent component, int componentId, ComponentState componentState) + { + _componentStateById.Add(componentId, componentState); + _componentStateByComponent.Add(component, componentState); + } + /// /// Creates a instance to track state associated with a newly-instantiated component. /// This is called before the component is initialized and tracked within the . Subclasses @@ -431,7 +457,20 @@ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo? fie _pendingTasks ??= new(); } - var (renderedByComponentId, callback) = GetRequiredEventBindingEntry(eventHandlerId); + var (renderedByComponentId, callback, attributeName) = GetRequiredEventBindingEntry(eventHandlerId); + + // collect trace + ComponentsActivityHandle activityHandle = default; + string receiverName = null; + string methodName = null; + if (ComponentActivitySource != null) + { + receiverName ??= (callback.Receiver?.GetType() ?? callback.Delegate.Target?.GetType())?.FullName; + methodName ??= callback.Delegate.Method?.Name; + activityHandle = ComponentsActivitySource.StartHandleEventActivity(receiverName, methodName, attributeName); + } + + var eventStartTimestamp = ComponentMetrics != null && ComponentMetrics.IsEventEnabled ? Stopwatch.GetTimestamp() : 0; // If this event attribute was rendered by a component that's since been disposed, don't dispatch the event at all. // This can occur because event handler disposal is deferred, so event handler IDs can outlive their components. @@ -473,9 +512,35 @@ public virtual Task DispatchEventAsync(ulong eventHandlerId, EventFieldInfo? fie _isBatchInProgress = true; task = callback.InvokeAsync(eventArgs); + + // collect metrics + if (ComponentMetrics != null && ComponentMetrics.IsEventEnabled) + { + receiverName ??= (callback.Receiver?.GetType() ?? callback.Delegate.Target?.GetType())?.FullName; + methodName ??= callback.Delegate.Method?.Name; + _ = ComponentMetrics.CaptureEventDuration(task, eventStartTimestamp, receiverName, methodName, attributeName); + } + + // stop activity/trace + if (ComponentActivitySource != null && activityHandle.Activity != null) + { + _ = ComponentActivitySource.CaptureHandleEventStopAsync(task, activityHandle); + } } catch (Exception e) { + if (ComponentMetrics != null && ComponentMetrics.IsEventEnabled) + { + receiverName ??= (callback.Receiver?.GetType() ?? callback.Delegate.Target?.GetType())?.FullName; + methodName ??= callback.Delegate.Method?.Name; + ComponentMetrics.FailEventSync(e, eventStartTimestamp, receiverName, methodName, attributeName); + } + + if (ComponentActivitySource != null && activityHandle.Activity != null) + { + ComponentActivitySource.StopHandleEventActivity(activityHandle, e); + } + HandleExceptionViaErrorBoundary(e, receiverComponentState); return Task.CompletedTask; } @@ -627,7 +692,7 @@ internal void AssignEventHandlerId(int renderedByComponentId, ref RenderTreeFram // // When that happens we intentionally box the EventCallback because we need to hold on to // the receiver. - _eventBindings.Add(id, (renderedByComponentId, callback)); + _eventBindings.Add(id, (renderedByComponentId, callback, frame.AttributeName)); } else if (frame.AttributeValueField is MulticastDelegate @delegate) { @@ -635,7 +700,7 @@ internal void AssignEventHandlerId(int renderedByComponentId, ref RenderTreeFram // is the same as delegate.Target. In this case since the receiver is implicit we can // avoid boxing the EventCallback object and just re-hydrate it on the other side of the // render tree. - _eventBindings.Add(id, (renderedByComponentId, new EventCallback(@delegate.Target as IHandleEvent, @delegate))); + _eventBindings.Add(id, (renderedByComponentId, new EventCallback(@delegate.Target as IHandleEvent, @delegate), frame.AttributeName)); } // NOTE: we do not to handle EventCallback here. EventCallback is only used when passing @@ -679,7 +744,7 @@ internal void TrackReplacedEventHandlerId(ulong oldEventHandlerId, ulong newEven _eventHandlerIdReplacements.Add(oldEventHandlerId, newEventHandlerId); } - private (int RenderedByComponentId, EventCallback Callback) GetRequiredEventBindingEntry(ulong eventHandlerId) + private (int RenderedByComponentId, EventCallback Callback, string? attributeName) GetRequiredEventBindingEntry(ulong eventHandlerId) { if (!_eventBindings.TryGetValue(eventHandlerId, out var entry)) { @@ -699,7 +764,7 @@ private ulong FindLatestEventHandlerIdInChain(ulong eventHandlerId) return eventHandlerId; } - private ComponentState GetRequiredComponentState(int componentId) + internal ComponentState GetRequiredComponentState(int componentId) => _componentStateById.TryGetValue(componentId, out var componentState) ? componentState : throw new ArgumentException($"The renderer does not have a component with ID {componentId}."); @@ -745,6 +810,7 @@ private void ProcessRenderQueue() _isBatchInProgress = true; var updateDisplayTask = Task.CompletedTask; + var batchStartTimestamp = ComponentMetrics != null && ComponentMetrics.IsBatchEnabled ? Stopwatch.GetTimestamp() : 0; try { @@ -776,9 +842,19 @@ private void ProcessRenderQueue() // Fire off the execution of OnAfterRenderAsync, but don't wait for it // if there is async work to be done. _ = InvokeRenderCompletedCalls(batch.UpdatedComponents, updateDisplayTask); + + if (ComponentMetrics != null && ComponentMetrics.IsBatchEnabled) + { + _ = ComponentMetrics.CaptureBatchDuration(updateDisplayTask, batchStartTimestamp, batch.UpdatedComponents.Count); + } } catch (Exception e) { + if (ComponentMetrics != null && ComponentMetrics.IsBatchEnabled) + { + ComponentMetrics.FailBatchSync(e, batchStartTimestamp); + } + // Ensure we catch errors while running the render functions of the components. HandleException(e); return; @@ -922,6 +998,7 @@ private void RenderInExistingBatch(RenderQueueEntry renderQueueEntry) { var componentState = renderQueueEntry.ComponentState; Log.RenderingComponent(_logger, componentState); + componentState.RenderIntoBatch(_batchBuilder, renderQueueEntry.RenderFragment, out var renderFragmentException); if (renderFragmentException != null) { @@ -1126,9 +1203,9 @@ private void HandleExceptionViaErrorBoundary(Exception error, ComponentState? er /// if this method is being invoked by , otherwise . protected virtual void Dispose(bool disposing) { - // Unlike other Renderer APIs, we need Dispose to be thread-safe - // (and not require being called only from the sync context) - // because other classes many need to dispose a Renderer during their own Dispose (rather than DisposeAsync) + // Unlike other Renderer APIs, we need Dispose to be thread-safe + // (and not require being called only from the sync context) + // because other classes many need to dispose a Renderer during their own Dispose (rather than DisposeAsync) // and we don't want to force that other code to deal with calling InvokeAsync from a synchronous method. lock (_lockObject) { @@ -1163,9 +1240,9 @@ protected virtual void Dispose(bool disposing) _rendererIsDisposed = true; } - if (_hotReloadInitialized && HotReloadManager.MetadataUpdateSupported) + if (_hotReloadInitialized && HotReloadManager.MetadataUpdateSupported && _hotReloadRenderHandler is not null) { - HotReloadManager.OnDeltaApplied -= RenderRootComponentsOnHotReload; + HotReloadManager.OnDeltaApplied -= _hotReloadRenderHandler.RerenderOnHotReload; } // It's important that we handle all exceptions here before reporting any of them. @@ -1300,4 +1377,19 @@ public async ValueTask DisposeAsync() } } } + + private sealed class HotReloadRenderHandler(Renderer renderer, ExecutionContext? executionContext) + { + public void RerenderOnHotReload() + { + if (executionContext is null) + { + renderer.RenderRootComponentsOnHotReload(); + } + else + { + ExecutionContext.Run(executionContext, static s => ((Renderer)s!).RenderRootComponentsOnHotReload(), renderer); + } + } + } } diff --git a/src/Components/Components/src/RenderTree/RendererInfo.cs b/src/Components/Components/src/RenderTree/RendererInfo.cs index 9c401b5ce006..7f006550acb8 100644 --- a/src/Components/Components/src/RenderTree/RendererInfo.cs +++ b/src/Components/Components/src/RenderTree/RendererInfo.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics; + namespace Microsoft.AspNetCore.Components; /// @@ -8,6 +10,7 @@ namespace Microsoft.AspNetCore.Components; /// /// The name of the platform. /// A flag to indicate if the platform is interactive. +[DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")] public sealed class RendererInfo(string rendererName, bool isInteractive) { /// @@ -19,4 +22,6 @@ public sealed class RendererInfo(string rendererName, bool isInteractive) /// Gets a flag to indicate if the platform is interactive. /// public bool IsInteractive { get; } = isInteractive; + + private string GetDebuggerDisplay() => $"Name: {Name}, Interactive: {IsInteractive}"; } diff --git a/src/Components/Components/src/Rendering/ComponentState.cs b/src/Components/Components/src/Rendering/ComponentState.cs index 4d973398f639..d1b42a80b153 100644 --- a/src/Components/Components/src/Rendering/ComponentState.cs +++ b/src/Components/Components/src/Rendering/ComponentState.cs @@ -23,6 +23,7 @@ public class ComponentState : IAsyncDisposable private RenderTreeBuilder _nextRenderTree; private ArrayBuilder? _latestDirectParametersSnapshot; // Lazily instantiated private bool _componentWasDisposed; + private readonly string? _componentTypeName; /// /// Constructs an instance of . @@ -44,11 +45,18 @@ public ComponentState(Renderer renderer, int componentId, IComponent component, CurrentRenderTree = new RenderTreeBuilder(); _nextRenderTree = new RenderTreeBuilder(); + _renderer.RegisterComponentState(component, ComponentId, this); + if (_cascadingParameters.Count != 0) { _hasCascadingParameters = true; _hasAnyCascadingParameterSubscriptions = AddCascadingParameterSubscriptions(); } + + if (_renderer.ComponentMetrics != null && _renderer.ComponentMetrics.IsParametersEnabled) + { + _componentTypeName = component.GetType().FullName; + } } private static ComponentState? GetSectionOutletLogicalParent(Renderer renderer, SectionOutlet sectionOutlet) @@ -85,7 +93,12 @@ public ComponentState(Renderer renderer, int componentId, IComponent component, internal RenderTreeBuilder CurrentRenderTree { get; set; } - internal Renderer Renderer => _renderer; + /// + /// Gets the instance used to render the output. + /// + /// The instance is accessible to derived classes and classes within the + /// same assembly. It provides rendering functionality that may be used for custom rendering logic. + protected internal Renderer Renderer => _renderer; internal void RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, out Exception? renderFragmentException) { @@ -229,14 +242,27 @@ internal void NotifyCascadingValueChanged(in ParameterViewLifetime lifetime) // a consistent set to the recipient. private void SupplyCombinedParameters(ParameterView directAndCascadingParameters) { - // Normalise sync and async exceptions into a Task + var parametersStartTimestamp = _renderer.ComponentMetrics != null && _renderer.ComponentMetrics.IsParametersEnabled ? Stopwatch.GetTimestamp() : 0; + + // Normalize sync and async exceptions into a Task Task setParametersAsyncTask; try { setParametersAsyncTask = Component.SetParametersAsync(directAndCascadingParameters); + + // collect metrics + if (_renderer.ComponentMetrics != null && _renderer.ComponentMetrics.IsParametersEnabled) + { + _ = _renderer.ComponentMetrics.CaptureParametersDuration(setParametersAsyncTask, parametersStartTimestamp, _componentTypeName); + } } catch (Exception ex) { + if (_renderer.ComponentMetrics != null && _renderer.ComponentMetrics.IsParametersEnabled) + { + _renderer.ComponentMetrics.FailParametersSync(ex, parametersStartTimestamp, _componentTypeName); + } + setParametersAsyncTask = Task.FromException(ex); } @@ -318,6 +344,39 @@ internal ValueTask DisposeInBatchAsync(RenderBatchBuilder batchBuilder) return DisposeAsync(); } + /// + /// Gets the component key for this component instance. + /// This is used for state persistence and component identification across render modes. + /// + /// The component key, or null if no key is available. + protected internal virtual object? GetComponentKey() + { + if (ParentComponentState is not { } parentComponentState) + { + return null; + } + + // Check if the parentComponentState has a `@key` directive applied to the current component. + var frames = parentComponentState.CurrentRenderTree.GetFrames(); + for (var i = 0; i < frames.Count; i++) + { + ref var currentFrame = ref frames.Array[i]; + + Debug.Assert(currentFrame.FrameType != RenderTreeFrameType.Component || currentFrame.Component != null, "GetComponentKey is being invoked too soon, ComponentState is not fully constructed."); + + if (currentFrame.FrameType != RenderTreeFrameType.Component || + !ReferenceEquals(Component, currentFrame.Component)) + { + // Skip any frame that is not the current component. + continue; + } + + return currentFrame.ComponentKey; + } + + return null; + } + private string GetDebuggerDisplay() { return $"ComponentId = {ComponentId}, Type = {Component.GetType().Name}, Disposed = {_componentWasDisposed}"; diff --git a/src/Components/Components/src/ResourceAsset.cs b/src/Components/Components/src/ResourceAsset.cs index 3bd98d5e6e60..4336f66c85bd 100644 --- a/src/Components/Components/src/ResourceAsset.cs +++ b/src/Components/Components/src/ResourceAsset.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Components; /// The URL of the resource. /// The properties associated to this resource. [DebuggerDisplay($"{{{nameof(GetDebuggerDisplay)}(),nq}}")] -public sealed class ResourceAsset(string url, IReadOnlyList? properties) +public sealed class ResourceAsset(string url, IReadOnlyList? properties = null) { /// /// Gets the URL that identifies this resource. diff --git a/src/Components/Components/src/RouteAttribute.cs b/src/Components/Components/src/RouteAttribute.cs index 58d3c2500dc9..b258ed7ae1b5 100644 --- a/src/Components/Components/src/RouteAttribute.cs +++ b/src/Components/Components/src/RouteAttribute.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.CodeAnalysis; + namespace Microsoft.AspNetCore.Components; /// @@ -13,7 +15,7 @@ public sealed class RouteAttribute : Attribute /// Constructs an instance of . /// /// The route template. - public RouteAttribute(string template) + public RouteAttribute([StringSyntax("Route")] string template) { ArgumentNullException.ThrowIfNull(template); diff --git a/src/Components/Components/src/RouteView.cs b/src/Components/Components/src/RouteView.cs index e5c0a5e2916c..36560a2aa342 100644 --- a/src/Components/Components/src/RouteView.cs +++ b/src/Components/Components/src/RouteView.cs @@ -28,9 +28,6 @@ static RouteView() } } - [Inject] - private NavigationManager NavigationManager { get; set; } - /// /// Gets or sets the route data. This determines the page that will be /// displayed and the parameter values that will be supplied to the page. @@ -71,6 +68,7 @@ public Task SetParametersAsync(ParameterView parameters) /// Renders the component. /// /// The . + [UnconditionalSuppressMessage("Trimming", "IL2110", Justification = "Layout components are preserved because the LayoutAttribute constructor parameter is correctly annotated.")] [UnconditionalSuppressMessage("Trimming", "IL2111", Justification = "Layout components are preserved because the LayoutAttribute constructor parameter is correctly annotated.")] [UnconditionalSuppressMessage("Trimming", "IL2118", Justification = "Layout components are preserved because the LayoutAttribute constructor parameter is correctly annotated.")] protected virtual void Render(RenderTreeBuilder builder) diff --git a/src/Components/Components/src/Routing/IHostEnvironmentNavigationManager.cs b/src/Components/Components/src/Routing/IHostEnvironmentNavigationManager.cs index cbe9274f9792..c1488a9b7bc3 100644 --- a/src/Components/Components/src/Routing/IHostEnvironmentNavigationManager.cs +++ b/src/Components/Components/src/Routing/IHostEnvironmentNavigationManager.cs @@ -15,4 +15,13 @@ public interface IHostEnvironmentNavigationManager /// The base URI. /// The absolute URI. void Initialize(string baseUri, string uri); + + /// + /// Initializes the . + /// + /// The base URI. + /// The absolute URI. + /// A delegate that points to a method handling navigation events. + void Initialize(string baseUri, string uri, Func onNavigateTo) => + Initialize(baseUri, uri); } diff --git a/src/Components/Components/src/Routing/NotFoundEventArgs.cs b/src/Components/Components/src/Routing/NotFoundEventArgs.cs new file mode 100644 index 000000000000..438d2d316dff --- /dev/null +++ b/src/Components/Components/src/Routing/NotFoundEventArgs.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components.Routing; + +/// +/// for . +/// +public sealed class NotFoundEventArgs : EventArgs +{ + /// + /// Gets the path of NotFoundPage. If the path is set, it indicates that a subscriber has handled the rendering of the NotFound contents. + /// + public string? Path { get; set; } +} diff --git a/src/Components/Components/src/Routing/RouteTable.cs b/src/Components/Components/src/Routing/RouteTable.cs index 2d4c9335cc87..f56beec826b9 100644 --- a/src/Components/Components/src/Routing/RouteTable.cs +++ b/src/Components/Components/src/Routing/RouteTable.cs @@ -4,6 +4,7 @@ using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.Globalization; +using Microsoft.AspNetCore.Components.HotReload; using Microsoft.AspNetCore.Routing.Tree; namespace Microsoft.AspNetCore.Components.Routing; @@ -13,6 +14,14 @@ internal sealed class RouteTable(TreeRouter treeRouter) private readonly TreeRouter _router = treeRouter; private static readonly ConcurrentDictionary<(Type, string), InboundRouteEntry> _routeEntryCache = new(); + static RouteTable() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _routeEntryCache.Clear; + } + } + public TreeRouter? TreeRouter => _router; [UnconditionalSuppressMessage( diff --git a/src/Components/Components/src/Routing/Router.cs b/src/Components/Components/src/Routing/Router.cs index 934a41613096..ecb69fe2cf63 100644 --- a/src/Components/Components/src/Routing/Router.cs +++ b/src/Components/Components/src/Routing/Router.cs @@ -3,13 +3,15 @@ #nullable disable warnings +using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Reflection.Metadata; using System.Runtime.ExceptionServices; using Microsoft.AspNetCore.Components.HotReload; using Microsoft.AspNetCore.Components.Rendering; -using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Internal; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Components.Routing; @@ -27,6 +29,7 @@ static readonly IReadOnlyDictionary _emptyParametersDictionary string _locationAbsolute; bool _navigationInterceptionEnabled; ILogger _logger; + string _notFoundPageRoute; private string _updateScrollPositionForHashLastLocation; private bool _updateScrollPositionForHash; @@ -68,8 +71,16 @@ static readonly IReadOnlyDictionary _emptyParametersDictionary /// Gets or sets the content to display when no match is found for the requested route. /// [Parameter] + [Obsolete("NotFound is deprecated. Use NotFoundPage instead.")] public RenderFragment NotFound { get; set; } + /// + /// Gets or sets the page content to display when no match is found for the requested route. + /// + [Parameter] + [DynamicallyAccessedMembers(LinkerFlags.Component)] + public Type? NotFoundPage { get; set; } + /// /// Gets or sets the content to display when a match is found for the requested route. /// @@ -92,7 +103,7 @@ static readonly IReadOnlyDictionary _emptyParametersDictionary /// over wildcards. /// This property is obsolete and configuring it does nothing. /// - [Obsolete("This property is obsolete and configuring it has not effect.")] + [Obsolete("This property is obsolete and configuring it has no effect.")] [Parameter] public bool PreferExactMatches { get; set; } private RouteTable Routes { get; set; } @@ -105,6 +116,7 @@ public void Attach(RenderHandle renderHandle) _baseUri = NavigationManager.BaseUri; _locationAbsolute = NavigationManager.Uri; NavigationManager.LocationChanged += OnLocationChanged; + NavigationManager.OnNotFound += OnNotFound; RoutingStateProvider = ServiceProvider.GetService(); if (HotReloadManager.Default.MetadataUpdateSupported) @@ -131,6 +143,34 @@ public async Task SetParametersAsync(ParameterView parameters) throw new InvalidOperationException($"The {nameof(Router)} component requires a value for the parameter {nameof(Found)}."); } + if (NotFoundPage != null) + { +#pragma warning disable CS0618 // Type or member is obsolete + if (NotFound != null) + { + throw new InvalidOperationException($"Setting {nameof(NotFound)} and {nameof(NotFoundPage)} properties simultaneously is not supported. Use either {nameof(NotFound)} or {nameof(NotFoundPage)}."); + } +#pragma warning restore CS0618 // Type or member is obsolete + if (!typeof(IComponent).IsAssignableFrom(NotFoundPage)) + { + throw new InvalidOperationException($"The type {NotFoundPage.FullName} " + + $"does not implement {typeof(IComponent).FullName}."); + } + + var routeAttributes = NotFoundPage.GetCustomAttributes(typeof(RouteAttribute), inherit: true); + if (routeAttributes.Length == 0) + { + throw new InvalidOperationException($"The type {NotFoundPage.FullName} " + + $"does not have a {typeof(RouteAttribute).FullName} applied to it."); + } + + var routeAttribute = (RouteAttribute)routeAttributes[0]; + if (routeAttribute.Template != null) + { + _notFoundPageRoute = routeAttribute.Template; + } + } + if (!_onNavigateCalled) { _onNavigateCalled = true; @@ -146,6 +186,7 @@ public async Task SetParametersAsync(ParameterView parameters) public void Dispose() { NavigationManager.LocationChanged -= OnLocationChanged; + NavigationManager.OnNotFound -= OnNotFound; if (HotReloadManager.Default.MetadataUpdateSupported) { HotReloadManager.Default.OnDeltaApplied -= ClearRouteCaches; @@ -195,10 +236,13 @@ internal virtual void Refresh(bool isNavigationIntercepted) var relativePath = NavigationManager.ToBaseRelativePath(_locationAbsolute.AsSpan()); var locationPathSpan = TrimQueryOrHash(relativePath); var locationPath = $"/{locationPathSpan}"; + ComponentsActivityHandle activityHandle; // In order to avoid routing twice we check for RouteData if (RoutingStateProvider?.RouteData is { } endpointRouteData) { + activityHandle = RecordDiagnostics(endpointRouteData.PageType.FullName, endpointRouteData.Template); + // Other routers shouldn't provide RouteData, this is specific to our router component // and must abide by our syntax and behaviors. // Other routers must create their own abstractions to flow data from their SSR routing @@ -209,6 +253,8 @@ internal virtual void Refresh(bool isNavigationIntercepted) // - Convert constrained parameters with (int, double, etc) to the target type. endpointRouteData = RouteTable.ProcessParameters(endpointRouteData); _renderHandle.Render(Found(endpointRouteData)); + + _renderHandle.ComponentActivitySource?.StopNavigateActivity(activityHandle, null); return; } @@ -225,6 +271,8 @@ internal virtual void Refresh(bool isNavigationIntercepted) $"does not implement {typeof(IComponent).FullName}."); } + activityHandle = RecordDiagnostics(context.Handler.FullName, context.Entry.RoutePattern.RawText); + Log.NavigatingToComponent(_logger, context.Handler, locationPath, _baseUri); var routeData = new RouteData( @@ -244,19 +292,40 @@ internal virtual void Refresh(bool isNavigationIntercepted) { if (!isNavigationIntercepted) { + activityHandle = RecordDiagnostics("NotFound", "NotFound"); + Log.DisplayingNotFound(_logger, locationPath, _baseUri); // We did not find a Component that matches the route. // Only show the NotFound content if the application developer programatically got us here i.e we did not // intercept the navigation. In all other cases, force a browser navigation since this could be non-Blazor content. - _renderHandle.Render(NotFound ?? DefaultNotFoundContent); + RenderNotFound(); } else { + activityHandle = RecordDiagnostics("External", "External"); + Log.NavigatingToExternalUri(_logger, _locationAbsolute, locationPath, _baseUri); NavigationManager.NavigateTo(_locationAbsolute, forceLoad: true); } } + _renderHandle.ComponentActivitySource?.StopNavigateActivity(activityHandle, null); + } + + private ComponentsActivityHandle RecordDiagnostics(string componentType, string template) + { + ComponentsActivityHandle activityHandle = default; + if (_renderHandle.ComponentActivitySource != null) + { + activityHandle = _renderHandle.ComponentActivitySource.StartNavigateActivity(componentType, template); + } + + if (_renderHandle.ComponentMetrics != null && _renderHandle.ComponentMetrics.IsNavigationEnabled) + { + _renderHandle.ComponentMetrics.Navigation(componentType, template); + } + + return activityHandle; } private static void DefaultNotFoundContent(RenderTreeBuilder builder) @@ -320,6 +389,83 @@ private void OnLocationChanged(object sender, LocationChangedEventArgs args) } } + private void OnNotFound(object sender, NotFoundEventArgs args) + { + bool renderContentIsProvided = NotFoundPage != null || args.Path != null; + if (_renderHandle.IsInitialized && renderContentIsProvided) + { + if (!string.IsNullOrEmpty(args.Path)) + { + // The path can be set by a subscriber not defined in blazor framework. + _renderHandle.Render(builder => RenderComponentByRoute(builder, args.Path)); + } + else + { + // Having the path set signals to the endpoint renderer that router handled rendering. + args.Path = _notFoundPageRoute; + RenderNotFound(); + } + Log.DisplayingNotFound(_logger, args.Path); + } + } + + internal void RenderComponentByRoute(RenderTreeBuilder builder, string route) + { + var componentType = FindComponentTypeByRoute(route); + + if (componentType is null) + { + throw new InvalidOperationException($"No component found for route '{route}'. " + + $"Ensure the route matches a component with a [Route] attribute."); + } + + builder.OpenComponent(0); + builder.AddAttribute(1, nameof(RouteView.RouteData), + new RouteData(componentType, new Dictionary())); + builder.CloseComponent(); + } + + [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + internal Type? FindComponentTypeByRoute(string route) + { + RefreshRouteTable(); + var normalizedRoute = route.StartsWith('/') ? route : $"/{route}"; + + var context = new RouteContext(normalizedRoute); + Routes.Route(context); + + if (context.Handler is not null && typeof(IComponent).IsAssignableFrom(context.Handler)) + { + return context.Handler; + } + + return null; + } + + private void RenderNotFound() + { + _renderHandle.Render(builder => + { + if (NotFoundPage != null) + { + builder.OpenComponent(0); + builder.AddAttribute(1, nameof(RouteView.RouteData), + new RouteData(NotFoundPage, _emptyParametersDictionary)); + builder.CloseComponent(); + } +#pragma warning disable CS0618 // Type or member is obsolete + else if (NotFound != null) + { + NotFound(builder); + } +#pragma warning restore CS0618 // Type or member is obsolete + else + { + DefaultNotFoundContent(builder); + } + }); + } + async Task IHandleAfterRender.OnAfterRenderAsync() { if (!_navigationInterceptionEnabled) @@ -337,6 +483,7 @@ async Task IHandleAfterRender.OnAfterRenderAsync() private static partial class Log { +#pragma warning disable CS0618 // Type or member is obsolete [LoggerMessage(1, LogLevel.Debug, $"Displaying {nameof(NotFound)} because path '{{Path}}' with base URI '{{BaseUri}}' does not match any component route", EventName = "DisplayingNotFound")] internal static partial void DisplayingNotFound(ILogger logger, string path, string baseUri); @@ -345,5 +492,9 @@ private static partial class Log [LoggerMessage(3, LogLevel.Debug, "Navigating to non-component URI '{ExternalUri}' in response to path '{Path}' with base URI '{BaseUri}'", EventName = "NavigatingToExternalUri")] internal static partial void NavigatingToExternalUri(ILogger logger, string externalUri, string path, string baseUri); + + [LoggerMessage(4, LogLevel.Debug, $"Displaying contents of {{displayedContentPath}} on request", EventName = "DisplayingNotFoundOnRequest")] + internal static partial void DisplayingNotFound(ILogger logger, string displayedContentPath); +#pragma warning restore CS0618 // Type or member is obsolete } } diff --git a/src/Components/Components/src/Routing/SupplyParameterFromQueryValueProvider.cs b/src/Components/Components/src/Routing/SupplyParameterFromQueryValueProvider.cs index 12422f013246..9e1968a48c3b 100644 --- a/src/Components/Components/src/Routing/SupplyParameterFromQueryValueProvider.cs +++ b/src/Components/Components/src/Routing/SupplyParameterFromQueryValueProvider.cs @@ -23,7 +23,7 @@ internal sealed class SupplyParameterFromQueryValueProvider(NavigationManager na public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) => parameterInfo.Attribute is SupplyParameterFromQueryAttribute; - public object? GetCurrentValue(in CascadingParameterInfo parameterInfo) + public object? GetCurrentValue(object? key, in CascadingParameterInfo parameterInfo) { TryUpdateUri(); diff --git a/src/Components/Components/test/CascadingParameterStateTest.cs b/src/Components/Components/test/CascadingParameterStateTest.cs index e055b9c70801..42e361bf7ae0 100644 --- a/src/Components/Components/test/CascadingParameterStateTest.cs +++ b/src/Components/Components/test/CascadingParameterStateTest.cs @@ -352,7 +352,7 @@ public void FindCascadingParameters_CanOverrideNonNullValueWithNull() { Assert.Equal(nameof(ComponentWithCascadingParams.CascadingParam1), match.ParameterInfo.PropertyName); Assert.Same(states[1].Component, match.ValueSupplier); - Assert.Null(match.ValueSupplier.GetCurrentValue(match.ParameterInfo)); + Assert.Null(match.ValueSupplier.GetCurrentValue(null, match.ParameterInfo)); }); } @@ -486,7 +486,7 @@ class SupplyParameterWithSingleDeliveryComponent(bool isFixed) : ComponentBase, public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) => parameterInfo.Attribute is SupplyParameterWithSingleDeliveryAttribute; - public object GetCurrentValue(in CascadingParameterInfo parameterInfo) + public object GetCurrentValue(object key, in CascadingParameterInfo parameterInfo) => throw new NotImplementedException(); public void Subscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo) diff --git a/src/Components/Components/test/CascadingParameterTest.cs b/src/Components/Components/test/CascadingParameterTest.cs index 411ed14a5e07..a083b43091d6 100644 --- a/src/Components/Components/test/CascadingParameterTest.cs +++ b/src/Components/Components/test/CascadingParameterTest.cs @@ -885,7 +885,7 @@ protected override void BuildRenderTree(RenderTreeBuilder builder) public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) => parameterInfo.Attribute is SingleDeliveryCascadingParameterAttribute; - public object GetCurrentValue(in CascadingParameterInfo parameterInfo) + public object GetCurrentValue(object key, in CascadingParameterInfo parameterInfo) => new SingleDeliveryValue(Text); public void Subscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo) @@ -1053,7 +1053,7 @@ bool ICascadingValueSupplier.CanSupplyValue(in CascadingParameterInfo parameterI return true; } - object ICascadingValueSupplier.GetCurrentValue(in CascadingParameterInfo cascadingParameterState) + object ICascadingValueSupplier.GetCurrentValue(object key, in CascadingParameterInfo cascadingParameterState) { return Value; } diff --git a/src/Components/Components/test/ComponentBaseTest.cs b/src/Components/Components/test/ComponentBaseTest.cs index b8a928a0ec41..c525dfccc1ac 100644 --- a/src/Components/Components/test/ComponentBaseTest.cs +++ b/src/Components/Components/test/ComponentBaseTest.cs @@ -372,6 +372,126 @@ public async Task DoesNotRenderAfterOnInitAsyncTaskIsCancelledUsingCancellationT Assert.NotEmpty(renderer.Batches); } + [Fact] + public async Task ErrorBoundaryHandlesOnInitializedAsyncReturnFaultedTask() + { + // Arrange + var renderer = new TestRenderer(); + TestErrorBoundary capturedBoundary = null; + + // Create root component that wraps the TestComponentErrorBuildRenderTree in an TestErrorBoundary + var rootComponent = new TestComponent(); + rootComponent.ChildContent = builder => + { + builder.OpenComponent(0); + builder.AddComponentParameter(1, nameof(TestErrorBoundary.ChildContent), (RenderFragment)(childBuilder => + { + childBuilder.OpenComponent(0); + childBuilder.AddComponentParameter(1, nameof(TestComponentErrorBuildRenderTree.FaultedTaskOnInitializedAsync), true); + childBuilder.CloseComponent(); + })); + builder.AddComponentReferenceCapture(2, inst => capturedBoundary = (TestErrorBoundary)inst); + builder.CloseComponent(); + }; + + // Act + var rootComponentId = renderer.AssignRootComponentId(rootComponent); + await renderer.RenderRootComponentAsync(rootComponentId); + + // Assert + Assert.NotNull(capturedBoundary); + Assert.NotNull(capturedBoundary!.ReceivedException); + Assert.Equal(typeof(InvalidTimeZoneException), capturedBoundary!.ReceivedException.GetType()); + } + + [Fact] + public async Task ErrorBoundaryHandlesCallOnParametersSetAsyncReturnFaultedTask() + { + // Arrange + var renderer = new TestRenderer(); + TestErrorBoundary capturedBoundary = null; + + // Create root component that wraps the TestComponentErrorBuildRenderTree in an TestErrorBoundary + var rootComponent = new TestComponent(); + rootComponent.ChildContent = builder => + { + builder.OpenComponent(0); + builder.AddComponentParameter(1, nameof(TestErrorBoundary.ChildContent), (RenderFragment)(childBuilder => + { + childBuilder.OpenComponent(0); + childBuilder.AddComponentParameter(1, nameof(TestComponentErrorBuildRenderTree.FaultedTaskOnParametersSetAsync), true); + childBuilder.CloseComponent(); + })); + builder.AddComponentReferenceCapture(2, inst => capturedBoundary = (TestErrorBoundary)inst); + builder.CloseComponent(); + }; + + // Act + var rootComponentId = renderer.AssignRootComponentId(rootComponent); + await renderer.RenderRootComponentAsync(rootComponentId); + + // Assert + Assert.NotNull(capturedBoundary); + Assert.NotNull(capturedBoundary!.ReceivedException); + Assert.Equal(typeof(InvalidTimeZoneException), capturedBoundary!.ReceivedException.GetType()); + } + + [Fact] + public async Task ComponentBaseDoesntRenderWhenOnInitializedAsyncFaultedTask() + { + // Arrange + var renderer = new TestRenderer(); + renderer.ShouldHandleExceptions = true; + TestComponentErrorBuildRenderTree testComponentErrorBuildRenderTree = null; + + // Create root component that wraps the TestComponentErrorBuildRenderTree in an TestErrorBoundary + var rootComponent = new TestComponent(); + rootComponent.ChildContent = builder => + { + builder.OpenComponent(0); + builder.AddComponentParameter(1, nameof(TestComponentErrorBuildRenderTree.FaultedTaskOnInitializedAsync), true); + builder.AddComponentReferenceCapture(2, inst => testComponentErrorBuildRenderTree = (TestComponentErrorBuildRenderTree)inst); + builder.CloseComponent(); + }; + + // Act + var rootComponentId = renderer.AssignRootComponentId(rootComponent); + await renderer.RenderRootComponentAsync(rootComponentId); + + // Assert + Assert.IsType(renderer.HandledExceptions[0]); + Assert.NotNull(testComponentErrorBuildRenderTree); + Assert.Equal(0, testComponentErrorBuildRenderTree.StateHasChangedCalled); + } + + [Fact] + public async Task ComponentBaseDoesntRenderWhenOnSetParametersSetAsyncFaultedTask() + { + // Arrange + var renderer = new TestRenderer(); + renderer.ShouldHandleExceptions = true; + TestComponentErrorBuildRenderTree testComponentErrorBuildRenderTree = null; + + // Create root component that wraps the TestComponentErrorBuildRenderTree in an TestErrorBoundary + var rootComponent = new TestComponent(); + rootComponent.ChildContent = builder => + { + builder.OpenComponent(0); + builder.AddComponentParameter(1, nameof(TestComponentErrorBuildRenderTree.FaultedTaskOnParametersSetAsync), true); + builder.AddComponentReferenceCapture(2, inst => testComponentErrorBuildRenderTree = (TestComponentErrorBuildRenderTree)inst); + builder.CloseComponent(); + }; + + // Act + var rootComponentId = renderer.AssignRootComponentId(rootComponent); + await renderer.RenderRootComponentAsync(rootComponentId); + + // Assert + Assert.IsType(renderer.HandledExceptions[0]); + Assert.NotNull(testComponentErrorBuildRenderTree); + Assert.Equal(0, testComponentErrorBuildRenderTree.StateHasChangedCalled); + } + [Fact] public async Task DoesNotRenderAfterOnParametersSetAsyncTaskIsCanceled() { @@ -491,11 +611,20 @@ private class TestComponent : ComponentBase public int Counter { get; set; } + public RenderFragment ChildContent { get; set; } + protected override void BuildRenderTree(RenderTreeBuilder builder) { - builder.OpenElement(0, "p"); - builder.AddContent(1, Counter); - builder.CloseElement(); + if (ChildContent != null) + { + builder.AddContent(0, ChildContent); + } + else + { + builder.OpenElement(0, "p"); + builder.AddContent(1, Counter); + builder.CloseElement(); + } } protected override void OnInitialized() @@ -570,4 +699,65 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } } + + private class TestErrorBoundary : ErrorBoundaryBase + { + public Exception ReceivedException => CurrentException; + + protected override Task OnErrorAsync(Exception exception) + { + return Task.CompletedTask; + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + if (CurrentException == null) + { + builder.AddContent(0, ChildContent); + } + else + { + builder.OpenElement(2, "div"); + builder.AddAttribute(3, "class", "blazor-error-boundary"); + builder.CloseElement(); + } + } + } + + private class TestComponentErrorBuildRenderTree : ComponentBase + { + [Parameter] public bool FaultedTaskOnInitializedAsync { get; set; } = false; + [Parameter] public bool FaultedTaskOnParametersSetAsync { get; set; } = false; + + public int StateHasChangedCalled { get; set; } = 0; + + protected new void StateHasChanged() + { + StateHasChangedCalled++; + base.StateHasChanged(); + } + + protected override void BuildRenderTree(RenderTreeBuilder builder) + { + throw new InvalidOperationException("Error in BuildRenderTree"); + } + + protected override Task OnInitializedAsync() + { + if (FaultedTaskOnInitializedAsync) + { + return Task.FromException(new InvalidTimeZoneException()); + } + return Task.CompletedTask; + } + + protected override Task OnParametersSetAsync() + { + if (FaultedTaskOnParametersSetAsync) + { + return Task.FromException(new InvalidTimeZoneException()); + } + return Task.CompletedTask; + } + } } diff --git a/src/Components/Components/test/ComponentsActivitySourceTest.cs b/src/Components/Components/test/ComponentsActivitySourceTest.cs new file mode 100644 index 000000000000..cccb3fb79170 --- /dev/null +++ b/src/Components/Components/test/ComponentsActivitySourceTest.cs @@ -0,0 +1,202 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.AspNetCore.Components.Infrastructure; + +namespace Microsoft.AspNetCore.Components; + +public class ComponentsActivitySourceTest +{ + private readonly ActivityListener _listener; + private readonly List _activities; + + public ComponentsActivitySourceTest() + { + _activities = new List(); + _listener = new ActivityListener + { + ShouldListenTo = source => source.Name == ComponentsActivitySource.Name, + Sample = (ref ActivityCreationOptions options) => ActivitySamplingResult.AllData, + ActivityStarted = activity => _activities.Add(activity), + ActivityStopped = activity => { } + }; + ActivitySource.AddActivityListener(_listener); + } + + [Fact] + public void Constructor_CreatesActivitySourceCorrectly() + { + // Arrange & Act + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + + // Assert + Assert.NotNull(componentsActivitySource); + } + + [Fact] + public void StartRouteActivity_CreatesAndStartsActivity() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + var componentType = "TestComponent"; + var route = "/test-route"; + + // First set up a circuit context + linkstore.SetActivityContext(ComponentsActivityLinkStore.Circuit, new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), new KeyValuePair("aspnetcore.components.circuit.id", "test-circuit-id")); + + // Act + var activityHandle = componentsActivitySource.StartNavigateActivity(componentType, route); + var activity = activityHandle.Activity; + + // Assert + Assert.NotNull(activity); + Assert.Equal(ComponentsActivitySource.OnRouteName, activity.OperationName); + Assert.Equal($"Route {route} -> {componentType}", activity.DisplayName); + Assert.Equal(ActivityKind.Internal, activity.Kind); + Assert.True(activity.IsAllDataRequested); + Assert.Equal(componentType, activity.GetTagItem("aspnetcore.components.type")); + Assert.Equal(route, activity.GetTagItem("aspnetcore.components.route")); + Assert.False(activity.IsStopped); + + componentsActivitySource.StopNavigateActivity(activityHandle, null); + Assert.True(activity.IsStopped); + Assert.Equal("test-circuit-id", activity.GetTagItem("aspnetcore.components.circuit.id")); + Assert.Single(activity.Links); + + } + + [Fact] + public void StartEventActivity_CreatesAndStartsActivity() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + var componentType = "TestComponent"; + var methodName = "OnClick"; + var attributeName = "onclick"; + + // First set up a circuit and route context + linkstore.SetActivityContext(ComponentsActivityLinkStore.Circuit, default, new KeyValuePair("aspnetcore.components.circuit.id", "test-circuit-id")); + componentsActivitySource.StartNavigateActivity("ParentComponent", "/parent"); + + // Act + var activityHandle = ComponentsActivitySource.StartHandleEventActivity(componentType, methodName, attributeName); + var activity = activityHandle.Activity; + + // Assert + Assert.NotNull(activity); + Assert.Equal(ComponentsActivitySource.OnEventName, activity.OperationName); + Assert.Equal($"Event {attributeName} -> {componentType}.{methodName}", activity.DisplayName); + Assert.Equal(ActivityKind.Internal, activity.Kind); + Assert.True(activity.IsAllDataRequested); + Assert.Equal(componentType, activity.GetTagItem("aspnetcore.components.type")); + Assert.Equal(methodName, activity.GetTagItem("code.function.name")); + Assert.Equal(attributeName, activity.GetTagItem("aspnetcore.components.attribute.name")); + Assert.False(activity.IsStopped); + + componentsActivitySource.StopNavigateActivity(activityHandle, null); + Assert.True(activity.IsStopped); + Assert.Equal("test-circuit-id", activity.GetTagItem("aspnetcore.components.circuit.id")); + Assert.Empty(activity.Links); + } + + [Fact] + public void FailEventActivity_SetsErrorStatusAndStopsActivity() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick"); + var activity = activityHandle.Activity; + var exception = new InvalidOperationException("Test exception"); + + // Act + componentsActivitySource.StopHandleEventActivity(activityHandle, exception); + + // Assert + Assert.True(activity!.IsStopped); + Assert.Equal(ActivityStatusCode.Error, activity.Status); + Assert.Equal(exception.GetType().FullName, activity.GetTagItem("error.type")); + } + + [Fact] + public async Task CaptureEventStopAsync_StopsActivityOnSuccessfulTask() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick"); + var activity = activityHandle.Activity; + var task = Task.CompletedTask; + + // Act + await componentsActivitySource.CaptureHandleEventStopAsync(task, activityHandle); + + // Assert + Assert.True(activity!.IsStopped); + Assert.Equal(ActivityStatusCode.Unset, activity.Status); + } + + [Fact] + public async Task CaptureEventStopAsync_FailsActivityOnException() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + var activityHandle = ComponentsActivitySource.StartHandleEventActivity("TestComponent", "OnClick", "onclick"); + var activity = activityHandle.Activity; + var exception = new InvalidOperationException("Test exception"); + var task = Task.FromException(exception); + + // Act + await componentsActivitySource.CaptureHandleEventStopAsync(task, activityHandle); + + // Assert + Assert.True(activity!.IsStopped); + Assert.Equal(ActivityStatusCode.Error, activity.Status); + Assert.Equal(exception.GetType().FullName, activity.GetTagItem("error.type")); + } + + [Fact] + public void StartRouteActivity_HandlesNullValues() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + + // Act + var activityHandle = componentsActivitySource.StartNavigateActivity(null, null); + var activity = activityHandle.Activity; + + // Assert + Assert.NotNull(activity); + Assert.Equal("Route [unknown path] -> [unknown component]", activity.DisplayName); + } + + [Fact] + public void StartEventActivity_HandlesNullValues() + { + // Arrange + var componentsActivitySource = new ComponentsActivitySource(); + var linkstore = new ComponentsActivityLinkStore(null); + componentsActivitySource.Init(linkstore); + + // Act + var activityHandle = ComponentsActivitySource.StartHandleEventActivity(null, null, null); + var activity = activityHandle.Activity; + + // Assert + Assert.NotNull(activity); + Assert.Equal("Event [unknown attribute] -> [unknown component].[unknown method]", activity.DisplayName); + } +} diff --git a/src/Components/Components/test/ComponentsMetricsTest.cs b/src/Components/Components/test/ComponentsMetricsTest.cs new file mode 100644 index 000000000000..195b2d316efa --- /dev/null +++ b/src/Components/Components/test/ComponentsMetricsTest.cs @@ -0,0 +1,533 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Diagnostics.Metrics; +using Microsoft.Extensions.Diagnostics.Metrics.Testing; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.InternalTesting; +using Moq; + +namespace Microsoft.AspNetCore.Components; + +public class ComponentsMetricsTest +{ + private readonly TestMeterFactory _meterFactory; + + public ComponentsMetricsTest() + { + _meterFactory = new TestMeterFactory(); + } + + [Fact] + public void Constructor_CreatesMetersCorrectly() + { + // Arrange & Act + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Assert + Assert.Equal(2, _meterFactory.Meters.Count); + Assert.Contains(_meterFactory.Meters, m => m.Name == ComponentsMetrics.MeterName); + Assert.Contains(_meterFactory.Meters, m => m.Name == ComponentsMetrics.LifecycleMeterName); + } + + [Fact] + public void Navigation_RecordsMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var navigationCounter = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.navigate"); + + // Act + componentsMetrics.Navigation("TestComponent", "/test-route"); + + // Assert + var measurements = navigationCounter.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.Equal(1, measurements[0].Value); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("/test-route", Assert.Contains("aspnetcore.components.route", measurements[0].Tags)); + } + + [Fact] + public void IsNavigationEnabled_ReturnsCorrectState() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Create a collector to ensure the meter is enabled + using var navigationCounter = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.navigate"); + + // Act & Assert + Assert.True(componentsMetrics.IsNavigationEnabled); + } + + [Fact] + public async Task CaptureEventDuration_RecordsSuccessMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureEventDuration(Task.CompletedTask, startTimestamp, + "TestComponent", "OnClick", "onclick"); + + // Assert + var measurements = eventDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("OnClick", Assert.Contains("code.function.name", measurements[0].Tags)); + Assert.Equal("onclick", Assert.Contains("aspnetcore.components.attribute.name", measurements[0].Tags)); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } + + [Fact] + public async Task CaptureEventDuration_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureEventDuration(Task.FromException(new InvalidOperationException()), + startTimestamp, "TestComponent", "OnClick", "onclick"); + + // Assert + var measurements = eventDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("OnClick", Assert.Contains("code.function.name", measurements[0].Tags)); + Assert.Equal("onclick", Assert.Contains("aspnetcore.components.attribute.name", measurements[0].Tags)); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void FailEventSync_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + var exception = new InvalidOperationException(); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + componentsMetrics.FailEventSync(exception, startTimestamp, + "TestComponent", "OnClick", "onclick"); + + // Assert + var measurements = eventDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("OnClick", Assert.Contains("code.function.name", measurements[0].Tags)); + Assert.Equal("onclick", Assert.Contains("aspnetcore.components.attribute.name", measurements[0].Tags)); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void IsEventEnabled_ReturnsCorrectState() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Create a collector to ensure the meter is enabled + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + + // Act & Assert + Assert.True(componentsMetrics.IsEventEnabled); + } + + [Fact] + public async Task CaptureParametersDuration_RecordsSuccessMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureParametersDuration(Task.CompletedTask, startTimestamp, "TestComponent"); + + // Assert + var measurements = parametersDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } + + [Fact] + public async Task CaptureParametersDuration_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureParametersDuration(Task.FromException(new InvalidOperationException()), + startTimestamp, "TestComponent"); + + // Assert + var measurements = parametersDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void FailParametersSync_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + var exception = new InvalidOperationException(); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + componentsMetrics.FailParametersSync(exception, startTimestamp, "TestComponent"); + + // Assert + var measurements = parametersDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", measurements[0].Tags)); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void IsParametersEnabled_ReturnsCorrectState() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Create a collector to ensure the meter is enabled + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + + // Act & Assert + Assert.True(componentsMetrics.IsParametersEnabled); + } + + [Fact] + public async Task CaptureBatchDuration_RecordsSuccessMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureBatchDuration(Task.CompletedTask, startTimestamp, 25); + + // Assert + var measurements = batchDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } + + [Fact] + public async Task CaptureBatchDuration_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await Task.Delay(10); // Small delay to ensure measureable duration + await componentsMetrics.CaptureBatchDuration(Task.FromException(new InvalidOperationException()), + startTimestamp, 25); + + // Assert + var measurements = batchDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void FailBatchSync_RecordsErrorMetric() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + var exception = new InvalidOperationException(); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + componentsMetrics.FailBatchSync(exception, startTimestamp); + + // Assert + var measurements = batchDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value > 0); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public void IsBatchEnabled_ReturnsCorrectState() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Create a collector to ensure the meter is enabled + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + + // Act & Assert + Assert.True(componentsMetrics.IsBatchEnabled); + } + + [Fact] + public async Task ComponentLifecycle_RecordsAllMetricsCorrectly() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var navigationCounter = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.navigate"); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + using var batchSizeHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.size"); + + // Act - Simulate a component lifecycle + // 1. Navigation + componentsMetrics.Navigation("TestComponent", "/test-route"); + + // 2. Parameters update + var startTimestamp1 = Stopwatch.GetTimestamp(); + await Task.Delay(10); + await componentsMetrics.CaptureParametersDuration(Task.CompletedTask, startTimestamp1, "TestComponent"); + + // 3. Event handler + var startTimestamp2 = Stopwatch.GetTimestamp(); + await Task.Delay(10); + await componentsMetrics.CaptureEventDuration(Task.CompletedTask, startTimestamp2, + "TestComponent", "OnClick", "onclick"); + + // 4. Rendering batch + var startTimestamp3 = Stopwatch.GetTimestamp(); + await Task.Delay(10); + await componentsMetrics.CaptureBatchDuration(Task.CompletedTask, startTimestamp3, 15); + + // Assert + var navigationMeasurements = navigationCounter.GetMeasurementSnapshot(); + var eventMeasurements = eventDurationHistogram.GetMeasurementSnapshot(); + var parametersMeasurements = parametersDurationHistogram.GetMeasurementSnapshot(); + var batchMeasurements = batchDurationHistogram.GetMeasurementSnapshot(); + var batchSizeMeasurements = batchSizeHistogram.GetMeasurementSnapshot(); + + Assert.Single(navigationMeasurements); + Assert.Single(eventMeasurements); + Assert.Single(parametersMeasurements); + Assert.Single(batchMeasurements); + Assert.Single(batchSizeMeasurements); + + // Check navigation + Assert.Equal(1, navigationMeasurements[0].Value); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", navigationMeasurements[0].Tags)); + Assert.Equal("/test-route", Assert.Contains("aspnetcore.components.route", navigationMeasurements[0].Tags)); + + // Check event duration + Assert.True(eventMeasurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", eventMeasurements[0].Tags)); + Assert.Equal("OnClick", Assert.Contains("code.function.name", eventMeasurements[0].Tags)); + Assert.Equal("onclick", Assert.Contains("aspnetcore.components.attribute.name", eventMeasurements[0].Tags)); + + // Check parameters duration + Assert.True(parametersMeasurements[0].Value > 0); + Assert.Equal("TestComponent", Assert.Contains("aspnetcore.components.type", parametersMeasurements[0].Tags)); + + // Check batch duration + Assert.True(batchMeasurements[0].Value > 0); + Assert.True(batchSizeMeasurements[0].Value > 0); + } + + [Fact] + public void Dispose_DisposesAllMeters() + { + // This test verifies that disposing ComponentsMetrics properly disposes its meters + // Since we can't easily test disposal directly, we'll verify meters are created and assume + // the dispose method works as expected + + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + + // Act - We're not actually asserting anything here, just ensuring no exceptions are thrown + componentsMetrics.Dispose(); + + // Assert - MeterFactory.Create was called twice in constructor + Assert.Equal(2, _meterFactory.Meters.Count); + } + + [Fact] + public void Navigation_WithNullValues_OmitsTags() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var navigationCounter = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.navigate"); + + // Act + componentsMetrics.Navigation(null, null); + + // Assert + var measurements = navigationCounter.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.Equal(1, measurements[0].Value); + Assert.DoesNotContain("aspnetcore.components.type", measurements[0].Tags); + Assert.DoesNotContain("aspnetcore.components.route", measurements[0].Tags); + } + + [Fact] + public async Task CaptureEventDuration_WithNullValues_OmitsTags() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await componentsMetrics.CaptureEventDuration(Task.CompletedTask, startTimestamp, null, null, null); + + // Assert + var measurements = eventDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value >= 0); + Assert.DoesNotContain("aspnetcore.components.type", measurements[0].Tags); + Assert.DoesNotContain("code.function.name", measurements[0].Tags); + Assert.DoesNotContain("aspnetcore.components.attribute.name", measurements[0].Tags); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } + + [Fact] + public void FailEventSync_WithNullValues_OmitsTags() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var eventDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.MeterName, "aspnetcore.components.handle_event.duration"); + var exception = new InvalidOperationException(); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + componentsMetrics.FailEventSync(exception, startTimestamp, null, null, null); + + // Assert + var measurements = eventDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value >= 0); + Assert.DoesNotContain("aspnetcore.components.type", measurements[0].Tags); + Assert.DoesNotContain("code.function.name", measurements[0].Tags); + Assert.DoesNotContain("aspnetcore.components.attribute.name", measurements[0].Tags); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public async Task CaptureParametersDuration_WithNullValues_OmitsTags() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await componentsMetrics.CaptureParametersDuration(Task.CompletedTask, startTimestamp, null); + + // Assert + var measurements = parametersDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value >= 0); + Assert.DoesNotContain("aspnetcore.components.type", measurements[0].Tags); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } + + [Fact] + public void FailParametersSync_WithNullValues_OmitsTags() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var parametersDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.update_parameters.duration"); + var exception = new InvalidOperationException(); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + componentsMetrics.FailParametersSync(exception, startTimestamp, null); + + // Assert + var measurements = parametersDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value >= 0); + Assert.DoesNotContain("aspnetcore.components.type", measurements[0].Tags); + Assert.Equal("System.InvalidOperationException", Assert.Contains("error.type", measurements[0].Tags)); + } + + [Fact] + public async Task CaptureBatchDuration_WithoutException_OmitsErrorTag() + { + // Arrange + var componentsMetrics = new ComponentsMetrics(_meterFactory); + using var batchDurationHistogram = new MetricCollector(_meterFactory, + ComponentsMetrics.LifecycleMeterName, "aspnetcore.components.render_diff.duration"); + + // Act + var startTimestamp = Stopwatch.GetTimestamp(); + await componentsMetrics.CaptureBatchDuration(Task.CompletedTask, startTimestamp, 25); + + // Assert + var measurements = batchDurationHistogram.GetMeasurementSnapshot(); + + Assert.Single(measurements); + Assert.True(measurements[0].Value >= 0); + Assert.DoesNotContain("error.type", measurements[0].Tags); + } +} diff --git a/src/Components/Components/test/EventCallbackTest.cs b/src/Components/Components/test/EventCallbackTest.cs index faa6909d04ca..89fc904b72ac 100644 --- a/src/Components/Components/test/EventCallbackTest.cs +++ b/src/Components/Components/test/EventCallbackTest.cs @@ -271,6 +271,24 @@ await Assert.ThrowsAsync(() => }); } + [Fact] + public void EventCallbackOf_Equals_WhenANewDelegateIsCreated() + { + // Arrange + var component = new EventCountingComponent(); + + var delegate_1 = (EventArgs _) => { }; + var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action), delegate_1.Target, delegate_1.Method); + var eventcallback_1 = new EventCallback(component, delegate_1); + var eventcallback_2 = new EventCallback(component, delegate_2); + + // Act + var result = eventcallback_1.Equals(eventcallback_2); + + // Assert + Assert.True(result); + } + [Fact] public async Task EventCallbackOfT_Action_Null() { @@ -415,6 +433,24 @@ public async Task EventCallbackOfT_FuncTTask_Arg() Assert.Equal(1, component.Count); } + [Fact] + public void EventCallbackOfT_Equals_WhenANewDelegateIsCreated() + { + // Arrange + var component = new EventCountingComponent(); + + var delegate_1 = (EventArgs _) => { }; + var delegate_2 = (MulticastDelegate)MulticastDelegate.CreateDelegate(typeof(Action), delegate_1.Target, delegate_1.Method); + var eventcallback_1 = new EventCallback(component, delegate_1); + var eventcallback_2 = new EventCallback(component, delegate_2); + + // Act + var result = eventcallback_1.Equals(eventcallback_2); + + // Assert + Assert.True(result); + } + private class EventCountingComponent : IComponent, IHandleEvent { public int Count; diff --git a/src/Components/Components/test/IPersistentComponentStateSerializerTests.cs b/src/Components/Components/test/IPersistentComponentStateSerializerTests.cs new file mode 100644 index 000000000000..d8c1311fec9a --- /dev/null +++ b/src/Components/Components/test/IPersistentComponentStateSerializerTests.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; +using System.Text; +using System.Text.Json; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging.Abstractions; + +namespace Microsoft.AspNetCore.Components; diff --git a/src/Components/Components/test/LayoutViewTest.cs b/src/Components/Components/test/LayoutViewTest.cs index ff4971690f4e..e8c103912243 100644 --- a/src/Components/Components/test/LayoutViewTest.cs +++ b/src/Components/Components/test/LayoutViewTest.cs @@ -178,7 +178,7 @@ public void CanChangeContentWithSameLayout() // Assert Assert.Equal(2, _renderer.Batches.Count); var batch = _renderer.Batches[1]; - Assert.Equal(0, batch.DisposedComponentIDs.Count); + Assert.Empty(batch.DisposedComponentIDs); Assert.Collection(batch.DiffsInOrder, diff => Assert.Empty(diff.Edits), // LayoutView rerendered, but with no changes diff => Assert.Empty(diff.Edits), // RootLayout rerendered, but with no changes @@ -220,7 +220,7 @@ public void CanChangeLayout() Assert.True(setParametersTask2.IsCompletedSuccessfully); Assert.Equal(2, _renderer.Batches.Count); var batch = _renderer.Batches[1]; - Assert.Equal(1, batch.DisposedComponentIDs.Count); // Disposes NestedLayout + Assert.Single(batch.DisposedComponentIDs); // Disposes NestedLayout Assert.Collection(batch.DiffsInOrder, diff => Assert.Empty(diff.Edits), // LayoutView rerendered, but with no changes diff => diff --git a/src/Components/Components/test/Lifetime/ComponentApplicationStateTest.cs b/src/Components/Components/test/Lifetime/ComponentApplicationStateTest.cs deleted file mode 100644 index bed42d42dfbf..000000000000 --- a/src/Components/Components/test/Lifetime/ComponentApplicationStateTest.cs +++ /dev/null @@ -1,172 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Text.Json; - -namespace Microsoft.AspNetCore.Components; - -public class ComponentApplicationStateTest -{ - [Fact] - public void InitializeExistingState_SetupsState() - { - // Arrange - var applicationState = new PersistentComponentState(new Dictionary(), new List()); - var existingState = new Dictionary - { - ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(new byte[] { 1, 2, 3, 4 }) - }; - - // Act - applicationState.InitializeExistingState(existingState); - - // Assert - Assert.True(applicationState.TryTakeFromJson("MyState", out var existing)); - Assert.Equal(new byte[] { 1, 2, 3, 4 }, existing); - } - - [Fact] - public void InitializeExistingState_ThrowsIfAlreadyInitialized() - { - // Arrange - var applicationState = new PersistentComponentState(new Dictionary(), new List()); - var existingState = new Dictionary - { - ["MyState"] = new byte[] { 1, 2, 3, 4 } - }; - - applicationState.InitializeExistingState(existingState); - - // Act & Assert - Assert.Throws(() => applicationState.InitializeExistingState(existingState)); - } - - [Fact] - public void TryRetrieveState_ReturnsStateWhenItExists() - { - // Arrange - var applicationState = new PersistentComponentState(new Dictionary(), new List()); - var existingState = new Dictionary - { - ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(new byte[] { 1, 2, 3, 4 }) - }; - - // Act - applicationState.InitializeExistingState(existingState); - - // Assert - Assert.True(applicationState.TryTakeFromJson("MyState", out var existing)); - Assert.Equal(new byte[] { 1, 2, 3, 4 }, existing); - Assert.False(applicationState.TryTakeFromJson("MyState", out var gone)); - } - - [Fact] - public void PersistState_SavesDataToTheStoreAsync() - { - // Arrange - var currentState = new Dictionary(); - var applicationState = new PersistentComponentState(currentState, new List()) - { - PersistingState = true - }; - var myState = new byte[] { 1, 2, 3, 4 }; - - // Act - applicationState.PersistAsJson("MyState", myState); - - // Assert - Assert.True(currentState.TryGetValue("MyState", out var stored)); - Assert.Equal(myState, JsonSerializer.Deserialize(stored)); - } - - [Fact] - public void PersistState_ThrowsForDuplicateKeys() - { - // Arrange - var currentState = new Dictionary(); - var applicationState = new PersistentComponentState(currentState, new List()) - { - PersistingState = true - }; - var myState = new byte[] { 1, 2, 3, 4 }; - - applicationState.PersistAsJson("MyState", myState); - - // Act & Assert - Assert.Throws(() => applicationState.PersistAsJson("MyState", myState)); - } - - [Fact] - public void PersistAsJson_SerializesTheDataToJsonAsync() - { - // Arrange - var currentState = new Dictionary(); - var applicationState = new PersistentComponentState(currentState, new List()) - { - PersistingState = true - }; - var myState = new byte[] { 1, 2, 3, 4 }; - - // Act - applicationState.PersistAsJson("MyState", myState); - - // Assert - Assert.True(currentState.TryGetValue("MyState", out var stored)); - Assert.Equal(myState, JsonSerializer.Deserialize(stored)); - } - - [Fact] - public void PersistAsJson_NullValueAsync() - { - // Arrange - var currentState = new Dictionary(); - var applicationState = new PersistentComponentState(currentState, new List()) - { - PersistingState = true - }; - - // Act - applicationState.PersistAsJson("MyState", null); - - // Assert - Assert.True(currentState.TryGetValue("MyState", out var stored)); - Assert.Null(JsonSerializer.Deserialize(stored)); - } - - [Fact] - public void TryRetrieveFromJson_DeserializesTheDataFromJson() - { - // Arrange - var myState = new byte[] { 1, 2, 3, 4 }; - var serialized = JsonSerializer.SerializeToUtf8Bytes(myState); - var existingState = new Dictionary() { ["MyState"] = serialized }; - var applicationState = new PersistentComponentState(new Dictionary(), new List()); - - applicationState.InitializeExistingState(existingState); - - // Act - Assert.True(applicationState.TryTakeFromJson("MyState", out var stored)); - - // Assert - Assert.Equal(myState, stored); - Assert.False(applicationState.TryTakeFromJson("MyState", out _)); - } - - [Fact] - public void TryRetrieveFromJson_NullValue() - { - // Arrange - var serialized = JsonSerializer.SerializeToUtf8Bytes(null); - var existingState = new Dictionary() { ["MyState"] = serialized }; - var applicationState = new PersistentComponentState(new Dictionary(), new List()); - - applicationState.InitializeExistingState(existingState); - - // Act - Assert.True(applicationState.TryTakeFromJson("MyState", out var stored)); - - // Assert - Assert.Null(stored); - Assert.False(applicationState.TryTakeFromJson("MyState", out _)); - } -} diff --git a/src/Components/Components/test/Lifetime/ComponentStatePersistenceManagerTest.cs b/src/Components/Components/test/Lifetime/ComponentStatePersistenceManagerTest.cs deleted file mode 100644 index 02b104d41f43..000000000000 --- a/src/Components/Components/test/Lifetime/ComponentStatePersistenceManagerTest.cs +++ /dev/null @@ -1,317 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Buffers; -using System.Collections; -using System.Text.Json; -using Microsoft.AspNetCore.Components.Infrastructure; -using Microsoft.AspNetCore.Components.RenderTree; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Logging.Testing; - -namespace Microsoft.AspNetCore.Components; - -public class ComponentStatePersistenceManagerTest -{ - [Fact] - public async Task RestoreStateAsync_InitializesStateWithDataFromTheProvidedStore() - { - // Arrange - var data = new byte[] { 0, 1, 2, 3, 4 }; - var state = new Dictionary - { - ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(data) - }; - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - - // Act - await lifetime.RestoreStateAsync(store); - - // Assert - Assert.True(lifetime.State.TryTakeFromJson("MyState", out var retrieved)); - Assert.Empty(state); - Assert.Equal(data, retrieved); - } - - [Fact] - public async Task RestoreStateAsync_ThrowsOnDoubleInitialization() - { - // Arrange - var state = new Dictionary - { - ["MyState"] = [0, 1, 2, 3, 4] - }; - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - - await lifetime.RestoreStateAsync(store); - - // Assert - await Assert.ThrowsAsync(() => lifetime.RestoreStateAsync(store)); - } - - [Fact] - public async Task PersistStateAsync_ThrowsWhenCallbackRenerModeCannotBeInferred() - { - // Arrange - var state = new Dictionary(); - var store = new CompositeTestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - - var renderer = new TestRenderer(); - var data = new byte[] { 1, 2, 3, 4 }; - - lifetime.State.RegisterOnPersisting(() => - { - lifetime.State.PersistAsJson("MyState", new byte[] { 1, 2, 3, 4 }); - return Task.CompletedTask; - }); - - // Act - // Assert - await Assert.ThrowsAsync(() => lifetime.PersistStateAsync(store, renderer)); - } - - [Fact] - public async Task PersistStateAsync_SavesPersistedStateToTheStore() - { - // Arrange - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - - var renderer = new TestRenderer(); - var data = new byte[] { 1, 2, 3, 4 }; - - lifetime.State.RegisterOnPersisting(() => - { - lifetime.State.PersistAsJson("MyState", new byte[] { 1, 2, 3, 4 }); - return Task.CompletedTask; - }, new TestRenderMode()); - - // Act - await lifetime.PersistStateAsync(store, renderer); - - // Assert - Assert.True(store.State.TryGetValue("MyState", out var persisted)); - Assert.Equal(data, JsonSerializer.Deserialize(persisted.ToArray())); - } - - [Fact] - public async Task PersistStateAsync_InvokesPauseCallbacksDuringPersist() - { - // Arrange - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - var renderer = new TestRenderer(); - var data = new byte[] { 1, 2, 3, 4 }; - var invoked = false; - - lifetime.State.RegisterOnPersisting(() => { invoked = true; return default; }, new TestRenderMode()); - - // Act - await lifetime.PersistStateAsync(store, renderer); - - // Assert - Assert.True(invoked); - } - - [Fact] - public async Task PersistStateAsync_FiresCallbacksInParallel() - { - // Arrange - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - var renderer = new TestRenderer(); - - var sequence = new List { }; - - var tcs = new TaskCompletionSource(); - var tcs2 = new TaskCompletionSource(); - - lifetime.State.RegisterOnPersisting(async () => { sequence.Add(1); await tcs.Task; sequence.Add(3); }, new TestRenderMode()); - lifetime.State.RegisterOnPersisting(async () => { sequence.Add(2); await tcs2.Task; sequence.Add(4); }, new TestRenderMode()); - - // Act - var persistTask = lifetime.PersistStateAsync(store, renderer); - tcs.SetResult(); - tcs2.SetResult(); - - await persistTask; - - // Assert - Assert.Equal(new[] { 1, 2, 3, 4 }, sequence); - } - - [Fact] - public async Task PersistStateAsync_CallbacksAreRemovedWhenSubscriptionsAreDisposed() - { - // Arrange - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(NullLogger.Instance); - var renderer = new TestRenderer(); - - var sequence = new List { }; - - var tcs = new TaskCompletionSource(); - var tcs2 = new TaskCompletionSource(); - - var subscription1 = lifetime.State.RegisterOnPersisting(async () => { sequence.Add(1); await tcs.Task; sequence.Add(3); }); - var subscription2 = lifetime.State.RegisterOnPersisting(async () => { sequence.Add(2); await tcs2.Task; sequence.Add(4); }); - - // Act - subscription1.Dispose(); - subscription2.Dispose(); - - var persistTask = lifetime.PersistStateAsync(store, renderer); - tcs.SetResult(); - tcs2.SetResult(); - - await persistTask; - - // Assert - Assert.Empty(sequence); - } - - [Fact] - public async Task PersistStateAsync_ContinuesInvokingPauseCallbacksDuringPersistIfACallbackThrows() - { - // Arrange - var sink = new TestSink(); - var loggerFactory = new TestLoggerFactory(sink, true); - var logger = loggerFactory.CreateLogger(); - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(logger); - var renderer = new TestRenderer(); - var data = new byte[] { 1, 2, 3, 4 }; - var invoked = false; - - lifetime.State.RegisterOnPersisting(() => throw new InvalidOperationException(), new TestRenderMode()); - lifetime.State.RegisterOnPersisting(() => { invoked = true; return Task.CompletedTask; }, new TestRenderMode()); - - // Act - await lifetime.PersistStateAsync(store, renderer); - - // Assert - Assert.True(invoked); - var log = Assert.Single(sink.Writes); - Assert.Equal(LogLevel.Error, log.LogLevel); - } - - [Fact] - public async Task PersistStateAsync_ContinuesInvokingPauseCallbacksDuringPersistIfACallbackThrowsAsynchonously() - { - // Arrange - var sink = new TestSink(); - var loggerFactory = new TestLoggerFactory(sink, true); - var logger = loggerFactory.CreateLogger(); - var state = new Dictionary(); - var store = new TestStore(state); - var lifetime = new ComponentStatePersistenceManager(logger); - var renderer = new TestRenderer(); - var invoked = false; - var tcs = new TaskCompletionSource(); - - lifetime.State.RegisterOnPersisting(async () => { await tcs.Task; throw new InvalidOperationException(); }, new TestRenderMode()); - lifetime.State.RegisterOnPersisting(() => { invoked = true; return Task.CompletedTask; }, new TestRenderMode()); - - // Act - var persistTask = lifetime.PersistStateAsync(store, renderer); - tcs.SetResult(); - - await persistTask; - - // Assert - Assert.True(invoked); - var log = Assert.Single(sink.Writes); - Assert.Equal(LogLevel.Error, log.LogLevel); - } - - private class TestRenderer : Renderer - { - public TestRenderer() : base(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance) - { - } - - private readonly Dispatcher _dispatcher = Dispatcher.CreateDefault(); - - public override Dispatcher Dispatcher => _dispatcher; - - protected override void HandleException(Exception exception) - { - throw new NotImplementedException(); - } - - protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) - { - throw new NotImplementedException(); - } - } - - private class TestStore : IPersistentComponentStateStore - { - public TestStore(IDictionary initialState) - { - State = initialState; - } - - public IDictionary State { get; set; } - - public Task> GetPersistedStateAsync() - { - return Task.FromResult(State); - } - - public Task PersistStateAsync(IReadOnlyDictionary state) - { - // We copy the data here because it's no longer available after this call completes. - State = state.ToDictionary(k => k.Key, v => v.Value); - return Task.CompletedTask; - } - } - - private class CompositeTestStore : IPersistentComponentStateStore, IEnumerable - { - public CompositeTestStore(IDictionary initialState) - { - State = initialState; - } - - public IDictionary State { get; set; } - - public IEnumerator GetEnumerator() - { - yield return new TestStore(State); - yield return new TestStore(State); - } - - public Task> GetPersistedStateAsync() - { - return Task.FromResult(State); - } - - public Task PersistStateAsync(IReadOnlyDictionary state) - { - // We copy the data here because it's no longer available after this call completes. - State = state.ToDictionary(k => k.Key, v => v.Value); - return Task.CompletedTask; - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - } - - private class TestRenderMode : IComponentRenderMode - { - - } -} diff --git a/src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj b/src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj index 8f414c52f80c..732ebbb65892 100644 --- a/src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj +++ b/src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj @@ -8,9 +8,11 @@ + + diff --git a/src/Components/Components/test/NavigationManagerTest.cs b/src/Components/Components/test/NavigationManagerTest.cs index 67f0c6a1b1ce..3f6e680d0c8b 100644 --- a/src/Components/Components/test/NavigationManagerTest.cs +++ b/src/Components/Components/test/NavigationManagerTest.cs @@ -1,7 +1,10 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Buffers; using System.Diagnostics; +using System.Net.Http; +using System.Text; using Microsoft.AspNetCore.Components.Routing; using Microsoft.AspNetCore.InternalTesting; @@ -223,7 +226,9 @@ public void LocationChangingHandlers_CanContinueTheNavigationSynchronously_WhenO // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.True(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method static ValueTask HandleLocationChanging(LocationChangingContext context) { @@ -250,7 +255,9 @@ public void LocationChangingHandlers_CanContinueTheNavigationSynchronously_WhenM // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.True(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.Equal(initialHandlerCount, completedHandlerCount); ValueTask HandleLocationChanging(LocationChangingContext context) @@ -276,7 +283,9 @@ public void LocationChangingHandlers_CanContinueTheNavigationAsynchronously_When Assert.False(navigation1.IsCompleted); tcs.SetResult(); Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.True(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method async ValueTask HandleLocationChanging(LocationChangingContext context) { @@ -328,7 +337,9 @@ public void LocationChangingHandlers_CanCancelTheNavigationSynchronously_WhenOne // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.False(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method static ValueTask HandleLocationChanging(LocationChangingContext context) { @@ -357,7 +368,9 @@ public void LocationChangingHandlers_CanCancelTheNavigationSynchronously_WhenMul // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.False(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.Equal(expectedInvokedHandlerCount, invokedHandlerCount); ValueTask HandleLocationChanging_AllowNavigation(LocationChangingContext context) @@ -391,7 +404,9 @@ public void LocationChangingHandlers_CanCancelTheNavigationSynchronously_BeforeR // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.False(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.True(currentContext.DidPreventNavigation); Assert.True(currentContext.CancellationToken.IsCancellationRequested); Assert.False(isHandlerCompleted); @@ -428,7 +443,9 @@ public void LocationChangingHandlers_CanCancelTheNavigationSynchronously_BeforeR // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.False(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.True(currentContext.DidPreventNavigation); Assert.True(currentContext.CancellationToken.IsCancellationRequested); Assert.False(isFirstHandlerCompleted); @@ -455,7 +472,7 @@ ValueTask HandleLocationChanging_AllowNavigation(LocationChangingContext context } [Fact] - public async void LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenOneHandlerIsRegistered() + public async Task LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenOneHandlerIsRegistered() { // Arrange var baseUri = "scheme://host/"; @@ -479,7 +496,7 @@ static async ValueTask HandleLocationChanging(LocationChangingContext context) } [Fact] - public async void LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenMultipleHandlersAreRegistered() + public async Task LocationChangingHandlers_CanCancelTheNavigationAsynchronously_WhenMultipleHandlersAreRegistered() { // Arrange var baseUri = "scheme://host/"; @@ -503,7 +520,9 @@ public async void LocationChangingHandlers_CanCancelTheNavigationAsynchronously_ // Assert Assert.True(navigation1.IsCompletedSuccessfully); +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.False(navigation1.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.Equal(blockNavigationHandlerCount, canceledBlockNavigationHandlerCount); async ValueTask HandleLocationChanging_BlockNavigation(LocationChangingContext context) @@ -556,11 +575,13 @@ public async Task LocationChangingHandlers_AreCanceledBySuccessiveNavigations_Wh await tcs.Task.WaitAsync(Timeout); // Assert +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.True(navigation1.IsCompletedSuccessfully); Assert.False(navigation1.Result); Assert.True(navigation2.IsCompletedSuccessfully); Assert.True(navigation2.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method async ValueTask HandleLocationChanging(LocationChangingContext context) { @@ -615,6 +636,7 @@ public async Task LocationChangingHandlers_AreCanceledBySuccessiveNavigations_Wh await tcs.Task.WaitAsync(Timeout); // Assert +#pragma warning disable xUnit1031 // Do not use blocking task operations in test method Assert.True(navigation1.IsCompletedSuccessfully); Assert.False(navigation1.Result); @@ -623,6 +645,7 @@ public async Task LocationChangingHandlers_AreCanceledBySuccessiveNavigations_Wh Assert.True(navigation3.IsCompletedSuccessfully); Assert.True(navigation3.Result); +#pragma warning restore xUnit1031 // Do not use blocking task operations in test method Assert.Equal(expectedCanceledHandlerCount, canceledHandlerCount); Assert.Equal(0, completedHandlerCount); @@ -848,6 +871,22 @@ async ValueTask HandleLocationChanging(LocationChangingContext context) } } + [Fact] + public void OnNotFoundSubscriptionIsTriggeredWhenNotFoundCalled() + { + // Arrange + var baseUri = "scheme://host/"; + var testNavManager = new TestNavigationManager(baseUri); + bool notFoundTriggered = false; + testNavManager.OnNotFound += (sender, args) => notFoundTriggered = true; + + // Simulate a component triggered NotFound + testNavManager.NotFound(); + + // Assert + Assert.True(notFoundTriggered, "The OnNotFound event was not triggered as expected."); + } + private class TestNavigationManager : NavigationManager { public TestNavigationManager() diff --git a/src/Components/Components/test/OwningComponentBaseTest.cs b/src/Components/Components/test/OwningComponentBaseTest.cs index 7bd68ad750c7..ae9a2b4a67ac 100644 --- a/src/Components/Components/test/OwningComponentBaseTest.cs +++ b/src/Components/Components/test/OwningComponentBaseTest.cs @@ -29,6 +29,69 @@ public void CreatesScopeAndService() Assert.Equal(1, counter.DisposedCount); } + [Fact] + public async Task DisposeAsyncReleasesScopeAndService() + { + var services = new ServiceCollection(); + services.AddSingleton(); + services.AddTransient(); + var serviceProvider = services.BuildServiceProvider(); + + var counter = serviceProvider.GetRequiredService(); + var renderer = new TestRenderer(serviceProvider); + var component1 = (MyOwningComponent)renderer.InstantiateComponent(); + + Assert.NotNull(component1.MyService); + Assert.Equal(1, counter.CreatedCount); + Assert.Equal(0, counter.DisposedCount); + Assert.False(component1.IsDisposedPublic); + + await ((IAsyncDisposable)component1).DisposeAsync(); + Assert.Equal(1, counter.CreatedCount); + Assert.Equal(1, counter.DisposedCount); + Assert.True(component1.IsDisposedPublic); + } + + [Fact] + public void ThrowsWhenAccessingScopedServicesAfterDispose() + { + var services = new ServiceCollection(); + services.AddSingleton(); + services.AddTransient(); + var serviceProvider = services.BuildServiceProvider(); + + var renderer = new TestRenderer(serviceProvider); + var component1 = (MyOwningComponent)renderer.InstantiateComponent(); + + // Access service first to create scope + var service = component1.MyService; + + ((IDisposable)component1).Dispose(); + + // Should throw when trying to access services after disposal + Assert.Throws(() => component1.MyService); + } + + [Fact] + public async Task ThrowsWhenAccessingScopedServicesAfterDisposeAsync() + { + var services = new ServiceCollection(); + services.AddSingleton(); + services.AddTransient(); + var serviceProvider = services.BuildServiceProvider(); + + var renderer = new TestRenderer(serviceProvider); + var component1 = (MyOwningComponent)renderer.InstantiateComponent(); + + // Access service first to create scope + var service = component1.MyService; + + await ((IAsyncDisposable)component1).DisposeAsync(); + + // Should throw when trying to access services after disposal + Assert.Throws(() => component1.MyService); + } + private class Counter { public int CreatedCount { get; set; } @@ -51,5 +114,8 @@ public MyService(Counter counter) private class MyOwningComponent : OwningComponentBase { public MyService MyService => Service; + + // Expose IsDisposed for testing + public bool IsDisposedPublic => IsDisposed; } } diff --git a/src/Components/Components/test/ParameterViewTest.Assignment.cs b/src/Components/Components/test/ParameterViewTest.Assignment.cs index 01111a9d45a3..827f0e4694ae 100644 --- a/src/Components/Components/test/ParameterViewTest.Assignment.cs +++ b/src/Components/Components/test/ParameterViewTest.Assignment.cs @@ -790,7 +790,7 @@ public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) throw new NotImplementedException(); } - public object GetCurrentValue(in CascadingParameterInfo parameterInfo) + public object GetCurrentValue(object key, in CascadingParameterInfo parameterInfo) { return _value; } diff --git a/src/Components/Components/test/ParameterViewTest.cs b/src/Components/Components/test/ParameterViewTest.cs index e4a358d491cc..0d5a2a46a3b6 100644 --- a/src/Components/Components/test/ParameterViewTest.cs +++ b/src/Components/Components/test/ParameterViewTest.cs @@ -609,7 +609,7 @@ public TestCascadingValue(object value) public bool CanSupplyValue(in CascadingParameterInfo parameterInfo) => throw new NotImplementedException(); - public object GetCurrentValue(in CascadingParameterInfo parameterInfo) + public object GetCurrentValue(object key, in CascadingParameterInfo parameterInfo) => _value; public void Subscribe(ComponentState subscriber, in CascadingParameterInfo parameterInfo) diff --git a/src/Components/Components/test/PersistentState/ComponentStatePersistenceManagerTest.cs b/src/Components/Components/test/PersistentState/ComponentStatePersistenceManagerTest.cs new file mode 100644 index 000000000000..34046eaf2342 --- /dev/null +++ b/src/Components/Components/test/PersistentState/ComponentStatePersistenceManagerTest.cs @@ -0,0 +1,592 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; +using System.Collections; +using System.Text.Json; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Logging.Testing; +using Moq; + +namespace Microsoft.AspNetCore.Components; + +public class ComponentStatePersistenceManagerTest +{ + [Fact] + public void Constructor_InitializesPersistentServicesRegistry() + { + // Arrange + var serviceProvider = new ServiceCollection() + .AddScoped(sp => new TestStore([])) + .AddPersistentService(Mock.Of()) + .BuildServiceProvider(); + + // Act + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + serviceProvider); + persistenceManager.SetPlatformRenderMode(new TestRenderMode()); + + // Assert + Assert.NotNull(persistenceManager.ServicesRegistry); + Assert.Empty(persistenceManager.RegisteredCallbacks); + } + + [Fact] + public async Task RestoreStateAsync_InitializesStateWithDataFromTheProvidedStore() + { + // Arrange + var data = new byte[] { 0, 1, 2, 3, 4 }; + var state = new Dictionary + { + ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(data) + }; + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + // Act + await persistenceManager.RestoreStateAsync(store); + + // Assert + Assert.True(persistenceManager.State.TryTakeFromJson("MyState", out var retrieved)); + Assert.Empty(state); + Assert.Equal(data, retrieved); + } + + [Fact] + public async Task RestoreStateAsync_ThrowsOnDoubleInitialization() + { + // Arrange + var state = new Dictionary + { + ["MyState"] = [0, 1, 2, 3, 4] + }; + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + await persistenceManager.RestoreStateAsync(store); + + // Assert + await Assert.ThrowsAsync(() => persistenceManager.RestoreStateAsync(store)); + } + + private IServiceProvider CreateServiceProvider() => + new ServiceCollection().BuildServiceProvider(); + + [Fact] + public async Task PersistStateAsync_ThrowsWhenCallbackRenerModeCannotBeInferred() + { + // Arrange + var state = new Dictionary(); + var store = new CompositeTestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + var renderer = new TestRenderer(); + var data = new byte[] { 1, 2, 3, 4 }; + + persistenceManager.State.RegisterOnPersisting(() => + { + persistenceManager.State.PersistAsJson("MyState", new byte[] { 1, 2, 3, 4 }); + return Task.CompletedTask; + }); + + // Act + // Assert + await Assert.ThrowsAsync(() => persistenceManager.PersistStateAsync(store, renderer)); + } + + [Fact] + public async Task PersistStateAsync_PersistsRegistry() + { + // Arrange + var serviceProvider = new ServiceCollection() + .AddScoped(sp => new TestStore([])) + .AddPersistentService(new TestRenderMode()) + .BuildServiceProvider(); + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + serviceProvider); + persistenceManager.SetPlatformRenderMode(new TestRenderMode()); + var testStore = new TestStore([]); + + await persistenceManager.RestoreStateAsync(new TestStore([]), RestoreContext.InitialValue); + + // Act + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + // Assert + var persisted = Assert.Single(testStore.State); + Assert.True(testStore.State.TryGetValue(typeof(PersistentServicesRegistry).FullName, out var registrations)); + var registration = Assert.Single(JsonSerializer.Deserialize(registrations, JsonSerializerOptions.Web)); + Assert.Equal(typeof(TestStore).Assembly.GetName().Name, registration.Assembly); + Assert.Equal(typeof(TestStore).FullName, registration.FullTypeName); + } + + [Fact] + public async Task PersistStateAsync_SavesPersistedStateToTheStore() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + var renderer = new TestRenderer(); + var data = new byte[] { 1, 2, 3, 4 }; + + persistenceManager.State.RegisterOnPersisting(() => + { + persistenceManager.State.PersistAsJson("MyState", new byte[] { 1, 2, 3, 4 }); + return Task.CompletedTask; + }, new TestRenderMode()); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + Assert.True(store.State.TryGetValue("MyState", out var persisted)); + Assert.Equal(data, JsonSerializer.Deserialize(persisted.ToArray())); + } + + [Fact] + public async Task PersistStateAsync_InvokesPauseCallbacksDuringPersist() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + var renderer = new TestRenderer(); + var data = new byte[] { 1, 2, 3, 4 }; + var invoked = false; + + persistenceManager.State.RegisterOnPersisting(() => { invoked = true; return default; }, new TestRenderMode()); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + Assert.True(invoked); + } + + [Fact] + public async Task PersistStateAsync_FiresCallbacksInParallel() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + var renderer = new TestRenderer(); + + var sequence = new List { }; + + var tcs = new TaskCompletionSource(); + var tcs2 = new TaskCompletionSource(); + + persistenceManager.State.RegisterOnPersisting(async () => { sequence.Add(1); await tcs.Task; sequence.Add(3); }, new TestRenderMode()); + persistenceManager.State.RegisterOnPersisting(async () => { sequence.Add(2); await tcs2.Task; sequence.Add(4); }, new TestRenderMode()); + + // Act + var persistTask = persistenceManager.PersistStateAsync(store, renderer); + tcs.SetResult(); + tcs2.SetResult(); + + await persistTask; + + // Assert + Assert.Equal(new[] { 2, 1, 3, 4 }, sequence); + } + + [Fact] + public async Task PersistStateAsync_CallbacksAreRemovedWhenSubscriptionsAreDisposed() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + var renderer = new TestRenderer(); + + var sequence = new List { }; + + var tcs = new TaskCompletionSource(); + var tcs2 = new TaskCompletionSource(); + + var subscription1 = persistenceManager.State.RegisterOnPersisting(async () => { sequence.Add(1); await tcs.Task; sequence.Add(3); }); + var subscription2 = persistenceManager.State.RegisterOnPersisting(async () => { sequence.Add(2); await tcs2.Task; sequence.Add(4); }); + + // Act + subscription1.Dispose(); + subscription2.Dispose(); + + var persistTask = persistenceManager.PersistStateAsync(store, renderer); + tcs.SetResult(); + tcs2.SetResult(); + + await persistTask; + + // Assert + Assert.Empty(sequence); + } + + [Fact] + public async Task PersistStateAsync_ContinuesInvokingPauseCallbacksDuringPersistIfACallbackThrows() + { + // Arrange + var sink = new TestSink(); + var loggerFactory = new TestLoggerFactory(sink, true); + var logger = loggerFactory.CreateLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + CreateServiceProvider()); + var renderer = new TestRenderer(); + var data = new byte[] { 1, 2, 3, 4 }; + var invoked = false; + + persistenceManager.State.RegisterOnPersisting(() => throw new InvalidOperationException(), new TestRenderMode()); + persistenceManager.State.RegisterOnPersisting(() => { invoked = true; return Task.CompletedTask; }, new TestRenderMode()); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + Assert.True(invoked); + var log = Assert.Single(sink.Writes); + Assert.Equal(LogLevel.Error, log.LogLevel); + } + + [Fact] + public async Task PersistStateAsync_ContinuesInvokingPauseCallbacksDuringPersistIfACallbackThrowsAsynchonously() + { + // Arrange + var sink = new TestSink(); + var loggerFactory = new TestLoggerFactory(sink, true); + var logger = loggerFactory.CreateLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + CreateServiceProvider()); + var renderer = new TestRenderer(); + var invoked = false; + var tcs = new TaskCompletionSource(); + + persistenceManager.State.RegisterOnPersisting(async () => { await tcs.Task; throw new InvalidOperationException(); }, new TestRenderMode()); + persistenceManager.State.RegisterOnPersisting(() => { invoked = true; return Task.CompletedTask; }, new TestRenderMode()); + + // Act + var persistTask = persistenceManager.PersistStateAsync(store, renderer); + tcs.SetResult(); + + await persistTask; + + // Assert + Assert.True(invoked); + var log = Assert.Single(sink.Writes); + Assert.Equal(LogLevel.Error, log.LogLevel); + } + + [Fact] + public async Task PersistStateAsync_InvokesAllCallbacksEvenIfACallbackIsRemovedAsPartOfRunningIt() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + var renderer = new TestRenderer(); + + var executionSequence = new List(); + + persistenceManager.State.RegisterOnPersisting(() => + { + executionSequence.Add(1); + return Task.CompletedTask; + }, new TestRenderMode()); + + PersistingComponentStateSubscription subscription2 = default; + subscription2 = persistenceManager.State.RegisterOnPersisting(() => + { + executionSequence.Add(2); + subscription2.Dispose(); + return Task.CompletedTask; + }, new TestRenderMode()); + + var tcs = new TaskCompletionSource(); + persistenceManager.State.RegisterOnPersisting(async () => + { + executionSequence.Add(3); + await tcs.Task; + executionSequence.Add(4); + }, new TestRenderMode()); + + // Act + var persistTask = persistenceManager.PersistStateAsync(store, renderer); + tcs.SetResult(); // Allow the async callback to complete + await persistTask; + + // Assert + Assert.Contains(3, executionSequence); + Assert.Contains(2, executionSequence); + Assert.Contains(1, executionSequence); + Assert.Contains(4, executionSequence); + + Assert.Equal(4, executionSequence.Count); + } + + [Fact] + public async Task PersistStateAsync_InvokesAllCallbacksWhenFirstCallbackUnregistersItself() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + var renderer = new TestRenderer(); + + var executionSequence = new List(); + + // Register the first callback that will unregister itself - this is the key test case + // where the first callback removes itself from the collection during iteration + PersistingComponentStateSubscription firstSubscription = default; + firstSubscription = persistenceManager.State.RegisterOnPersisting(() => + { + executionSequence.Add(1); + firstSubscription.Dispose(); // Remove itself from the collection + return Task.CompletedTask; + }, new TestRenderMode()); + + // Register additional callbacks to ensure they still get executed + persistenceManager.State.RegisterOnPersisting(() => + { + executionSequence.Add(2); + return Task.CompletedTask; + }, new TestRenderMode()); + + persistenceManager.State.RegisterOnPersisting(() => + { + executionSequence.Add(3); + return Task.CompletedTask; + }, new TestRenderMode()); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + // All callbacks should be executed even though the first one removed itself + Assert.Contains(1, executionSequence); + Assert.Contains(2, executionSequence); + Assert.Contains(3, executionSequence); + Assert.Equal(3, executionSequence.Count); + } + + [Fact] + public async Task RestoreStateAsync_ValidatesOnlySupportUpdatesWhenRestoreContextValueUpdate() + { + var store = new TestStore([]); + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + // First restore should work (initialize state) + await persistenceManager.RestoreStateAsync(store, RestoreContext.InitialValue); + + // Second restore with non-ValueUpdate context should throw + var exception = await Assert.ThrowsAsync(() => + persistenceManager.RestoreStateAsync(store, RestoreContext.InitialValue)); + + Assert.Equal("State already initialized.", exception.Message); + } + + [Fact] + public async Task RestoreStateAsync_ValidatesRegisteredUpdateCallbacksAreInvokedOnValueUpdates() + { + var store = new TestStore([]); + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + CreateServiceProvider()); + + var callbackInvoked = false; + + // First restore to initialize state + await persistenceManager.RestoreStateAsync(store, RestoreContext.InitialValue); + + // Register a callback for value updates through the state object + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.Default, AllowUpdates = true }; + persistenceManager.State.RegisterOnRestoring(() => { callbackInvoked = true; }, options); + // RegisterOnRestoring will invoke the callback immediately, so we reset it + callbackInvoked = false; + + // Second restore with ValueUpdate context should invoke callbacks + await persistenceManager.RestoreStateAsync(store, RestoreContext.ValueUpdate); + + Assert.True(callbackInvoked); + } + + [Theory] + [MemberData(nameof(RestoreContexts))] + public async Task RestoreStateAsync_RestoresServicesForDifferentContexts(RestoreContext context) + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var (serviceProvider, persistenceManager) = CreatePersistenceManagerWithService(componentRenderMode); + + var service = serviceProvider.GetRequiredService(); + service.TestProperty = "Test Value"; + + var store = new TestStore([]); + await persistenceManager.RestoreStateAsync(store, RestoreContext.InitialValue); + await persistenceManager.PersistStateAsync(store, new TestRenderer()); + + // Act - Create new service provider and persistence manager + var (newServiceProvider, newPersistenceManager) = CreatePersistenceManagerWithService(componentRenderMode); + + // Restore with the specified context + await newPersistenceManager.RestoreStateAsync(store, context); + + // Assert + var restoredService = newServiceProvider.GetRequiredService(); + Assert.Equal("Test Value", restoredService.TestProperty); + + static (IServiceProvider serviceProvider, ComponentStatePersistenceManager persistenceManager) CreatePersistenceManagerWithService(IComponentRenderMode renderMode) + { + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(renderMode) + .BuildServiceProvider(); + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + serviceProvider); + persistenceManager.SetPlatformRenderMode(renderMode); + + return (serviceProvider, persistenceManager); + } + } + + public static IEnumerable RestoreContexts() + { + yield return new object[] { RestoreContext.InitialValue }; + yield return new object[] { RestoreContext.ValueUpdate }; + yield return new object[] { RestoreContext.LastSnapshot }; + } + + private class TestPersistentService + { + [PersistentState(AllowUpdates = true)] + public string TestProperty { get; set; } = string.Empty; + } + + private class TestRenderer : Renderer + { + public TestRenderer() : base(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance) + { + } + + private readonly Dispatcher _dispatcher = Dispatcher.CreateDefault(); + + public override Dispatcher Dispatcher => _dispatcher; + + protected override void HandleException(Exception exception) + { + throw new NotImplementedException(); + } + + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) + { + throw new NotImplementedException(); + } + } + + private class TestStore(Dictionary initialState) : IPersistentComponentStateStore + { + public IDictionary State { get; set; } = initialState; + + public Task> GetPersistedStateAsync() + { + return Task.FromResult(State); + } + + public Task PersistStateAsync(IReadOnlyDictionary state) + { + // We copy the data here because it's no longer available after this call completes. + State = state.ToDictionary(k => k.Key, v => v.Value); + return Task.CompletedTask; + } + } + + private class CompositeTestStore(Dictionary initialState) + : IPersistentComponentStateStore, IEnumerable + { + public Dictionary State { get; set; } = initialState; + + public IEnumerator GetEnumerator() + { + yield return new TestStore(State); + yield return new TestStore(State); + } + + public Task> GetPersistedStateAsync() + { + return Task.FromResult(State as IDictionary); + } + + public Task PersistStateAsync(IReadOnlyDictionary state) + { + // We copy the data here because it's no longer available after this call completes. + State = state.ToDictionary(k => k.Key, v => v.Value); + return Task.CompletedTask; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + + private class TestRenderMode : IComponentRenderMode + { + } + + private class PersistentService : IPersistentServiceRegistration + { + public string Assembly { get; set; } + + public string FullTypeName { get; set; } + + public IComponentRenderMode GetRenderModeOrDefault() => null; + } +} + +static file class ComponentStatePersistenceManagerExtensions +{ + public static IServiceCollection AddPersistentService(this IServiceCollection services, IComponentRenderMode renderMode) + { + RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration( + services, + renderMode); + return services; + } +} diff --git a/src/Components/Components/test/PersistentState/PersistentComponentStateTest.cs b/src/Components/Components/test/PersistentState/PersistentComponentStateTest.cs new file mode 100644 index 000000000000..a346e84645f8 --- /dev/null +++ b/src/Components/Components/test/PersistentState/PersistentComponentStateTest.cs @@ -0,0 +1,287 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Text.Json; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging.Abstractions; +using Moq; + +namespace Microsoft.AspNetCore.Components; + +public class PersistentComponentStateTest +{ + [Fact] + public void InitializeExistingState_SetupsState() + { + // Arrange + var applicationState = new PersistentComponentState(new Dictionary(), [], []); + var existingState = new Dictionary + { + ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(new byte[] { 1, 2, 3, 4 }) + }; + + // Act + applicationState.InitializeExistingState(existingState, RestoreContext.InitialValue); + + // Assert + Assert.True(applicationState.TryTakeFromJson("MyState", out var existing)); + Assert.Equal(new byte[] { 1, 2, 3, 4 }, existing); + } + + [Fact] + public void InitializeExistingState_ThrowsIfAlreadyInitialized() + { + // Arrange + var applicationState = new PersistentComponentState(new Dictionary(), [], []); + var existingState = new Dictionary + { + ["MyState"] = new byte[] { 1, 2, 3, 4 } + }; + + applicationState.InitializeExistingState(existingState, RestoreContext.InitialValue); + + // Act & Assert + Assert.Throws(() => applicationState.InitializeExistingState(existingState, null)); + } + + [Fact] + public void RegisterOnPersisting_ThrowsIfCalledDuringOnPersisting() + { + // Arrange + var currentState = new Dictionary(); + var applicationState = new PersistentComponentState(currentState, [], []) + { + PersistingState = true + }; + + // Act & Assert + Assert.Throws(() => applicationState.RegisterOnPersisting(() => Task.CompletedTask)); + } + + [Fact] + public void TryRetrieveState_ReturnsStateWhenItExists() + { + // Arrange + var applicationState = new PersistentComponentState(new Dictionary(), [], []); + var existingState = new Dictionary + { + ["MyState"] = JsonSerializer.SerializeToUtf8Bytes(new byte[] { 1, 2, 3, 4 }) + }; + + // Act + applicationState.InitializeExistingState(existingState, RestoreContext.InitialValue); + + // Assert + Assert.True(applicationState.TryTakeFromJson("MyState", out var existing)); + Assert.Equal(new byte[] { 1, 2, 3, 4 }, existing); + Assert.False(applicationState.TryTakeFromJson("MyState", out var gone)); + } + + [Fact] + public void PersistState_SavesDataToTheStoreAsync() + { + // Arrange + var currentState = new Dictionary(); + var applicationState = new PersistentComponentState(currentState, [], []) + { + PersistingState = true + }; + var myState = new byte[] { 1, 2, 3, 4 }; + + // Act + applicationState.PersistAsJson("MyState", myState); + + // Assert + Assert.True(currentState.TryGetValue("MyState", out var stored)); + Assert.Equal(myState, JsonSerializer.Deserialize(stored)); + } + + [Fact] + public void PersistState_ThrowsForDuplicateKeys() + { + // Arrange + var currentState = new Dictionary(); + var applicationState = new PersistentComponentState(currentState, [], []) + { + PersistingState = true + }; + var myState = new byte[] { 1, 2, 3, 4 }; + + applicationState.PersistAsJson("MyState", myState); + + // Act & Assert + Assert.Throws(() => applicationState.PersistAsJson("MyState", myState)); + } + + [Fact] + public void PersistAsJson_SerializesTheDataToJsonAsync() + { + // Arrange + var currentState = new Dictionary(); + var applicationState = new PersistentComponentState(currentState, [], []) + { + PersistingState = true + }; + var myState = new byte[] { 1, 2, 3, 4 }; + + // Act + applicationState.PersistAsJson("MyState", myState); + + // Assert + Assert.True(currentState.TryGetValue("MyState", out var stored)); + Assert.Equal(myState, JsonSerializer.Deserialize(stored)); + } + + [Fact] + public void PersistAsJson_NullValueAsync() + { + // Arrange + var currentState = new Dictionary(); + var applicationState = new PersistentComponentState(currentState, [], []) + { + PersistingState = true + }; + + // Act + applicationState.PersistAsJson("MyState", null); + + // Assert + Assert.True(currentState.TryGetValue("MyState", out var stored)); + Assert.Null(JsonSerializer.Deserialize(stored)); + } + + [Fact] + public void TryRetrieveFromJson_DeserializesTheDataFromJson() + { + // Arrange + var myState = new byte[] { 1, 2, 3, 4 }; + var serialized = JsonSerializer.SerializeToUtf8Bytes(myState); + var existingState = new Dictionary() { ["MyState"] = serialized }; + var applicationState = new PersistentComponentState(new Dictionary(), [], []); + + applicationState.InitializeExistingState(existingState, RestoreContext.InitialValue); + + // Act + Assert.True(applicationState.TryTakeFromJson("MyState", out var stored)); + + // Assert + Assert.Equal(myState, stored); + Assert.False(applicationState.TryTakeFromJson("MyState", out _)); + } + + [Fact] + public void TryRetrieveFromJson_NullValue() + { + // Arrange + var serialized = JsonSerializer.SerializeToUtf8Bytes(null); + var existingState = new Dictionary() { ["MyState"] = serialized }; + var applicationState = new PersistentComponentState(new Dictionary(), [], []); + + applicationState.InitializeExistingState(existingState, RestoreContext.InitialValue); + + // Act + Assert.True(applicationState.TryTakeFromJson("MyState", out var stored)); + + // Assert + Assert.Null(stored); + Assert.False(applicationState.TryTakeFromJson("MyState", out _)); + } + + [Fact] + public void RegisterOnRestoring_InvokesCallbackWhenShouldRestoreMatches() + { + // Arrange + var currentState = new Dictionary(); + var callbacks = new List(); + var applicationState = new PersistentComponentState(currentState, [], callbacks); + applicationState.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + + var callbackInvoked = false; + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.Default, AllowUpdates = false }; + + // Act + var subscription = applicationState.RegisterOnRestoring(() => { callbackInvoked = true; }, options); + + // Assert + Assert.True(callbackInvoked); + } + + [Fact] + public void RegisterOnRestoring_DoesNotInvokeCallbackWhenShouldRestoreDoesNotMatch() + { + // Arrange + var currentState = new Dictionary(); + var callbacks = new List(); + var applicationState = new PersistentComponentState(currentState, [], callbacks); + applicationState.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + + var callbackInvoked = false; + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.SkipInitialValue, AllowUpdates = false }; + + // Act + var subscription = applicationState.RegisterOnRestoring(() => { callbackInvoked = true; }, options); + + // Assert + Assert.False(callbackInvoked); + } + + [Fact] + public void RegisterOnRestoring_ReturnsDefaultSubscriptionWhenNotAllowingUpdates() + { + // Arrange + var currentState = new Dictionary(); + var callbacks = new List(); + var applicationState = new PersistentComponentState(currentState, [], callbacks); + applicationState.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.Default, AllowUpdates = false }; + + // Act + var subscription = applicationState.RegisterOnRestoring(() => { }, options); + + // Assert + Assert.Equal(default, subscription); + Assert.Empty(callbacks); + } + + [Fact] + public void RegisterOnRestoring_ReturnsRestoringSubscriptionWhenAllowsUpdates() + { + // Arrange + var currentState = new Dictionary(); + var callbacks = new List(); + var applicationState = new PersistentComponentState(currentState, [], callbacks); + applicationState.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.Default, AllowUpdates = true }; + + // Act + var subscription = applicationState.RegisterOnRestoring(() => { }, options); + + // Assert + Assert.NotEqual(default, subscription); + Assert.Single(callbacks); + } + + [Fact] + public void RegisterOnRestoring_SubscriptionCanBeDisposed() + { + // Arrange + var currentState = new Dictionary(); + var callbacks = new List(); + var applicationState = new PersistentComponentState(currentState, [], callbacks); + applicationState.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.Default, AllowUpdates = true }; + var subscription = applicationState.RegisterOnRestoring(() => { }, options); + + Assert.Single(callbacks); + + // Act + subscription.Dispose(); + + // Assert + Assert.Empty(callbacks); + } +} diff --git a/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs b/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs new file mode 100644 index 000000000000..0fae4c1ebaf4 --- /dev/null +++ b/src/Components/Components/test/PersistentState/PersistentServicesRegistryTest.cs @@ -0,0 +1,665 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging.Abstractions; + +namespace Microsoft.AspNetCore.Components.PersistentState; + +public class PersistentServicesRegistryTest +{ + [Fact] + public async Task PersistStateAsync_PersistsServiceProperties() + { + // Arrange + var state = "myState"; + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var testService = scope.GetService(); + testService.State = state; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + var registry = persistenceManager.ServicesRegistry; + + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + var componentState = new PersistentComponentState(testStore.State, [], []); + + var secondScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var secondManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + secondScope); + + await secondManager.RestoreStateAsync(new TestStore(testStore.State)); + + // Assert + var service = secondScope.GetRequiredService(); + Assert.Equal(state, service.State); + } + + [Fact] + public async Task PersistStateAsync_PersistsBaseServiceProperties() + { + // Arrange + var state = "myState"; + var componentRenderMode = new TestRenderMode(); + var serviceProviderOne = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var serviceProviderTwo = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProviderOne.CreateAsyncScope().ServiceProvider; + var derivedOne = scope.GetService() as DerivedOne; + derivedOne.State = state; + + var persistenceManagerOne = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManagerOne.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManagerOne.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + await persistenceManagerOne.PersistStateAsync(testStore, new TestRenderer()); + + var scopeTwo = serviceProviderTwo.CreateAsyncScope().ServiceProvider; + var persistenceManagerTwo = new ComponentStatePersistenceManager( + NullLogger.Instance, + scopeTwo); + + await persistenceManagerTwo.RestoreStateAsync(new TestStore(testStore.State)); + + // Assert + var derivedTwo = scopeTwo.GetRequiredService() as DerivedTwo; + Assert.Equal(state, derivedTwo.State); + } + + [Fact] + public async Task PersistStateAsync_PersistsBaseClassPropertiesInDerivedInstance() + { + // Arrange + var state = "baseState"; + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var derivedService = serviceProvider.GetService() as DerivedService; + derivedService.State = state; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + serviceProvider.CreateAsyncScope().ServiceProvider); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + var secondManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + serviceProvider.CreateAsyncScope().ServiceProvider); + + await secondManager.RestoreStateAsync(new TestStore(testStore.State)); + + // Assert + var restoredService = serviceProvider.GetRequiredService() as DerivedService; + Assert.Equal(state, restoredService.State); + } + + [Fact] + public async Task PersistStateAsync_DoesNotPersistNullServiceProperties() + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var testService = scope.GetService(); + testService.State = null; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + // Act + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + // Assert + var kvp = Assert.Single(testStore.State); + Assert.Equal(typeof(PersistentServicesRegistry).FullName, kvp.Key); + } + + [Fact] + public async Task PersistStateAsync_DoesNotThrowIfServiceNotResolvedDuringRestore() + { + // Arrange + var state = "myState"; + var componentRenderMode = new TestRenderMode(); + var serviceProviderOne = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProviderOne.CreateAsyncScope().ServiceProvider; + var derivedOne = scope.GetService() as DerivedOne; + derivedOne.State = state; + + var persistenceManagerOne = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManagerOne.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManagerOne.PersistStateAsync(testStore, new TestRenderer()); + + var serviceProviderTwo = new ServiceCollection() + .BuildServiceProvider(); + + var scopeTwo = serviceProviderTwo.CreateAsyncScope().ServiceProvider; + var persistenceManagerTwo = new ComponentStatePersistenceManager( + NullLogger.Instance, + scopeTwo); + + // Act & Assert + var exception = await Record.ExceptionAsync(() => persistenceManagerTwo.RestoreStateAsync(new TestStore(testStore.State))); + Assert.Null(exception); + } + + [Fact] + public async Task PersistStateAsync_RestoresStateForPersistedRegistrations() + { + // Arrange + var state = "myState"; + var componentRenderMode = new TestRenderMode(); + var serviceProviderOne = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var serviceProviderTwo = new ServiceCollection() + .AddScoped() + .BuildServiceProvider(); + + var scope = serviceProviderOne.CreateAsyncScope().ServiceProvider; + var derivedOne = scope.GetService() as DerivedOne; + derivedOne.State = state; + + var persistenceManagerOne = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManagerOne.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManagerOne.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + await persistenceManagerOne.PersistStateAsync(testStore, new TestRenderer()); + + var scopeTwo = serviceProviderTwo.CreateAsyncScope().ServiceProvider; + var persistenceManagerTwo = new ComponentStatePersistenceManager( + NullLogger.Instance, + scopeTwo); + + await persistenceManagerTwo.RestoreStateAsync(new TestStore(testStore.State), RestoreContext.InitialValue); + + // Assert + var derivedTwo = scopeTwo.GetRequiredService() as DerivedTwo; + Assert.Equal(state, derivedTwo.State); + } + + [Fact] + public async Task PersistStateAsync_DoesNotThrow_WhenTypeCantBeFoundForPersistedRegistrations() + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var serviceProviderOne = new ServiceCollection() + .AddSingleton(new TestPersistentRegistration { Assembly = "FakeAssembly", FullTypeName = "FakeType" }) + .BuildServiceProvider(); + + var serviceProviderTwo = new ServiceCollection() + .BuildServiceProvider(); + + var scope = serviceProviderOne.CreateAsyncScope().ServiceProvider; + + var persistenceManagerOne = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManagerOne.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManagerOne.PersistStateAsync(testStore, new TestRenderer()); + + var scopeTwo = serviceProviderTwo.CreateAsyncScope().ServiceProvider; + var persistenceManagerTwo = new ComponentStatePersistenceManager( + NullLogger.Instance, + scopeTwo); + + var exception = await Record.ExceptionAsync(async () => await persistenceManagerTwo.RestoreStateAsync(new TestStore(testStore.State))); + Assert.Null(exception); + } + + [Fact] + public void ResolveRegistrations_RemovesDuplicateRegistrations() + { + // Arrange + var serviceProvider = new ServiceCollection() + .AddSingleton() + .AddSingleton(new TestPersistentRegistration { Assembly = "Assembly1", FullTypeName = "Type1" }) + .AddSingleton(new TestPersistentRegistration { Assembly = "Assembly1", FullTypeName = "Type1" }) // Duplicate + .AddSingleton(new TestPersistentRegistration { Assembly = "Assembly2", FullTypeName = "Type2" }) + .BuildServiceProvider(); + + var registry = new PersistentServicesRegistry(serviceProvider); + + // Act + var registrations = registry.Registrations; + + // Assert + Assert.Equal(2, registrations.Count); + Assert.Contains(registrations, r => r.Assembly == "Assembly1" && r.FullTypeName == "Type1"); + Assert.Contains(registrations, r => r.Assembly == "Assembly2" && r.FullTypeName == "Type2"); + } + + private class TestStore : IPersistentComponentStateStore + { + public IDictionary State { get; set; } + + public TestStore(IDictionary initialState) + { + State = initialState; + } + + public Task> GetPersistedStateAsync() + { + return Task.FromResult(State); + } + + public Task PersistStateAsync(IReadOnlyDictionary state) + { + State = state.ToDictionary(k => k.Key, v => v.Value); + return Task.CompletedTask; + } + } + + [Fact] + public async Task PersistStateAsync_PersistsMultipleServicesWithDifferentStates() + { + // Arrange + var state1 = "state1"; + var state2 = "state2"; + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddScoped() + .AddPersistentService(componentRenderMode) + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var testService = scope.GetService(); + var anotherTestService = scope.GetService(); + testService.State = state1; + anotherTestService.State = state2; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + var secondScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var secondManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + secondScope); + + await secondManager.RestoreStateAsync(new TestStore(testStore.State)); + + // Assert + var restoredTestService = secondScope.GetRequiredService(); + var restoredAnotherTestService = secondScope.GetRequiredService(); + Assert.Equal(state1, restoredTestService.State); + Assert.Equal(state2, restoredAnotherTestService.State); + } + + [Fact] + public async Task PersistStateAsync_PersistsServiceWithComplexState() + { + // Arrange + var customer = new Customer + { + Name = "John Doe", + Addresses = + [ + new Address { Street = "123 Main St", ZipCode = "12345" }, + new Address { Street = "456 Elm St", ZipCode = "67890" } + ] + }; + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var customerService = scope.GetService(); + customerService.Customer = customer; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + var secondScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var secondManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + secondScope); + + await secondManager.RestoreStateAsync(new TestStore(testStore.State)); + + // Assert + var restoredCustomerService = secondScope.GetRequiredService(); + Assert.Equal(customer.Name, restoredCustomerService.Customer.Name); + Assert.Equal(customer.Addresses.Count, restoredCustomerService.Customer.Addresses.Count); + for (var i = 0; i < customer.Addresses.Count; i++) + { + Assert.Equal(customer.Addresses[i].Street, restoredCustomerService.Customer.Addresses[i].Street); + Assert.Equal(customer.Addresses[i].ZipCode, restoredCustomerService.Customer.Addresses[i].ZipCode); + } + } + + [Fact] + public async Task PersistStateAsync_RespectsSkipInitialValueBehavior() + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var service = scope.GetRequiredService(); + service.SkipInitialValueProperty = "TestValue"; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + // Act - Restore with InitialValue context + var initialValueScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var initialValueManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + initialValueScope); + + await initialValueManager.RestoreStateAsync(new TestStore(testStore.State), RestoreContext.InitialValue); + var restoredService = initialValueScope.GetRequiredService(); + + // Assert - Property should be null because it was skipped during InitialValue restore + Assert.Null(restoredService.SkipInitialValueProperty); + } + + [Fact] + public async Task PersistStateAsync_RespectsSkipLastSnapshotBehavior() + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var service = scope.GetRequiredService(); + service.SkipLastSnapshotProperty = "TestValue"; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var testStore = new TestStore(new Dictionary()); + + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + await persistenceManager.PersistStateAsync(testStore, new TestRenderer()); + + // Act - Restore with LastSnapshot context + var lastSnapshotScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var lastSnapshotManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + lastSnapshotScope); + + await lastSnapshotManager.RestoreStateAsync(new TestStore(testStore.State), RestoreContext.LastSnapshot); + var restoredService = lastSnapshotScope.GetRequiredService(); + + // Assert - Property should be null because it was skipped during LastSnapshot restore + Assert.Null(restoredService.SkipLastSnapshotProperty); + } + + [Fact] + public async Task PersistStateAsync_RespectsAllowUpdatesBehavior() + { + // Arrange + var componentRenderMode = new TestRenderMode(); + var serviceProvider = new ServiceCollection() + .AddScoped() + .AddPersistentService(componentRenderMode) + .BuildServiceProvider(); + + var scope = serviceProvider.CreateAsyncScope().ServiceProvider; + var service = scope.GetRequiredService(); + service.AllowUpdatesProperty = "InitialValue"; + + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + scope); + persistenceManager.SetPlatformRenderMode(componentRenderMode); + var initialStore = new TestStore(new Dictionary()); + + await persistenceManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + await persistenceManager.PersistStateAsync(initialStore, new TestRenderer()); + + // Create updated state + var updatedScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var updatedService = updatedScope.GetRequiredService(); + updatedService.AllowUpdatesProperty = "UpdatedValue"; + + var updatedManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + updatedScope); + var updatedStore = new TestStore(new Dictionary()); + + await updatedManager.RestoreStateAsync(new TestStore(new Dictionary()), RestoreContext.InitialValue); + await updatedManager.PersistStateAsync(updatedStore, new TestRenderer()); + + // Act - First restore with InitialValue, then update with ValueUpdate context + var targetScope = serviceProvider.CreateAsyncScope().ServiceProvider; + var targetManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + targetScope); + + await targetManager.RestoreStateAsync(new TestStore(initialStore.State), RestoreContext.InitialValue); + var restoredService = targetScope.GetRequiredService(); + Assert.Equal("InitialValue", restoredService.AllowUpdatesProperty); + + // Update with ValueUpdate context + await targetManager.RestoreStateAsync(new TestStore(updatedStore.State), RestoreContext.ValueUpdate); + + // Assert - Property should be updated because AllowUpdates is true + Assert.Equal("UpdatedValue", restoredService.AllowUpdatesProperty); + } + + private class ServiceWithSkipInitialValue + { + [PersistentState(RestoreBehavior = RestoreBehavior.SkipInitialValue)] + public string SkipInitialValueProperty { get; set; } + } + + private class ServiceWithSkipLastSnapshot + { + [PersistentState(RestoreBehavior = RestoreBehavior.SkipLastSnapshot)] + public string SkipLastSnapshotProperty { get; set; } + } + + private class ServiceWithAllowUpdates + { + [PersistentState(AllowUpdates = true)] + public string AllowUpdatesProperty { get; set; } + } + + private class AnotherTestService + { + [PersistentState] + public string State { get; set; } + } + + private class CustomerService + { + [PersistentState] + public Customer Customer { get; set; } + } + + private class Customer + { + public string Name { get; set; } + public List
Addresses { get; set; } + } + + private class Address + { + public string Street { get; set; } + public string ZipCode { get; set; } + } + + private class TestRenderMode : IComponentRenderMode + { + } + + private class TestService + { + [PersistentState] + public string State { get; set; } + } + + private class BaseTestService + { + public string BaseState { get; } + + public BaseTestService(string baseState) + { + BaseState = baseState; + } + } + + private class DerivedTestService : BaseTestService + { + public string DerivedState { get; } + + public DerivedTestService(string baseState, string derivedState) + : base(baseState) + { + DerivedState = derivedState; + } + } + + private class TestRenderer : Renderer + { + public TestRenderer() : base(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance) + { + } + + private readonly Dispatcher _dispatcher = Dispatcher.CreateDefault(); + + public override Dispatcher Dispatcher => _dispatcher; + + protected override void HandleException(Exception exception) + { + throw new NotImplementedException(); + } + + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) + { + throw new NotImplementedException(); + } + } + + private class BaseService + { + } + + private class DerivedOne : BaseService + { + [PersistentState] + public string State { get; set; } + } + + private class DerivedTwo : BaseService + { + [PersistentState] + public string State { get; set; } + } + + private class BaseServiceWithProperty + { + [PersistentState] + public string State { get; set; } + } + + private class DerivedService : BaseServiceWithProperty + { + } + + private class TestPersistentRegistration : IPersistentServiceRegistration + { + public string Assembly { get; set; } + public string FullTypeName { get; set; } + + public IComponentRenderMode GetRenderModeOrDefault() => null; + } +} + +static file class ComponentStatePersistenceManagerExtensions +{ + public static IServiceCollection AddPersistentService(this IServiceCollection services, IComponentRenderMode renderMode) + { + RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration( + services, + renderMode); + return services; + } +} diff --git a/src/Components/Components/test/PersistentState/RestoreContextTest.cs b/src/Components/Components/test/PersistentState/RestoreContextTest.cs new file mode 100644 index 000000000000..c4ca50e65fd7 --- /dev/null +++ b/src/Components/Components/test/PersistentState/RestoreContextTest.cs @@ -0,0 +1,105 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components; + +public class RestoreContextTest +{ + [Theory] + [InlineData(RestoreBehavior.Default)] + [InlineData(RestoreBehavior.SkipLastSnapshot)] + public void ShouldRestore_InitialValueContext_WithDefaultOrSkipLastSnapshot(RestoreBehavior behavior) + { + var options = new RestoreOptions { RestoreBehavior = behavior }; + + var result = RestoreContext.InitialValue.ShouldRestore(options); + + Assert.True(result); + } + + [Fact] + public void ShouldRestore_InitialValueContext_WithSkipInitialValue() + { + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.SkipInitialValue }; + + var result = RestoreContext.InitialValue.ShouldRestore(options); + + Assert.False(result); + } + + [Theory] + [InlineData(RestoreBehavior.Default, true, true)] + [InlineData(RestoreBehavior.Default, false, true)] + [InlineData(RestoreBehavior.SkipInitialValue, true, false)] + [InlineData(RestoreBehavior.SkipInitialValue, false, false)] + public void ShouldRestore_InitialValueContext_ShouldRestore_IsIndependentOfAllowUpdates(RestoreBehavior behavior, bool allowUpdates, bool expectedResult) + { + var options = new RestoreOptions { RestoreBehavior = behavior, AllowUpdates = allowUpdates }; + + var result = RestoreContext.InitialValue.ShouldRestore(options); + + Assert.Equal(expectedResult, result); + } + + [Theory] + [InlineData(RestoreBehavior.Default)] + [InlineData(RestoreBehavior.SkipInitialValue)] + public void ShouldRestore_LastSnapshotContext_WithDefaultOrSkipInitialValue(RestoreBehavior behavior) + { + var options = new RestoreOptions { RestoreBehavior = behavior }; + + var result = RestoreContext.LastSnapshot.ShouldRestore(options); + + Assert.True(result); + } + + [Fact] + public void ShouldRestore_LastSnapshotContext_WithSkipLastSnapshot() + { + var options = new RestoreOptions { RestoreBehavior = RestoreBehavior.SkipLastSnapshot }; + + var result = RestoreContext.LastSnapshot.ShouldRestore(options); + + Assert.False(result); + } + + [Theory] + [InlineData(RestoreBehavior.Default, true, true)] + [InlineData(RestoreBehavior.Default, false, true)] + [InlineData(RestoreBehavior.SkipLastSnapshot, true, false)] + [InlineData(RestoreBehavior.SkipLastSnapshot, false, false)] + public void ShouldRestore_LastSnapshotContext_ShouldRestore_IsIndependentOfAllowUpdates(RestoreBehavior behavior, bool allowUpdates, bool expectedResult) + { + var options = new RestoreOptions { RestoreBehavior = behavior, AllowUpdates = allowUpdates }; + + var result = RestoreContext.LastSnapshot.ShouldRestore(options); + + Assert.Equal(expectedResult, result); + } + + [Theory] + [InlineData(RestoreBehavior.Default)] + [InlineData(RestoreBehavior.SkipInitialValue)] + [InlineData(RestoreBehavior.SkipLastSnapshot)] + public void ShouldRestore_ValueUpdateContext_WithoutAllowUpdates(RestoreBehavior behavior) + { + var options = new RestoreOptions { RestoreBehavior = behavior }; + + var result = RestoreContext.ValueUpdate.ShouldRestore(options); + + Assert.False(result); + } + + [Theory] + [InlineData(RestoreBehavior.Default)] + [InlineData(RestoreBehavior.SkipInitialValue)] + [InlineData(RestoreBehavior.SkipLastSnapshot)] + public void ShouldRestore_ValueUpdateContext_WithAllowUpdates(RestoreBehavior behavior) + { + var options = new RestoreOptions { AllowUpdates = true, RestoreBehavior = behavior }; + + var result = RestoreContext.ValueUpdate.ShouldRestore(options); + + Assert.True(result); + } +} diff --git a/src/Components/Components/test/PersistentStateValueProviderKeyResolverTests.cs b/src/Components/Components/test/PersistentStateValueProviderKeyResolverTests.cs new file mode 100644 index 000000000000..2af1c97ce0d4 --- /dev/null +++ b/src/Components/Components/test/PersistentStateValueProviderKeyResolverTests.cs @@ -0,0 +1,428 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Text.Json; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Logging.Testing; + +namespace Microsoft.AspNetCore.Components; + +public class PersistentStateValueProviderKeyResolverTests +{ + public static TheoryData ValidKeyTypesData => new TheoryData + { + { true, false }, + { 'A', 'B' }, + { (sbyte)42, (sbyte)-42 }, + { (byte)240, (byte)15 }, + { (short)12345, (short)-12345 }, + { (ushort)54321, (ushort)12345 }, + { 42, -42 }, + { (uint)3000000000, (uint)1000000000 }, + { 9223372036854775807L, -9223372036854775808L }, + { (ulong)18446744073709551615UL, (ulong)1 }, + { 3.14159f, -3.14159f }, + { Math.PI, -Math.PI }, + { 123456.789m, -123456.789m }, + { new DateTime(2023, 1, 1), new DateTime(2023, 12, 31) }, + { new DateTimeOffset(2023, 1, 1, 0, 0, 0, TimeSpan.FromSeconds(0)), new DateTimeOffset(2023, 12, 31, 0, 0, 0, TimeSpan.FromSeconds(0)) }, + { "key1", "key2" }, + // Include a very long key to validate logic around growing buffers + { new string('a', 10000), new string('b', 10000) }, + { Guid.NewGuid(), Guid.NewGuid() }, + { new DateOnly(2023, 1, 1), new DateOnly(2023, 12, 31) }, + { new TimeOnly(12, 34, 56), new TimeOnly(23, 45, 56) }, + }; + + public static TheoryData InvalidKeyTypesData => new TheoryData + { + { new object(), new object() }, + { new TestComponent(), new TestComponent() } + }; + + [Fact] + public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_WhenParentProvidesDifferentKeys() + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + new ServiceCollection().BuildServiceProvider()); + + persistenceManager.State.InitializeExistingState(state, RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var parentComponent = new ParentComponent(); + + var componentStates = CreateComponentState(renderer, [(component1, "key1"), (component2, "key2")], parentComponent); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + Assert.NotEmpty(store.State); + + // Check that keys are different for different component instances with different keys + var key1 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); + var key2 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); + + Assert.NotEqual(key1, key2); + + // Verify both states were persisted correctly + var newState = new PersistentComponentState(new Dictionary(), [], []); + newState.InitializeExistingState(store.State, null); + + Assert.True(newState.TryTakeFromJson(key1, out var retrievedValue1)); + Assert.Equal("state1", retrievedValue1); + + Assert.True(newState.TryTakeFromJson(key2, out var retrievedValue2)); + Assert.Equal("state2", retrievedValue2); + } + + [Theory] + [MemberData(nameof(ValidKeyTypesData))] + public async Task PersistAsync_CanPersistMultipleComponentsOfSameType_SupportsDifferentKeyTypes( + object componentKey1, + object componentKey2) + { + // Arrange + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + NullLogger.Instance, + new ServiceCollection().BuildServiceProvider()); + + await persistenceManager.RestoreStateAsync(new TestStore([]), RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var parentComponent = new ParentComponent(); + + var componentStates = CreateComponentState(renderer, [(component1, componentKey1), (component2, componentKey2)], parentComponent); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + Assert.NotEmpty(store.State); + + // Check that keys are different for different component instances with different keys + var key1 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); + var key2 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); + + Assert.NotEqual(key1, key2); + + // Verify both states were persisted correctly + var newState = new PersistentComponentState(new Dictionary(), [], []); + newState.InitializeExistingState(store.State, null); + + Assert.True(newState.TryTakeFromJson(key1, out var retrievedValue1)); + Assert.Equal("state1", retrievedValue1); + + Assert.True(newState.TryTakeFromJson(key2, out var retrievedValue2)); + Assert.Equal("state2", retrievedValue2); + } + + [Fact] + public async Task PersistenceFails_IfMultipleComponentsOfSameType_TryToPersistDataWithoutParentComponents() + { + // Arrange + var (logger, sink) = CreateTestLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + new ServiceCollection().BuildServiceProvider()); + + persistenceManager.State.InitializeExistingState(state, RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var componentStates = CreateComponentState(renderer, [(component1, null), (component2, null)], null); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Check that keys are the same for multiple component instances without keys + var key1 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState1, cascadingParameterInfo.PropertyName); + var key2 = PersistentStateValueProviderKeyResolver.ComputeKey(componentState2, cascadingParameterInfo.PropertyName); + + Assert.Equal(key1, key2); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + var messages = sink.Writes.Where(x => x.LogLevel >= LogLevel.Warning).ToList(); + Assert.Single(messages); + } + + private static (ILogger logger, TestSink testLoggerSink) CreateTestLogger() + { + var testLoggerSink = new TestSink(); + var loggerFactory = new TestLoggerFactory(testLoggerSink, enabled: true); + var logger = loggerFactory.CreateLogger(); + return (logger, testLoggerSink); + } + + [Fact] + public async Task PersistentceFails_IfMultipleComponentsOfSameType_TryToPersistDataWithParentComponentOfSameType() + { + // Arrange + var (logger, sink) = CreateTestLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + new ServiceCollection().BuildServiceProvider()); + + persistenceManager.State.InitializeExistingState(state, RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var parentComponent = new TestComponent(); + + var componentStates = CreateComponentState(renderer, [(component1, null), (component2, null)], parentComponent); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + var messages = sink.Writes.Where(x => x.LogLevel >= LogLevel.Warning).ToList(); + Assert.Single(messages); + } + + [Fact] + public async Task PersistenceFails_MultipleComponentsUseTheSameKey() + { + // Arrange + var (logger, sink) = CreateTestLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + new ServiceCollection().BuildServiceProvider()); + + persistenceManager.State.InitializeExistingState(state, RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var parentComponent = new ParentComponent(); + + var componentStates = CreateComponentState(renderer, [(component1, "key1"), (component2, "key1")], parentComponent); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + var messages = sink.Writes.Where(x => x.LogLevel >= LogLevel.Warning).ToList(); + Assert.Single(messages); + } + + [Theory] + [MemberData(nameof(InvalidKeyTypesData))] + public async Task PersistenceFails_MultipleComponentsUseInvalidKeyTypes(object componentKeyType1, object componentKeyType2) + { + // Arrange + var (logger, sink) = CreateTestLogger(); + var state = new Dictionary(); + var store = new TestStore(state); + var persistenceManager = new ComponentStatePersistenceManager( + logger, + new ServiceCollection().BuildServiceProvider()); + + persistenceManager.State.InitializeExistingState(state, RestoreContext.InitialValue); + + var renderer = new TestRenderer(); + var component1 = new TestComponent { State = "state1" }; + var component2 = new TestComponent { State = "state2" }; + + var parentComponent = new ParentComponent(); + + var componentStates = CreateComponentState(renderer, [(component1, componentKeyType1), (component2, componentKeyType2)], parentComponent); + var componentState1 = componentStates[0]; + var componentState2 = componentStates[1]; + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + var provider = new PersistentStateValueProvider(persistenceManager.State, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + provider.Subscribe(componentState1, cascadingParameterInfo); + provider.Subscribe(componentState2, cascadingParameterInfo); + + // Act + await persistenceManager.PersistStateAsync(store, renderer); + + // Assert + var messages = sink.Writes.Where(x => x.LogLevel >= LogLevel.Warning).ToList(); + Assert.Single(messages); + } + + private static CascadingParameterInfo CreateCascadingParameterInfo(string propertyName, Type propertyType) + { + return new CascadingParameterInfo( + new PersistentStateAttribute(), + propertyName, + propertyType); + } + + private static List CreateComponentState( + TestRenderer renderer, + List<(IComponent, object)> components, + IComponent parentComponent = null) + { + var i = 1; + var parentComponentState = parentComponent != null ? new ComponentState(renderer, i++, parentComponent, null) : null; + var currentRenderTree = parentComponentState?.CurrentRenderTree; + var result = new List(); + foreach (var (component, key) in components) + { + var componentState = new ComponentState(renderer, i++, component, parentComponentState); + if (currentRenderTree != null && key != null) + { + // Open component based on the actual component type + if (component is TestComponent) + { + currentRenderTree.OpenComponent(0); + } + else if (component is ValueTypeTestComponent) + { + currentRenderTree.OpenComponent(0); + } + else + { + currentRenderTree.OpenComponent(0); + } + + var frames = currentRenderTree.GetFrames(); + frames.Array[frames.Count - 1].ComponentStateField = componentState; + if (key != null) + { + currentRenderTree.SetKey(key); + } + currentRenderTree.CloseComponent(); + } + + result.Add(componentState); + } + + return result; + } + + private class TestRenderer() : Renderer(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance) + { + public override Dispatcher Dispatcher => Dispatcher.CreateDefault(); + + protected override void HandleException(Exception exception) => throw new NotImplementedException(); + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) => throw new NotImplementedException(); + } + + private class TestComponent : IComponent + { + [PersistentState] + public string State { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class ValueTypeTestComponent : IComponent + { + [PersistentState] + public int IntValue { get; set; } + + [PersistentState] + public int? NullableIntValue { get; set; } + + [PersistentState] + public (string, int) TupleValue { get; set; } + + [PersistentState] + public (string, int)? NullableTupleValue { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class TestStore(Dictionary initialState) : IPersistentComponentStateStore + { + public IDictionary State { get; set; } = initialState; + + public Task> GetPersistedStateAsync() + { + return Task.FromResult(State); + } + + public Task PersistStateAsync(IReadOnlyDictionary state) + { + // We copy the data here because it's no longer available after this call completes. + State = state.ToDictionary(k => k.Key, v => v.Value); + return Task.CompletedTask; + } + } + + private class ParentComponent : IComponent + { + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } +} diff --git a/src/Components/Components/test/PersistentStateValueProviderTests.cs b/src/Components/Components/test/PersistentStateValueProviderTests.cs new file mode 100644 index 000000000000..65413bd335da --- /dev/null +++ b/src/Components/Components/test/PersistentStateValueProviderTests.cs @@ -0,0 +1,204 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Text.Json; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; + +namespace Microsoft.AspNetCore.Components; + +public class PersistentStateValueProviderTests +{ + [Fact] + public void CanRestoreState_ForComponentWithProperties() + { + // Arrange + var state = new PersistentComponentState( + new Dictionary(), + [], + []); + + var provider = new PersistentStateValueProvider(state, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + var renderer = new TestRenderer(); + var component = new TestComponent(); + var componentStates = CreateComponentState(renderer, [(component, null)], null); + var componentState = componentStates.First(); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + InitializeState(state, + new List<(ComponentState, string, string)> + { + (componentState, cascadingParameterInfo.PropertyName, "state") + }); + + provider.Subscribe(componentState, cascadingParameterInfo); + + // Act + var result = provider.GetCurrentValue(componentState, cascadingParameterInfo); + + // Assert + Assert.Equal("state", result); + } + + [Fact] + public void Subscribe_RegistersPersistenceCallback() + { + // Arrange + var state = new PersistentComponentState( + new Dictionary(), + [], + []); + + InitializeState(state, []); + + var provider = new PersistentStateValueProvider(state, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + var renderer = new TestRenderer(); + var component = new TestComponent(); + var componentStates = CreateComponentState(renderer, [(component, null)], null); + var componentState = componentStates.First(); + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + // Act + provider.Subscribe(componentState, cascadingParameterInfo); + + // Assert + Assert.Single(provider.Subscriptions); + } + + [Fact] + public void Unsubscribe_RemovesCallbackFromRegisteredCallbacks() + { + // Arrange + var state = new PersistentComponentState( + new Dictionary(), + [], + []); + + InitializeState(state, []); + + var provider = new PersistentStateValueProvider(state, NullLogger.Instance, new ServiceCollection().BuildServiceProvider()); + + var renderer = new TestRenderer(); + var component = new TestComponent(); + var componentStates = CreateComponentState(renderer, [(component, null)], null); + var componentState = componentStates.First(); + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + provider.Subscribe(componentState, cascadingParameterInfo); + + // Act + provider.Unsubscribe(componentState, cascadingParameterInfo); + + // Assert + Assert.Empty(provider.Subscriptions); + } + + private static void InitializeState(PersistentComponentState state, List<(ComponentState componentState, string propertyName, string value)> items) + { + var dictionary = new Dictionary(); + foreach (var item in items) + { + var key = PersistentStateValueProviderKeyResolver.ComputeKey(item.componentState, item.propertyName); + dictionary[key] = JsonSerializer.SerializeToUtf8Bytes(item.value, JsonSerializerOptions.Web); + } + state.InitializeExistingState(dictionary, RestoreContext.InitialValue); + } + + private static CascadingParameterInfo CreateCascadingParameterInfo(string propertyName, Type propertyType) + { + return new CascadingParameterInfo( + new PersistentStateAttribute(), + propertyName, + propertyType); + } + + private static List CreateComponentState( + TestRenderer renderer, + List<(IComponent, object)> components, + IComponent parentComponent = null) + { + var i = 1; + var parentComponentState = parentComponent != null ? new ComponentState(renderer, i++, parentComponent, null) : null; + var currentRenderTree = parentComponentState?.CurrentRenderTree; + var result = new List(); + foreach (var (component, key) in components) + { + var componentState = new ComponentState(renderer, i++, component, parentComponentState); + if (currentRenderTree != null && key != null) + { + // Open component based on the actual component type + if (component is TestComponent) + { + currentRenderTree.OpenComponent(0); + } + else if (component is ValueTypeTestComponent) + { + currentRenderTree.OpenComponent(0); + } + else + { + currentRenderTree.OpenComponent(0); + } + + var frames = currentRenderTree.GetFrames(); + frames.Array[frames.Count - 1].ComponentStateField = componentState; + if (key != null) + { + currentRenderTree.SetKey(key); + } + currentRenderTree.CloseComponent(); + } + + result.Add(componentState); + } + + return result; + } + + private class TestRenderer() : Renderer(new ServiceCollection().BuildServiceProvider(), NullLoggerFactory.Instance) + { + public override Dispatcher Dispatcher => Dispatcher.CreateDefault(); + + protected override void HandleException(Exception exception) => throw new NotImplementedException(); + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) => throw new NotImplementedException(); + } + + private class TestComponent : IComponent + { + [PersistentState] + public string State { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class ValueTypeTestComponent : IComponent + { + [PersistentState] + public int IntValue { get; set; } + + [PersistentState] + public int? NullableIntValue { get; set; } + + [PersistentState] + public (string, int) TupleValue { get; set; } + + [PersistentState] + public (string, int)? NullableTupleValue { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class ParentComponent : IComponent + { + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } +} diff --git a/src/Components/Components/test/PersistentValueProviderComponentSubscriptionTests.cs b/src/Components/Components/test/PersistentValueProviderComponentSubscriptionTests.cs new file mode 100644 index 000000000000..fe0be71cfa25 --- /dev/null +++ b/src/Components/Components/test/PersistentValueProviderComponentSubscriptionTests.cs @@ -0,0 +1,711 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Buffers; +using System.Runtime.ExceptionServices; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; + +namespace Microsoft.AspNetCore.Components; + +public class PersistentValueProviderComponentSubscriptionTests +{ + [Fact] + public void Constructor_CreatesSubscription_AndRegistersCallbacks() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "test-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Act + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Assert - Constructor should complete without throwing + Assert.NotNull(subscription); + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_ReturnsNull_WhenNotInitialized() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "test-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Null(result); + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_RestoresFromPersistentState_OnFirstCall() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "initial-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate the state with serialized data + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(TestComponent.State)); + initialState[key] = JsonSerializer.SerializeToUtf8Bytes("persisted-value", JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal("persisted-value", result); + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_ReturnsCurrentPropertyValue_AfterInitialization() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "current-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Initialize by calling once + subscription.GetOrComputeLastValue(); + + // Change the component's property value + component.State = "updated-value"; + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal("updated-value", result); + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_CanRestoreValueTypes() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new ValueTypeTestComponent { IntValue = 42 }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate the state with serialized data + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(ValueTypeTestComponent.IntValue)); + initialState[key] = JsonSerializer.SerializeToUtf8Bytes(123, JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.IntValue), typeof(int)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal(123, result); + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_CanRestoreNullableValueTypes() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new ValueTypeTestComponent { NullableIntValue = 42 }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate the state with serialized data + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(ValueTypeTestComponent.NullableIntValue)); + initialState[key] = JsonSerializer.SerializeToUtf8Bytes((int?)456, JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.NullableIntValue), typeof(int?)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal(456, result); + subscription.Dispose(); + } + + [Fact] + public void Dispose_DisposesSubscriptions() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "test-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act & Assert - Should not throw + subscription.Dispose(); + } + + [Fact] + public void GetOrComputeLastValue_ReturnsNull_WhenSkipInitialValueAndInitialContext() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "initial-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate the state with serialized data that should be skipped + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(TestComponent.State)); + initialState[key] = JsonSerializer.SerializeToUtf8Bytes("persisted-value", JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.InitialValue); + + var cascadingParameterInfo = CreateCascadingParameterInfoWithBehavior( + nameof(TestComponent.State), + typeof(string), + RestoreBehavior.SkipInitialValue); + + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + Assert.Null(result); + subscription.Dispose(); + } + + [Fact] + public async Task GetOrComputeLastValue_FollowsCorrectValueTransitionSequence() + { + // Arrange + var appState = new Dictionary(); + var manager = new ComponentStatePersistenceManager(NullLogger.Instance); + var state = manager.State; + var serviceProvider = PersistentStateProviderServiceCollectionExtensions.AddSupplyValueFromPersistentComponentStateProvider(new ServiceCollection()) + .AddSingleton(manager) + .AddSingleton(manager.State) + .AddFakeLogging() + .BuildServiceProvider(); + var renderer = new TestRenderer(serviceProvider); + var provider = (PersistentStateValueProvider)renderer.ServiceProviderCascadingValueSuppliers.Single(); + var component = new TestComponent { State = "initial-property-value" }; + var componentId = renderer.AssignRootComponentId(component); + var componentState = renderer.GetComponentState(component); + + // Pre-populate the state with serialized data + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(TestComponent.State)); + appState[key] = JsonSerializer.SerializeToUtf8Bytes("first-persisted-value", JsonSerializerOptions.Web); + await manager.RestoreStateAsync(new TestStore(appState), RestoreContext.InitialValue); + + await renderer.Dispatcher.InvokeAsync(() => renderer.RenderRootComponentAsync(componentId, ParameterView.Empty)); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + + // Act & Assert - First call: Returns restored value from state + Assert.Equal("first-persisted-value", provider.GetCurrentValue(componentState, cascadingParameterInfo)); + + // Change the component's property value + component.State = "updated-property-value"; + + // Second call: Returns the component's property value + var result2 = provider.GetCurrentValue(componentState, cascadingParameterInfo); + Assert.Equal("updated-property-value", result2); + + appState.Clear(); + var newState = new Dictionary + { + [key] = JsonSerializer.SerializeToUtf8Bytes("second-restored-value", JsonSerializerOptions.Web) + }; + // Simulate invoking the callback with a value update. + await renderer.Dispatcher.InvokeAsync(() => manager.RestoreStateAsync(new TestStore(newState), RestoreContext.ValueUpdate)); + Assert.Equal("second-restored-value", provider.GetCurrentValue(componentState, cascadingParameterInfo)); + + component.State = "another-updated-value"; + // Other calls: Returns the updated value from state + Assert.Equal("another-updated-value", provider.GetCurrentValue(componentState, cascadingParameterInfo)); + component.State = "final-updated-value"; + Assert.Equal("final-updated-value", provider.GetCurrentValue(componentState, cascadingParameterInfo)); + Assert.Equal("final-updated-value", provider.GetCurrentValue(componentState, cascadingParameterInfo)); + } + + [Fact] + public void GetOrComputeLastValue_UsesCustomSerializer_ForRestoration() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new CustomSerializerTestComponent { CustomValue = new CustomData { Value = "initial" } }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate the state with custom serialized data + var key = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(CustomSerializerTestComponent.CustomValue)); + var customSerializer = new TestCustomDataSerializer(); + var testData = new CustomData { Value = "restored-custom" }; + var writer = new ArrayBufferWriter(); + customSerializer.Persist(testData, writer); + initialState[key] = writer.WrittenSpan.ToArray(); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var cascadingParameterInfo = CreateCascadingParameterInfo( + nameof(CustomSerializerTestComponent.CustomValue), + typeof(CustomData)); + + var serviceProvider = new ServiceCollection() + .AddSingleton, TestCustomDataSerializer>() + .BuildServiceProvider(); + var logger = NullLogger.Instance; + + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + // Act + var result = subscription.GetOrComputeLastValue(); + + // Assert + var customDataResult = Assert.IsType(result); + Assert.Equal("restored-custom", customDataResult.Value); + subscription.Dispose(); + } + + [Fact] + public void CanPersistAndRestore_MultipleProperties_OnSameComponent() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new MultiplePropertiesComponent + { + StringValue = "initial-string", + IntValue = 42, + BoolValue = true + }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate state for all properties + var stringKey = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(MultiplePropertiesComponent.StringValue)); + var intKey = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(MultiplePropertiesComponent.IntValue)); + var boolKey = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(MultiplePropertiesComponent.BoolValue)); + + initialState[stringKey] = JsonSerializer.SerializeToUtf8Bytes("restored-string", JsonSerializerOptions.Web); + initialState[intKey] = JsonSerializer.SerializeToUtf8Bytes(123, JsonSerializerOptions.Web); + initialState[boolKey] = JsonSerializer.SerializeToUtf8Bytes(false, JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Create subscriptions for each property + var stringSubscription = new PersistentValueProviderComponentSubscription( + state, componentState, + CreateCascadingParameterInfo(nameof(MultiplePropertiesComponent.StringValue), typeof(string)), + serviceProvider, logger); + + var intSubscription = new PersistentValueProviderComponentSubscription( + state, componentState, + CreateCascadingParameterInfo(nameof(MultiplePropertiesComponent.IntValue), typeof(int)), + serviceProvider, logger); + + var boolSubscription = new PersistentValueProviderComponentSubscription( + state, componentState, + CreateCascadingParameterInfo(nameof(MultiplePropertiesComponent.BoolValue), typeof(bool)), + serviceProvider, logger); + + // Act + var stringResult = stringSubscription.GetOrComputeLastValue(); + var intResult = intSubscription.GetOrComputeLastValue(); + var boolResult = boolSubscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal("restored-string", stringResult); + Assert.Equal(123, intResult); + Assert.Equal(false, boolResult); + + // Cleanup + stringSubscription.Dispose(); + intSubscription.Dispose(); + boolSubscription.Dispose(); + } + + [Fact] + public void CanPersistAndRestore_DifferentPropertyTypes_OnSameComponent() + { + // Arrange + var initialState = new Dictionary(); + var state = new PersistentComponentState(initialState, [], []); + var renderer = new TestRenderer(); + var component = new ValueTypeTestComponent + { + IntValue = 42, + NullableIntValue = 100 + }; + var componentState = CreateComponentState(renderer, component, null, null); + + // Pre-populate state for different property types + var intKey = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(ValueTypeTestComponent.IntValue)); + var nullableIntKey = PersistentStateValueProviderKeyResolver.ComputeKey(componentState, nameof(ValueTypeTestComponent.NullableIntValue)); + + initialState[intKey] = JsonSerializer.SerializeToUtf8Bytes(999, JsonSerializerOptions.Web); + initialState[nullableIntKey] = JsonSerializer.SerializeToUtf8Bytes((int?)777, JsonSerializerOptions.Web); + state.InitializeExistingState(initialState, RestoreContext.LastSnapshot); + + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Create subscriptions for different property types + var intSubscription = new PersistentValueProviderComponentSubscription( + state, componentState, + CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.IntValue), typeof(int)), + serviceProvider, logger); + + var nullableIntSubscription = new PersistentValueProviderComponentSubscription( + state, componentState, + CreateCascadingParameterInfo(nameof(ValueTypeTestComponent.NullableIntValue), typeof(int?)), + serviceProvider, logger); + + // Act + var intResult = intSubscription.GetOrComputeLastValue(); + var nullableIntResult = nullableIntSubscription.GetOrComputeLastValue(); + + // Assert + Assert.Equal(999, intResult); + Assert.Equal(777, nullableIntResult); + + // Cleanup + intSubscription.Dispose(); + nullableIntSubscription.Dispose(); + } + + private static CascadingParameterInfo CreateCascadingParameterInfo(string propertyName, Type propertyType) + { + return new CascadingParameterInfo( + new PersistentStateAttribute(), + propertyName, + propertyType); + } + + private static CascadingParameterInfo CreateCascadingParameterInfoWithBehavior( + string propertyName, + Type propertyType, + RestoreBehavior restoreBehavior, + bool allowUpdates = false) + { + return new CascadingParameterInfo( + new PersistentStateAttribute + { + RestoreBehavior = restoreBehavior, + AllowUpdates = allowUpdates + }, + propertyName, + propertyType); + } + + private static ComponentState CreateComponentState( + TestRenderer renderer, + IComponent component, + IComponent parentComponent, + object key) + { + var parentComponentState = parentComponent != null + ? new ComponentState(renderer, 1, parentComponent, null) + : null; + var componentState = new ComponentState(renderer, 2, component, parentComponentState); + + if (parentComponentState != null && parentComponentState.CurrentRenderTree != null && key != null) + { + var currentRenderTree = parentComponentState.CurrentRenderTree; + + // Open component based on the actual component type + if (component is TestComponent) + { + currentRenderTree.OpenComponent(0); + } + else if (component is ValueTypeTestComponent) + { + currentRenderTree.OpenComponent(0); + } + else + { + currentRenderTree.OpenComponent(0); + } + + var frames = currentRenderTree.GetFrames(); + frames.Array[frames.Count - 1].ComponentStateField = componentState; + currentRenderTree.SetKey(key); + currentRenderTree.CloseComponent(); + } + + return componentState; + } + + private class TestRenderer(IServiceProvider serviceProvider) : Renderer(serviceProvider, NullLoggerFactory.Instance) + { + public TestRenderer() : this(new ServiceCollection().BuildServiceProvider()) { } + + public override Dispatcher Dispatcher => new TestDispatcher(); + + protected override void HandleException(Exception exception) => ExceptionDispatchInfo.Capture(exception); + protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) => throw new NotImplementedException(); + } + + private class TestDispatcher : Dispatcher + { + public override bool CheckAccess() => true; + public override Task InvokeAsync(Action workItem) + { + workItem(); + return Task.CompletedTask; + } + + public override Task InvokeAsync(Func workItem) + { + return workItem(); + } + public override Task InvokeAsync(Func workItem) + { + return Task.FromResult(workItem()); + } + public override Task InvokeAsync(Func> workItem) + { + return workItem(); + } + } + + private class TestComponent : IComponent + { + [PersistentState(AllowUpdates = true)] + public string State { get; set; } + + public void Attach(RenderHandle renderHandle) + { + } + + public Task SetParametersAsync(ParameterView parameters) + { + parameters.SetParameterProperties(this); + return Task.CompletedTask; + } + } + + private class ValueTypeTestComponent : IComponent + { + [PersistentState] + public int IntValue { get; set; } + + [PersistentState] + public int? NullableIntValue { get; set; } + + [PersistentState] + public (string, int) TupleValue { get; set; } + + [PersistentState] + public (string, int)? NullableTupleValue { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class MultiplePropertiesComponent : IComponent + { + [PersistentState] + public string StringValue { get; set; } + + [PersistentState] + public int IntValue { get; set; } + + [PersistentState] + public bool BoolValue { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class CustomSerializerTestComponent : IComponent + { + [PersistentState] + public CustomData CustomValue { get; set; } + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class CustomData + { + public string Value { get; set; } + } + + private class TestCustomDataSerializer : PersistentComponentStateSerializer + { + public override void Persist(CustomData value, IBufferWriter writer) + { + var json = JsonSerializer.SerializeToUtf8Bytes($"CUSTOM:{value.Value}"); + writer.Write(json); + } + + public override CustomData Restore(ReadOnlySequence data) + { + var json = JsonSerializer.Deserialize(data.ToArray()); + var value = json.StartsWith("CUSTOM:", StringComparison.Ordinal) ? json.Substring(7) : json; + return new CustomData { Value = value }; + } + } + + private class ParentComponent : IComponent + { + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class TestStore(IDictionary state) : IPersistentComponentStateStore + { + public Task> GetPersistedStateAsync() => Task.FromResult(state); + public Task PersistStateAsync(IReadOnlyDictionary state) => throw new NotImplementedException(); + } + + private class ComponentWithPrivateProperty : IComponent + { + [PersistentState] + private string PrivateValue { get; set; } = "initial"; + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + private class ComponentWithPrivateGetter : IComponent + { + [PersistentState] + public string PropertyWithPrivateGetter { private get; set; } = "initial"; + + public void Attach(RenderHandle renderHandle) => throw new NotImplementedException(); + public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); + } + + [Fact] + public void Constructor_ThrowsClearException_ForPrivateProperty() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new ComponentWithPrivateProperty(); + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo("PrivateValue", typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Act & Assert + var exception = Assert.Throws(() => + new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger)); + + // Should throw a clear error about needing a public property with public getter + Assert.Contains("A public property", exception.Message); + Assert.Contains("with a public getter wasn't found", exception.Message); + } + + [Fact] + public void Constructor_ThrowsClearException_ForPrivateGetter() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new ComponentWithPrivateGetter(); + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(ComponentWithPrivateGetter.PropertyWithPrivateGetter), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Act & Assert + var exception = Assert.Throws(() => + new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger)); + + // Should throw a clear error about needing a public property with public getter + Assert.Contains("A public property", exception.Message); + Assert.Contains("with a public getter wasn't found", exception.Message); + } + + [Fact] + public void Constructor_WorksCorrectly_ForPublicProperty() + { + // Arrange + var state = new PersistentComponentState(new Dictionary(), [], []); + state.InitializeExistingState(new Dictionary(), RestoreContext.InitialValue); + var renderer = new TestRenderer(); + var component = new TestComponent { State = "test-value" }; + var componentState = CreateComponentState(renderer, component, null, null); + var cascadingParameterInfo = CreateCascadingParameterInfo(nameof(TestComponent.State), typeof(string)); + var serviceProvider = new ServiceCollection().BuildServiceProvider(); + var logger = NullLogger.Instance; + + // Act & Assert - Should not throw + var subscription = new PersistentValueProviderComponentSubscription( + state, componentState, cascadingParameterInfo, serviceProvider, logger); + + Assert.NotNull(subscription); + subscription.Dispose(); + } +} diff --git a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs index aebcfcd4b692..4d495f690b47 100644 --- a/src/Components/Components/test/RenderTreeDiffBuilderTest.cs +++ b/src/Components/Components/test/RenderTreeDiffBuilderTest.cs @@ -1736,6 +1736,9 @@ public void SkipsUpdatingParametersOnChildComponentsIfAllAreDefinitelyImmutableA // Arrange: Populate old and new with equivalent content RenderFragment fragmentWillNotChange = builder => throw new NotImplementedException(); var dateTimeWillNotChange = DateTime.Now; + var dateOnlyWillNotChange = DateOnly.FromDateTime(dateTimeWillNotChange); + var timeOnlyWillNotChange = TimeOnly.FromDateTime(dateTimeWillNotChange); + foreach (var tree in new[] { oldTree, newTree }) { tree.OpenComponent(0); @@ -1758,6 +1761,8 @@ public void SkipsUpdatingParametersOnChildComponentsIfAllAreDefinitelyImmutableA tree.AddComponentParameter(1, "MyEnum", StringComparison.OrdinalIgnoreCase); tree.AddComponentParameter(1, "MyEventCallback", EventCallback.Empty); tree.AddComponentParameter(1, "MyEventCallbackOfT", EventCallback.Empty); + tree.AddComponentParameter(1, "MyDateOnly", dateOnlyWillNotChange); + tree.AddComponentParameter(1, "MyTimeOnly", timeOnlyWillNotChange); tree.CloseComponent(); } diff --git a/src/Components/Components/test/RendererTest.cs b/src/Components/Components/test/RendererTest.cs index a71ff665d740..90d46f746d03 100644 --- a/src/Components/Components/test/RendererTest.cs +++ b/src/Components/Components/test/RendererTest.cs @@ -4,6 +4,7 @@ using System.Collections.Concurrent; using System.Diagnostics; using System.Globalization; +using System.Reflection; using System.Runtime.ExceptionServices; using Microsoft.AspNetCore.Components.CompilerServices; using Microsoft.AspNetCore.Components.HotReload; @@ -3065,8 +3066,8 @@ public void QueuedRenderIsSkippedIfComponentWasAlreadyDisposedInSameBatch() // Assert: correct render result Assert.True(renderTask.IsCompletedSuccessfully); var newBatch = renderer.Batches.Skip(1).Single(); - Assert.Equal(1, newBatch.DisposedComponentIDs.Count); - Assert.Equal(1, newBatch.DiffsByComponentId.Count); + Assert.Single(newBatch.DisposedComponentIDs); + Assert.Single(newBatch.DiffsByComponentId); Assert.Collection(newBatch.DiffsByComponentId[componentId].Single().Edits, edit => { @@ -3433,7 +3434,7 @@ public void DoesNotCallOnAfterRenderForComponentsNotRendered() // Assert: Only the re-rendered component was notified of "after render" var batch2 = renderer.Batches.Skip(1).Single(); Assert.Equal(2, batch2.DiffsInOrder.Count); // Parent and first child - Assert.Equal(1, batch2.DisposedComponentIDs.Count); // Third child + Assert.Single(batch2.DisposedComponentIDs); // Third child Assert.Equal(2, childComponents[0].OnAfterRenderCallCount); // Retained and re-rendered Assert.Equal(1, childComponents[1].OnAfterRenderCallCount); // Retained and not re-rendered Assert.Equal(1, childComponents[2].OnAfterRenderCallCount); // Disposed @@ -5027,6 +5028,40 @@ public async Task DisposingRenderer_UnsubsribesFromHotReloadManager() Assert.False(hotReloadManager.IsSubscribedTo); } + [Fact] + public async Task HotReload_ReRenderPreservesAsyncLocalValues() + { + await using var renderer = new TestRenderer(); + + var hotReloadManager = new HotReloadManager { MetadataUpdateSupported = true }; + renderer.HotReloadManager = hotReloadManager; + HotReloadManager.Default.MetadataUpdateSupported = true; + + var component = new AsyncLocalCaptureComponent(); + + // Establish AsyncLocal value before registering hot reload handler / rendering. + ServiceAccessor.TestAsyncLocal.Value = "AmbientValue"; + + var componentId = renderer.AssignRootComponentId(component); + await renderer.Dispatcher.InvokeAsync(() => renderer.RenderRootComponentAsync(componentId)); + + // Sanity: initial render should not have captured a hot-reload value yet. + Assert.Null(component.HotReloadValue); + + // Simulate hot reload delta applied from a fresh thread (different ExecutionContext) so the AsyncLocal value is lost. + var expected = ServiceAccessor.TestAsyncLocal.Value; + var thread = new Thread(() => + { + // Simulate environment where the ambient value is not present on the hot reload thread. + ServiceAccessor.TestAsyncLocal.Value = null; + hotReloadManager.TriggerOnDeltaApplied(); + }); + thread.Start(); + thread.Join(); + + Assert.Equal(expected, component.HotReloadValue); + } + [Fact] public void ThrowsForUnknownRenderMode_OnComponentType() { @@ -5180,6 +5215,34 @@ protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) => Task.CompletedTask; } + private class ServiceAccessor + { + public static AsyncLocal TestAsyncLocal = new AsyncLocal(); + } + + private class AsyncLocalCaptureComponent : IComponent + { + private bool _initialized; + private RenderHandle _renderHandle; + public string HotReloadValue { get; private set; } + + public void Attach(RenderHandle renderHandle) => _renderHandle = renderHandle; + + public Task SetParametersAsync(ParameterView parameters) + { + if (!_initialized) + { + _initialized = true; // First (normal) render, don't capture. + } + else + { + // Hot reload re-render path. + HotReloadValue = ServiceAccessor.TestAsyncLocal.Value; + } + return Task.CompletedTask; + } + } + private class TestComponent : IComponent, IDisposable { private RenderHandle _renderHandle; diff --git a/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs b/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs index e0f0d984899d..33e6cc1e0e40 100644 --- a/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs +++ b/src/Components/Components/test/Rendering/RendererSynchronizationContextTest.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Globalization; +using Microsoft.AspNetCore.InternalTesting; namespace Microsoft.AspNetCore.Components.Rendering; @@ -156,6 +157,7 @@ public async Task Post_CanRunAsynchronously_CaptureExecutionContext() } [Fact] + [QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/61639")] public async Task Post_CanRunAsynchronously_WhenBusy_Exception() { // Arrange diff --git a/src/Components/Components/test/ResourceAssetCollectionTest.cs b/src/Components/Components/test/ResourceAssetCollectionTest.cs index fa1ed1c09f09..04502d37640b 100644 --- a/src/Components/Components/test/ResourceAssetCollectionTest.cs +++ b/src/Components/Components/test/ResourceAssetCollectionTest.cs @@ -1,6 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Text.Json; +using System.Text.Json.Serialization; + namespace Microsoft.AspNetCore.Components; public class ResourceAssetCollectionTest @@ -17,7 +20,7 @@ public void CanCreateResourceCollection() var collectionAsReadOnlyList = resourceAssetCollection as IReadOnlyList; // Assert - Assert.Equal(1, collectionAsReadOnlyList.Count); + Assert.Single(collectionAsReadOnlyList); Assert.Equal("image1.jpg", collectionAsReadOnlyList[0].Url); } @@ -85,4 +88,68 @@ [new ResourceAssetProperty("label", "image2.jpg")]), Assert.False(isContentSpecificUrl1); Assert.True(isContentSpecificUrl2); } + + [Fact] + public void ResourceAsset_CanSerializeAndDeserialize_WithoutRespectRequiredConstructorParameters() + { + // Arrange + var originalAsset = new ResourceAsset("test-url", null); + var options = new JsonSerializerOptions { WriteIndented = true }; + + // Act + var json = JsonSerializer.Serialize(originalAsset, options); + var deserializedAsset = JsonSerializer.Deserialize(json, options); + + // Assert + Assert.NotNull(deserializedAsset); + Assert.Equal("test-url", deserializedAsset.Url); + Assert.Null(deserializedAsset.Properties); + } + + [Fact] + public void ResourceAsset_CanSerializeAndDeserialize_WithRespectRequiredConstructorParameters() + { + // Arrange + var originalAsset = new ResourceAsset("test-url", null); + var options = new JsonSerializerOptions + { + WriteIndented = true, + RespectRequiredConstructorParameters = true + }; + + // Act + var json = JsonSerializer.Serialize(originalAsset, options); + var deserializedAsset = JsonSerializer.Deserialize(json, options); + + // Assert + Assert.NotNull(deserializedAsset); + Assert.Equal("test-url", deserializedAsset.Url); + Assert.Null(deserializedAsset.Properties); + } + + [Fact] + public void ResourceAsset_WithSourceGenerationContext_CanSerializeAndDeserializeWithRespectRequiredConstructorParameters() + { + // Arrange - this test simulates the context from ResourceCollectionUrlEndpoint + var originalAsset = new ResourceAsset("test-url", null); + var assets = new List { originalAsset }; + + // Use a custom JsonSerializerOptions that mimics the source-generated context behavior + var options = new JsonSerializerOptions + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault, + WriteIndented = false, + RespectRequiredConstructorParameters = true + }; + + // Act + var json = JsonSerializer.Serialize>(assets, options); + var deserializedAssets = JsonSerializer.Deserialize>(json, options); + + // Assert + Assert.NotNull(deserializedAssets); + Assert.Single(deserializedAssets); + Assert.Equal("test-url", deserializedAssets[0].Url); + Assert.Null(deserializedAssets[0].Properties); + } } diff --git a/src/Components/Components/test/Routing/RouterTest.cs b/src/Components/Components/test/Routing/RouterTest.cs index 2e8a05bd9145..e3c7f5dafaae 100644 --- a/src/Components/Components/test/Routing/RouterTest.cs +++ b/src/Components/Components/test/Routing/RouterTest.cs @@ -1,8 +1,11 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +#pragma warning disable CS0618 // Type or member is obsolete + using System.Reflection; using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.Test.Helpers; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -111,7 +114,7 @@ public async Task AlreadyCanceledOnNavigateAsyncDoesNothing() Assert.True(true); return; } - Assert.True(false, "OnUpdateDisplay called more than once."); + Assert.Fail("OnUpdateDisplay called more than once."); }; _router.OnNavigateAsync = new EventCallback(null, OnNavigateAsync); @@ -164,7 +167,7 @@ public async Task RefreshesOnceOnCancelledOnNavigateAsync() Assert.True(true); return; } - Assert.True(false, "OnUpdateDisplay called more than once."); + Assert.Fail("OnUpdateDisplay called more than once."); }; _router.OnNavigateAsync = new EventCallback(null, OnNavigateAsync); @@ -265,6 +268,226 @@ await _renderer.Dispatcher.InvokeAsync(() => Assert.Equal("Not found", renderedFrame.TextContent); } + [Fact] + public async Task ThrowsExceptionWhenBothNotFoundAndNotFoundPageAreSet() + { + // Arrange + var services = new ServiceCollection(); + services.AddSingleton(NullLoggerFactory.Instance); + services.AddSingleton(_navigationManager); + services.AddSingleton(); + services.AddSingleton(); + var serviceProvider = services.BuildServiceProvider(); + + var renderer = new TestRenderer(serviceProvider); + renderer.ShouldHandleExceptions = true; + var router = (Router)renderer.InstantiateComponent(); + router.AppAssembly = Assembly.GetExecutingAssembly(); + router.Found = routeData => (builder) => builder.AddContent(0, $"Rendering route matching {routeData.PageType}"); + renderer.AssignRootComponentId(router); + + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly }, + { nameof(Router.NotFound), (RenderFragment)(builder => builder.AddContent(0, "Custom not found")) }, + { nameof(Router.NotFoundPage), typeof(NotFoundTestComponent) } + }; + + // Act & Assert + var exception = await Assert.ThrowsAsync(async () => + await renderer.Dispatcher.InvokeAsync(() => + router.SetParametersAsync(ParameterView.FromDictionary(parameters)))); + + Assert.Contains("Setting NotFound and NotFoundPage properties simultaneously is not supported", exception.Message); + Assert.Contains("Use either NotFound or NotFoundPage", exception.Message); + } + + [Fact] + public async Task OnNotFound_WithNotFoundPageSet_UsesNotFoundPage() + { + // Create a new router instance for this test to control Attach() timing + var services = new ServiceCollection(); + var testNavManager = new TestNavigationManager(); + services.AddSingleton(NullLoggerFactory.Instance); + services.AddSingleton(testNavManager); + services.AddSingleton(); + services.AddSingleton(); + var serviceProvider = services.BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + testRenderer.ShouldHandleExceptions = true; + var testRouter = (Router)testRenderer.InstantiateComponent(); + testRouter.AppAssembly = Assembly.GetExecutingAssembly(); + testRouter.Found = routeData => (builder) => builder.AddContent(0, $"Rendering route matching {routeData.PageType}"); + + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly }, + { nameof(Router.NotFoundPage), typeof(NotFoundTestComponent) } + }; + + // Assign the root component ID which will call Attach() + testRenderer.AssignRootComponentId(testRouter); + + // Act + await testRenderer.Dispatcher.InvokeAsync(() => + testRouter.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + // Trigger the NavigationManager's OnNotFound event + await testRenderer.Dispatcher.InvokeAsync(() => testNavManager.TriggerNotFound()); + + // Assert + var lastBatch = testRenderer.Batches.Last(); + var renderedFrame = lastBatch.ReferenceFrames.First(); + Assert.Equal(RenderTreeFrameType.Component, renderedFrame.FrameType); + Assert.Equal(typeof(RouteView), renderedFrame.ComponentType); + + // Verify that the RouteData contains the NotFoundTestComponent + var routeViewFrame = lastBatch.ReferenceFrames.Skip(1).First(); + Assert.Equal(RenderTreeFrameType.Attribute, routeViewFrame.FrameType); + var routeData = (RouteData)routeViewFrame.AttributeValue; + Assert.Equal(typeof(NotFoundTestComponent), routeData.PageType); + } + + [Fact] + public async Task OnNotFound_WithArgsPathSet_RendersComponentByRoute() + { + // Create a new router instance for this test to control Attach() timing + var services = new ServiceCollection(); + var testNavManager = new TestNavigationManager(); + services.AddSingleton(NullLoggerFactory.Instance); + services.AddSingleton(testNavManager); + services.AddSingleton(); + services.AddSingleton(); + var serviceProvider = services.BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + testRenderer.ShouldHandleExceptions = true; + var testRouter = (Router)testRenderer.InstantiateComponent(); + testRouter.AppAssembly = Assembly.GetExecutingAssembly(); + testRouter.Found = routeData => (builder) => builder.AddContent(0, $"Rendering route matching {routeData.PageType}"); + + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly } + }; + + // Subscribe to OnNotFound event BEFORE router attaches and set args.Path + testNavManager.OnNotFound += (sender, args) => + { + args.Path = "/jan"; // Point to an existing route + }; + + // Assign the root component ID which will call Attach() + testRenderer.AssignRootComponentId(testRouter); + + // Act + await testRenderer.Dispatcher.InvokeAsync(() => + testRouter.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + // Trigger the NavigationManager's OnNotFound event + await testRenderer.Dispatcher.InvokeAsync(() => testNavManager.TriggerNotFound()); + + // Assert + var lastBatch = testRenderer.Batches.Last(); + var renderedFrame = lastBatch.ReferenceFrames.First(); + Assert.Equal(RenderTreeFrameType.Component, renderedFrame.FrameType); + Assert.Equal(typeof(RouteView), renderedFrame.ComponentType); + + // Verify that the RouteData contains the correct component type + var routeViewFrame = lastBatch.ReferenceFrames.Skip(1).First(); + Assert.Equal(RenderTreeFrameType.Attribute, routeViewFrame.FrameType); + var routeData = (RouteData)routeViewFrame.AttributeValue; + Assert.Equal(typeof(JanComponent), routeData.PageType); + } + + [Fact] + public async Task OnNotFound_WithBothNotFoundPageAndArgsPath_PreferArgs() + { + // Create a new router instance for this test to control Attach() timing + var services = new ServiceCollection(); + var testNavManager = new TestNavigationManager(); + services.AddSingleton(NullLoggerFactory.Instance); + services.AddSingleton(testNavManager); + services.AddSingleton(); + services.AddSingleton(); + var serviceProvider = services.BuildServiceProvider(); + + var testRenderer = new TestRenderer(serviceProvider); + testRenderer.ShouldHandleExceptions = true; + var testRouter = (Router)testRenderer.InstantiateComponent(); + testRouter.AppAssembly = Assembly.GetExecutingAssembly(); + testRouter.Found = routeData => (builder) => builder.AddContent(0, $"Rendering route matching {routeData.PageType}"); + + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly }, + { nameof(Router.NotFoundPage), typeof(NotFoundTestComponent) } + }; + + // Subscribe to OnNotFound event BEFORE router attaches and sets up its own subscription + testNavManager.OnNotFound += (sender, args) => + { + args.Path = "/jan"; // This should take precedence over NotFoundPage + }; + + // Now assign the root component ID which will call Attach() + testRenderer.AssignRootComponentId(testRouter); + + await testRenderer.Dispatcher.InvokeAsync(() => + testRouter.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + // trigger the NavigationManager's OnNotFound event + await testRenderer.Dispatcher.InvokeAsync(() => testNavManager.TriggerNotFound()); + + // The Router should have rendered using RenderComponentByRoute (args.Path) instead of NotFoundPage + var lastBatch = testRenderer.Batches.Last(); + var renderedFrame = lastBatch.ReferenceFrames.First(); + Assert.Equal(RenderTreeFrameType.Component, renderedFrame.FrameType); + Assert.Equal(typeof(RouteView), renderedFrame.ComponentType); + + // Verify that the RouteData contains the JanComponent (from args.Path), not NotFoundTestComponent + var routeViewFrame = lastBatch.ReferenceFrames.Skip(1).First(); + Assert.Equal(RenderTreeFrameType.Attribute, routeViewFrame.FrameType); + var routeData = (RouteData)routeViewFrame.AttributeValue; + Assert.Equal(typeof(JanComponent), routeData.PageType); + } + + [Fact] + public async Task FindComponentTypeByRoute_WithValidRoute_ReturnsComponentType() + { + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly } + }; + + await _renderer.Dispatcher.InvokeAsync(() => + _router.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + var result = _router.FindComponentTypeByRoute("/jan"); + Assert.Equal(typeof(JanComponent), result); + } + + [Fact] + public async Task RenderComponentByRoute_WithInvalidRoute_ThrowsException() + { + var parameters = new Dictionary + { + { nameof(Router.AppAssembly), typeof(RouterTest).Assembly } + }; + + await _renderer.Dispatcher.InvokeAsync(() => + _router.SetParametersAsync(ParameterView.FromDictionary(parameters))); + + var builder = new RenderTreeBuilder(); + + var exception = Assert.Throws(() => + { + _router.RenderComponentByRoute(builder, "/nonexistent-route"); + }); + Assert.Contains("No component found for route '/nonexistent-route'", exception.Message); + } + internal class TestNavigationManager : NavigationManager { public TestNavigationManager() => @@ -275,6 +498,11 @@ public void NotifyLocationChanged(string uri, bool intercepted, string state = n Uri = uri; NotifyLocationChanged(intercepted); } + + public void TriggerNotFound() + { + base.NotFound(); + } } internal sealed class TestNavigationInterception : INavigationInterception @@ -306,4 +534,8 @@ public class MatchAnythingComponent : ComponentBase { } [Route("a/b/c")] public class MultiSegmentRouteComponent : ComponentBase { } + + [Route("not-found")] + public class NotFoundTestComponent : ComponentBase { } + } diff --git a/src/Components/ComponentsNoDeps.slnf b/src/Components/ComponentsNoDeps.slnf index 854164ba02f3..da9756cc39ed 100644 --- a/src/Components/ComponentsNoDeps.slnf +++ b/src/Components/ComponentsNoDeps.slnf @@ -1,6 +1,6 @@ { "solution": { - "path": "..\\..\\AspNetCore.sln", + "path": "..\\..\\AspNetCore.slnx", "projects": [ "src\\Components\\Analyzers\\src\\Microsoft.AspNetCore.Components.Analyzers.csproj", "src\\Components\\Analyzers\\test\\Microsoft.AspNetCore.Components.Analyzers.Tests.csproj", @@ -15,6 +15,7 @@ "src\\Components\\Forms\\src\\Microsoft.AspNetCore.Components.Forms.csproj", "src\\Components\\Forms\\test\\Microsoft.AspNetCore.Components.Forms.Tests.csproj", "src\\Components\\Samples\\BlazorServerApp\\BlazorServerApp.csproj", + "src\\Components\\Samples\\BlazorUnitedApp.Client\\BlazorUnitedApp.Client.csproj", "src\\Components\\Samples\\BlazorUnitedApp\\BlazorUnitedApp.csproj", "src\\Components\\Server\\src\\Microsoft.AspNetCore.Components.Server.csproj", "src\\Components\\Server\\test\\Microsoft.AspNetCore.Components.Server.Tests.csproj", @@ -44,6 +45,7 @@ "src\\Components\\WebView\\WebView\\test\\Microsoft.AspNetCore.Components.WebView.Test.csproj", "src\\Components\\Web\\src\\Microsoft.AspNetCore.Components.Web.csproj", "src\\Components\\Web\\test\\Microsoft.AspNetCore.Components.Web.Tests.csproj", + "src\\Components\\benchmarkapps\\BlazingPizza.Server\\BlazingPizza.Server.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\ConsoleHost\\Wasm.Performance.ConsoleHost.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\Driver\\Wasm.Performance.Driver.csproj", "src\\Components\\benchmarkapps\\Wasm.Performance\\TestApp\\Wasm.Performance.TestApp.csproj", @@ -51,6 +53,7 @@ "src\\Components\\test\\testassets\\BasicTestApp\\BasicTestApp.csproj", "src\\Components\\test\\testassets\\Components.TestServer\\Components.TestServer.csproj", "src\\Components\\test\\testassets\\Components.WasmMinimal\\Components.WasmMinimal.csproj", + "src\\Components\\test\\testassets\\Components.WasmRemoteAuthentication\\Components.WasmRemoteAuthentication.csproj", "src\\Components\\test\\testassets\\ComponentsApp.App\\ComponentsApp.App.csproj", "src\\Components\\test\\testassets\\ComponentsApp.Server\\ComponentsApp.Server.csproj", "src\\Components\\test\\testassets\\GlobalizationWasmApp\\GlobalizationWasmApp.csproj", @@ -59,4 +62,4 @@ "src\\Components\\test\\testassets\\TestContentPackage\\TestContentPackage.csproj" ] } -} \ No newline at end of file +} diff --git a/src/Components/CustomElements/src/Microsoft.AspNetCore.Components.CustomElements.csproj b/src/Components/CustomElements/src/Microsoft.AspNetCore.Components.CustomElements.csproj index 4c5ae75fa8a4..ff095e9c9421 100644 --- a/src/Components/CustomElements/src/Microsoft.AspNetCore.Components.CustomElements.csproj +++ b/src/Components/CustomElements/src/Microsoft.AspNetCore.Components.CustomElements.csproj @@ -18,9 +18,12 @@ - + <_JsBuildOutput Include="$(InteropWorkingDir)dist\$(Configuration)\**" Exclude="$(InteropWorkingDir)dist\.gitignore" /> + <_JsBuildOutput> + %(_JsBuildOutput.RecursiveDir)%(Filename)%(Extension) + + + + + + + + diff --git a/src/Components/CustomElements/src/js/package.json b/src/Components/CustomElements/src/js/package.json index 1a0f6c53fbfb..952782ecdec4 100644 --- a/src/Components/CustomElements/src/js/package.json +++ b/src/Components/CustomElements/src/js/package.json @@ -1,6 +1,6 @@ { "private": true, - "name": "microsoft.components.customelements", + "name": "@microsoft/microsoft.components.customelements", "scripts": { "clean": "rimraf ./dist/Debug ./dist/Release", "prebuild": "npm run clean", diff --git a/src/Components/Directory.Build.props b/src/Components/Directory.Build.props index 45dda95456a2..84597f2f45f6 100644 --- a/src/Components/Directory.Build.props +++ b/src/Components/Directory.Build.props @@ -18,4 +18,13 @@ false + + + true + $(RepoRoot)src\Components\Web.JS\dist\Debug + $(RepoRoot)src\Components\Web.JS\dist\Release + + + + diff --git a/src/Components/Directory.Build.targets b/src/Components/Directory.Build.targets index 9daad5570fdc..03b9ef363c40 100644 --- a/src/Components/Directory.Build.targets +++ b/src/Components/Directory.Build.targets @@ -1,21 +1,11 @@  - + $(RepoRoot)src\Components\Web.JS\dist\Debug\blazor.webassembly.js $(RepoRoot)src\Components\Web.JS\dist\Release\blazor.webassembly.js $(BlazorWebAssemblyJSPath).map - - <_BlazorDevServerPath>$(ArtifactsDir)bin/Microsoft.AspNetCore.Components.WebAssembly.DevServer/$(Configuration)/$(DefaultNetCoreTargetFramework)/blazor-devserver.dll - dotnet - <_RunExtraArguments Condition="'$(WasmEnableThreads)' == 'true'">--apply-cop-headers - exec "$(_BlazorDevServerPath)" --applicationpath "$(TargetPath)" $(_RunExtraArguments) $(AdditionalRunArguments) - - - - diff --git a/src/Components/Endpoints/src/Assets/ResourcePreloader.cs b/src/Components/Endpoints/src/Assets/ResourcePreloader.cs new file mode 100644 index 000000000000..ffe6e2f785c9 --- /dev/null +++ b/src/Components/Endpoints/src/Assets/ResourcePreloader.cs @@ -0,0 +1,76 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Components.Endpoints; +using Microsoft.AspNetCore.Components.Rendering; + +namespace Microsoft.AspNetCore.Components; + +/// +/// Represents a component that renders preload link elements for resources. +/// +public sealed class ResourcePreloader : IComponent +{ + private RenderHandle renderHandle; + private List? assets; + + [Inject] + internal ResourcePreloadService? Service { get; set; } + + void IComponent.Attach(RenderHandle renderHandle) + { + this.renderHandle = renderHandle; + } + + Task IComponent.SetParametersAsync(ParameterView parameters) + { + Service?.SetPreloadingHandler(PreloadAssets); + renderHandle.Render(RenderPreloadAssets); + return Task.CompletedTask; + } + + private void PreloadAssets(List assets) + { + if (this.assets != null) + { + return; + } + + this.assets = assets; + renderHandle.Render(RenderPreloadAssets); + } + + private void RenderPreloadAssets(RenderTreeBuilder builder) + { + if (assets == null) + { + return; + } + + for (var i = 0; i < assets.Count; i ++) + { + var asset = assets[i]; + builder.OpenElement(0, "link"); + builder.SetKey(assets[i]); + builder.AddAttribute(1, "href", asset.Url); + builder.AddAttribute(2, "rel", asset.PreloadRel); + if (!string.IsNullOrEmpty(asset.PreloadAs)) + { + builder.AddAttribute(3, "as", asset.PreloadAs); + } + if (!string.IsNullOrEmpty(asset.PreloadPriority)) + { + builder.AddAttribute(4, "fetchpriority", asset.PreloadPriority); + } + if (!string.IsNullOrEmpty(asset.PreloadCrossorigin)) + { + builder.AddAttribute(5, "crossorigin", asset.PreloadCrossorigin); + } + if (!string.IsNullOrEmpty(asset.Integrity)) + { + builder.AddAttribute(6, "integrity", asset.Integrity); + } + builder.CloseElement(); + } + } +} diff --git a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs index d4ca799ba4bc..7ce2a54419b0 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs @@ -10,9 +10,6 @@ using Microsoft.AspNetCore.Components.Endpoints.Infrastructure; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; -using Microsoft.AspNetCore.Routing.Patterns; -using Microsoft.AspNetCore.StaticFiles; -using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Primitives; using static Microsoft.AspNetCore.Internal.LinkerFlags; @@ -23,8 +20,8 @@ internal class RazorComponentEndpointDataSource<[DynamicallyAccessedMembers(Comp private readonly object _lock = new(); private readonly List> _conventions = []; private readonly List> _finallyConventions = []; + private readonly List> _componentApplicationBuilderActions = []; private readonly RazorComponentDataSourceOptions _options = new(); - private readonly ComponentApplicationBuilder _builder; private readonly IEndpointRouteBuilder _endpointRouteBuilder; private readonly ResourceCollectionResolver _resourceCollectionResolver; private readonly RenderModeEndpointProvider[] _renderModeEndpointProviders; @@ -35,33 +32,29 @@ internal class RazorComponentEndpointDataSource<[DynamicallyAccessedMembers(Comp private IChangeToken _changeToken; private IDisposable? _disposableChangeToken; // THREADING: protected by _lock - public Func SetDisposableChangeTokenAction = disposableChangeToken => disposableChangeToken; - // Internal for testing. - internal ComponentApplicationBuilder Builder => _builder; internal List> Conventions => _conventions; + internal List> ComponentApplicationBuilderActions => _componentApplicationBuilderActions; + internal CancellationTokenSource ChangeTokenSource => _cancellationTokenSource; public RazorComponentEndpointDataSource( - ComponentApplicationBuilder builder, IEnumerable renderModeEndpointProviders, IEndpointRouteBuilder endpointRouteBuilder, RazorComponentEndpointFactory factory, HotReloadService? hotReloadService = null) { - _builder = builder; _endpointRouteBuilder = endpointRouteBuilder; _resourceCollectionResolver = new ResourceCollectionResolver(endpointRouteBuilder); _renderModeEndpointProviders = renderModeEndpointProviders.ToArray(); _factory = factory; _hotReloadService = hotReloadService; - HotReloadService.ClearCacheEvent += OnHotReloadClearCache; DefaultBuilder = new RazorComponentsEndpointConventionBuilder( _lock, - builder, endpointRouteBuilder, _options, _conventions, - _finallyConventions); + _finallyConventions, + _componentApplicationBuilderActions); _cancellationTokenSource = new CancellationTokenSource(); _changeToken = new CancellationChangeToken(_cancellationTokenSource.Token); @@ -109,8 +102,20 @@ private void UpdateEndpoints() lock (_lock) { + _disposableChangeToken?.Dispose(); + _disposableChangeToken = null; + var endpoints = new List(); - var context = _builder.Build(); + + var componentApplicationBuilder = new ComponentApplicationBuilder(); + + foreach (var action in ComponentApplicationBuilderActions) + { + action?.Invoke(componentApplicationBuilder); + } + + var context = componentApplicationBuilder.Build(); + var configuredRenderModesMetadata = new ConfiguredRenderModesMetadata( [.. Options.ConfiguredRenderModes]); @@ -171,8 +176,7 @@ private void UpdateEndpoints() oldCancellationTokenSource?.Dispose(); if (_hotReloadService is { MetadataUpdateSupported: true }) { - _disposableChangeToken?.Dispose(); - _disposableChangeToken = SetDisposableChangeTokenAction(ChangeToken.OnChange(_hotReloadService.GetChangeToken, UpdateEndpoints)); + _disposableChangeToken = ChangeToken.OnChange(_hotReloadService.GetChangeToken, UpdateEndpoints); } } } @@ -180,7 +184,6 @@ private void UpdateEndpoints() private void AddBlazorWebEndpoints(List endpoints) { List blazorWebEndpoints = [ - ..GetBlazorWebJsEndpoint(_endpointRouteBuilder), OpaqueRedirection.GetBlazorOpaqueRedirectionEndpoint()]; foreach (var endpoint in blazorWebEndpoints) @@ -199,65 +202,6 @@ private void AddBlazorWebEndpoints(List endpoints) } } - private static IEnumerable GetBlazorWebJsEndpoint(IEndpointRouteBuilder endpoints) - { - var app = endpoints.CreateApplicationBuilder(); - - var options = new StaticFileOptions - { - FileProvider = new ManifestEmbeddedFileProvider(typeof(RazorComponentsEndpointRouteBuilderExtensions).Assembly), - OnPrepareResponse = CacheHeaderSettings.SetCacheHeaders - }; - - app.Use(next => context => - { - // Set endpoint to null so the static files middleware will handle the request. - context.SetEndpoint(null); - - return next(context); - }); - - app.UseStaticFiles(options); - - var requestDelegate = app.Build(); - - var blazorWebJsBuilder = new RouteEndpointBuilder( - requestDelegate, - RoutePatternFactory.Parse("/_framework/blazor.web.js"), - int.MinValue) - { - DisplayName = "Blazor web static files" - }; - - var allowedHttpMethods = new HttpMethodMetadata([HttpMethods.Get, HttpMethods.Head]); - blazorWebJsBuilder.Metadata.Add(allowedHttpMethods); - -#if !DEBUG - return [blazorWebJsBuilder]; -#else - // We only need to serve the sourcemap when working on the framework, not in the distributed packages - var blazorWebJsDebugBuilder = new RouteEndpointBuilder( - requestDelegate, - RoutePatternFactory.Parse("/_framework/blazor.web.js.map"), - int.MinValue) - { - DisplayName = "Blazor web static files sourcemap" - }; - blazorWebJsDebugBuilder.Metadata.Add(allowedHttpMethods); - - return [blazorWebJsBuilder, blazorWebJsDebugBuilder]; -#endif - } - - public void OnHotReloadClearCache(Type[]? types) - { - lock (_lock) - { - _disposableChangeToken?.Dispose(); - _disposableChangeToken = null; - } - } - public override IChangeToken GetChangeToken() { Initialize(); diff --git a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSourceFactory.cs b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSourceFactory.cs index 84327f3f6d54..a8f178a4fc25 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSourceFactory.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSourceFactory.cs @@ -17,9 +17,14 @@ internal class RazorComponentEndpointDataSourceFactory( { public RazorComponentEndpointDataSource CreateDataSource<[DynamicallyAccessedMembers(Component)] TRootComponent>(IEndpointRouteBuilder endpoints) { - var builder = ComponentApplicationBuilder.GetBuilder() ?? - DefaultRazorComponentApplication.Instance.GetBuilder(); + var dataSource = new RazorComponentEndpointDataSource(providers, endpoints, factory, hotReloadService); - return new RazorComponentEndpointDataSource(builder, providers, endpoints, factory, hotReloadService); + dataSource.ComponentApplicationBuilderActions.Add(builder => + { + var assembly = typeof(TRootComponent).Assembly; + IRazorComponentApplication.GetBuilderForAssembly(builder, assembly); + }); + + return dataSource; } } diff --git a/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilder.cs b/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilder.cs index 04b1daa9e952..46808fbfdfb0 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilder.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilder.cs @@ -18,27 +18,25 @@ public sealed class RazorComponentsEndpointConventionBuilder : IEndpointConventi private readonly RazorComponentDataSourceOptions _options; private readonly List> _conventions; private readonly List> _finallyConventions; + private readonly List> _componentApplicationBuilderActions; internal RazorComponentsEndpointConventionBuilder( object @lock, - ComponentApplicationBuilder builder, IEndpointRouteBuilder endpointRouteBuilder, RazorComponentDataSourceOptions options, List> conventions, - List> finallyConventions) + List> finallyConventions, + List> componentApplicationBuilderActions) { _lock = @lock; - ApplicationBuilder = builder; EndpointRouteBuilder = endpointRouteBuilder; _options = options; _conventions = conventions; _finallyConventions = finallyConventions; + _componentApplicationBuilderActions = componentApplicationBuilderActions; } - /// - /// Gets the that is used to build the endpoints. - /// - internal ComponentApplicationBuilder ApplicationBuilder { get; } + internal List> ComponentApplicationBuilderActions => _componentApplicationBuilderActions; internal string? ManifestPath { get => _options.ManifestPath; set => _options.ManifestPath = value; } diff --git a/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilderExtensions.cs b/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilderExtensions.cs index fd0a6aec0c4d..7cc4fa4dc764 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilderExtensions.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentsEndpointConventionBuilderExtensions.cs @@ -30,7 +30,7 @@ public static RazorComponentsEndpointConventionBuilder AddAdditionalAssemblies( foreach (var assembly in assemblies) { - builder.ApplicationBuilder.AddAssembly(assembly); + builder.ComponentApplicationBuilderActions.Add(b => b.AddAssembly(assembly)); } return builder; } diff --git a/src/Components/Endpoints/src/Builder/ResourceCollectionConvention.cs b/src/Components/Endpoints/src/Builder/ResourceCollectionConvention.cs index 2415687031ec..7606ff07abd7 100644 --- a/src/Components/Endpoints/src/Builder/ResourceCollectionConvention.cs +++ b/src/Components/Endpoints/src/Builder/ResourceCollectionConvention.cs @@ -49,6 +49,7 @@ public void ApplyConvention(EndpointBuilder eb) if (_collection != null && _collectionImportMap != null) { eb.Metadata.Add(_collection); + eb.Metadata.Add(new ResourcePreloadCollection(_collection)); if (_collectionUrl != null) { diff --git a/src/Components/Endpoints/src/Builder/ResourcePreloadCollection.cs b/src/Components/Endpoints/src/Builder/ResourcePreloadCollection.cs new file mode 100644 index 000000000000..869682856251 --- /dev/null +++ b/src/Components/Endpoints/src/Builder/ResourcePreloadCollection.cs @@ -0,0 +1,114 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; + +namespace Microsoft.AspNetCore.Components.Endpoints; + +internal class ResourcePreloadCollection +{ + private readonly Dictionary> _storage = new(); + + public ResourcePreloadCollection(ResourceAssetCollection assets) + { + foreach (var asset in assets) + { + if (asset.Properties == null) + { + continue; + } + + // Use preloadgroup property to identify assets that should be preloaded + string? group = null; + foreach (var property in asset.Properties) + { + if (property.Name.Equals("preloadgroup", StringComparison.OrdinalIgnoreCase)) + { + group = property.Value ?? string.Empty; + break; + } + } + + if (group == null) + { + continue; + } + + var preloadAsset = CreateAsset(asset.Url, asset.Properties); + if (!_storage.TryGetValue(group, out var groupHeaders)) + { + groupHeaders = _storage[group] = new List(); + } + + groupHeaders.Add(preloadAsset); + } + + foreach (var group in _storage) + { + group.Value.Sort((a, b) => a.PreloadOrder.CompareTo(b.PreloadOrder)); + } + } + + private static PreloadAsset CreateAsset(string url, IEnumerable properties) + { + var resourceAsset = new PreloadAsset(url); + foreach (var property in properties) + { + if (property.Name.Equals("label", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.Label = property.Value; + } + else if (property.Name.Equals("integrity", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.Integrity = property.Value; + } + else if (property.Name.Equals("preloadgroup", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.PreloadGroup = property.Value; + } + else if (property.Name.Equals("preloadrel", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.PreloadRel = property.Value; + } + else if (property.Name.Equals("preloadas", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.PreloadAs = property.Value; + } + else if (property.Name.Equals("preloadpriority", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.PreloadPriority = property.Value; + } + else if (property.Name.Equals("preloadcrossorigin", StringComparison.OrdinalIgnoreCase)) + { + resourceAsset.PreloadCrossorigin = property.Value; + } + else if (property.Name.Equals("preloadorder", StringComparison.OrdinalIgnoreCase)) + { + if (!int.TryParse(property.Value, out int order)) + { + order = 0; + } + + resourceAsset.PreloadOrder = order; + } + } + + return resourceAsset; + } + + public bool TryGetAssets(string group, [MaybeNullWhen(false)] out List assets) + => _storage.TryGetValue(group, out assets); +} + +internal sealed class PreloadAsset(string url) +{ + public string Url { get; } = url; + public string? Label { get; set; } + public string? Integrity { get; set; } + public string? PreloadGroup { get; set; } + public string? PreloadRel { get; set; } + public string? PreloadAs { get; set; } + public string? PreloadPriority { get; set; } + public string? PreloadCrossorigin { get; set; } + public int PreloadOrder { get; set; } +} diff --git a/src/Components/Endpoints/src/Builder/ResourcePreloadService.cs b/src/Components/Endpoints/src/Builder/ResourcePreloadService.cs new file mode 100644 index 000000000000..a5f073f409a9 --- /dev/null +++ b/src/Components/Endpoints/src/Builder/ResourcePreloadService.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.AspNetCore.Components.Endpoints; + +internal class ResourcePreloadService +{ + private Action>? handler; + + public void SetPreloadingHandler(Action> handler) + => this.handler = handler; + + public void Preload(List assets) + => this.handler?.Invoke(assets); +} diff --git a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs index e9bb98f2d1c2..5c2d42fedd24 100644 --- a/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs +++ b/src/Components/Endpoints/src/DependencyInjection/HttpNavigationManager.cs @@ -2,16 +2,47 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components.Routing; +using System.Diagnostics.CodeAnalysis; namespace Microsoft.AspNetCore.Components.Endpoints; internal sealed class HttpNavigationManager : NavigationManager, IHostEnvironmentNavigationManager { + private const string _disableThrowNavigationException = "Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException"; + + [FeatureSwitchDefinition(_disableThrowNavigationException)] + private static bool _throwNavigationException => + !AppContext.TryGetSwitch(_disableThrowNavigationException, out var switchValue) || !switchValue; + + private Func? _onNavigateTo; + void IHostEnvironmentNavigationManager.Initialize(string baseUri, string uri) => Initialize(baseUri, uri); + void IHostEnvironmentNavigationManager.Initialize(string baseUri, string uri, Func onNavigateTo) + { + _onNavigateTo = onNavigateTo; + Initialize(baseUri, uri); + } + protected override void NavigateToCore(string uri, NavigationOptions options) { var absoluteUriString = ToAbsoluteUri(uri).AbsoluteUri; - throw new NavigationException(absoluteUriString); + if (_throwNavigationException) + { + throw new NavigationException(absoluteUriString); + } + else + { + _ = PerformNavigationAsync(); + } + + async Task PerformNavigationAsync() + { + if (_onNavigateTo == null) + { + throw new InvalidOperationException($"'{GetType().Name}' method for endpoint-based navigation has not been initialized."); + } + await _onNavigateTo(absoluteUriString); + } } } diff --git a/src/Components/Endpoints/src/DependencyInjection/RazorComponentsRazorComponentBuilderExtensions.cs b/src/Components/Endpoints/src/DependencyInjection/RazorComponentsRazorComponentBuilderExtensions.cs new file mode 100644 index 000000000000..7c927d0f721e --- /dev/null +++ b/src/Components/Endpoints/src/DependencyInjection/RazorComponentsRazorComponentBuilderExtensions.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Infrastructure; +using Microsoft.AspNetCore.Internal; + +namespace Microsoft.Extensions.DependencyInjection; + +/// +/// Provides methods for configuring a Razor components based application. +/// +public static class RazorComponentsRazorComponentBuilderExtensions +{ + /// + /// Registers a persistent service with the specified render mode in the Razor components builder. + /// + /// The service to be registered for state management. + /// The . + /// The that determines to which render modes the state should be persisted. + /// The . + public static IRazorComponentsBuilder RegisterPersistentService<[DynamicallyAccessedMembers(LinkerFlags.JsonSerialized)] TPersistentService>( + this IRazorComponentsBuilder builder, + IComponentRenderMode renderMode) + { + ArgumentNullException.ThrowIfNull(builder); + + RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration( + builder.Services, + renderMode); + + return builder; + } +} diff --git a/src/Components/Endpoints/src/DependencyInjection/RazorComponentsServiceCollectionExtensions.cs b/src/Components/Endpoints/src/DependencyInjection/RazorComponentsServiceCollectionExtensions.cs index 0a10d83538ca..dc365194fcbe 100644 --- a/src/Components/Endpoints/src/DependencyInjection/RazorComponentsServiceCollectionExtensions.cs +++ b/src/Components/Endpoints/src/DependencyInjection/RazorComponentsServiceCollectionExtensions.cs @@ -62,7 +62,7 @@ public static IRazorComponentsBuilder AddRazorComponents(this IServiceCollection services.TryAddScoped(); services.TryAddScoped(); services.TryAddScoped(); - services.TryAddScoped(sp => sp.GetRequiredService().State); + services.TryAddScoped(sp => sp.GetRequiredService().State); services.TryAddScoped(); services.TryAddEnumerable( ServiceDescriptor.Singleton, DefaultRazorComponentsServiceOptionsConfiguration>()); @@ -70,13 +70,22 @@ public static IRazorComponentsBuilder AddRazorComponents(this IServiceCollection services.TryAddScoped(sp => sp.GetRequiredService()); services.TryAddScoped(); services.AddSupplyValueFromQueryProvider(); + services.AddSupplyValueFromPersistentComponentStateProvider(); services.TryAddCascadingValue(sp => sp.GetRequiredService().HttpContext); + services.TryAddScoped(); + services.TryAddScoped(); services.TryAddScoped(); + RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(services, RenderMode.InteractiveWebAssembly); + + ComponentsMetricsServiceCollectionExtensions.AddComponentsMetrics(services); + ComponentsMetricsServiceCollectionExtensions.AddComponentsTracing(services); // Form handling services.AddSupplyValueFromFormProvider(); services.TryAddScoped(); + services.TryAddScoped(sp => (EndpointAntiforgeryStateProvider)sp.GetRequiredService()); + RegisterPersistentComponentStateServiceCollectionExtensions.AddPersistentServiceRegistration(services, RenderMode.InteractiveAuto); services.TryAddScoped(); services.TryAddScoped(); diff --git a/src/Components/Endpoints/src/DependencyInjection/UnsupportedJavaScriptRuntime.cs b/src/Components/Endpoints/src/DependencyInjection/UnsupportedJavaScriptRuntime.cs index 3c7af336b23a..028e9da2684b 100644 --- a/src/Components/Endpoints/src/DependencyInjection/UnsupportedJavaScriptRuntime.cs +++ b/src/Components/Endpoints/src/DependencyInjection/UnsupportedJavaScriptRuntime.cs @@ -1,7 +1,9 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.CodeAnalysis; using Microsoft.JSInterop; +using static Microsoft.AspNetCore.Internal.LinkerFlags; namespace Microsoft.AspNetCore.Components.Endpoints; @@ -9,9 +11,27 @@ internal sealed class UnsupportedJavaScriptRuntime : IJSRuntime { private const string Message = "JavaScript interop calls cannot be issued during server-side static rendering, because the page has not yet loaded in the browser. Statically-rendered components must wrap any JavaScript interop calls in conditional logic to ensure those interop calls are not attempted during static rendering."; - public ValueTask InvokeAsync(string identifier, CancellationToken cancellationToken, object?[]? args) + public ValueTask InvokeAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier, CancellationToken cancellationToken, object?[]? args) => throw new InvalidOperationException(Message); - ValueTask IJSRuntime.InvokeAsync(string identifier, object?[]? args) + ValueTask IJSRuntime.InvokeAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier, object?[]? args) + => throw new InvalidOperationException(Message); + + public ValueTask InvokeConstructorAsync(string identifier, object?[]? args) + => throw new InvalidOperationException(Message); + + public ValueTask InvokeConstructorAsync(string identifier, CancellationToken cancellationToken, object?[]? args) + => throw new InvalidOperationException(Message); + + public ValueTask GetValueAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier) + => throw new InvalidOperationException(Message); + + public ValueTask GetValueAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier, CancellationToken cancellationToken) + => throw new InvalidOperationException(Message); + + public ValueTask SetValueAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier, TValue value) + => throw new InvalidOperationException(Message); + + public ValueTask SetValueAsync<[DynamicallyAccessedMembers(JsonSerialized)] TValue>(string identifier, TValue value, CancellationToken cancellationToken) => throw new InvalidOperationException(Message); } diff --git a/src/Components/Endpoints/src/DependencyInjection/WebAssemblySettingsEmitter.cs b/src/Components/Endpoints/src/DependencyInjection/WebAssemblySettingsEmitter.cs new file mode 100644 index 000000000000..87ae37d74f7f --- /dev/null +++ b/src/Components/Endpoints/src/DependencyInjection/WebAssemblySettingsEmitter.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using Microsoft.Extensions.Hosting; + +namespace Microsoft.AspNetCore.Components.Endpoints; + +internal record WebAssemblySettings(string EnvironmentName, Dictionary EnvironmentVariables); + +internal class WebAssemblySettingsEmitter(IHostEnvironment hostEnvironment) +{ + private bool wasEmittedAlready; + + private const string dotnetModifiableAssembliesName = "DOTNET_MODIFIABLE_ASSEMBLIES"; + private const string aspnetcoreBrowserToolsName = "__ASPNETCORE_BROWSER_TOOLS"; + + private static readonly string? s_dotnetModifiableAssemblies = GetNonEmptyEnvironmentVariableValue(dotnetModifiableAssembliesName); + private static readonly string? s_aspnetcoreBrowserTools = GetNonEmptyEnvironmentVariableValue(aspnetcoreBrowserToolsName); + + private static string? GetNonEmptyEnvironmentVariableValue(string name) + => Environment.GetEnvironmentVariable(name) is { Length: > 0 } value ? value : null; + + public bool TryGetSettingsOnce([NotNullWhen(true)] out WebAssemblySettings? settings) + { + if (wasEmittedAlready) + { + settings = default; + return false; + } + + var environmentVariables = new Dictionary(); + + // DOTNET_MODIFIABLE_ASSEMBLIES is used by the runtime to initialize hot-reload specific environment variables and is configured + // by the launching process (dotnet-watch / Visual Studio). + // Always add the header if the environment variable is set, regardless of the kind of environment. + if (s_dotnetModifiableAssemblies != null) + { + environmentVariables[dotnetModifiableAssembliesName] = s_dotnetModifiableAssemblies; + } + + // See https://github.com/dotnet/aspnetcore/issues/37357#issuecomment-941237000 + // Translate the _ASPNETCORE_BROWSER_TOOLS environment configured by the browser tools agent in to a HTTP response header. + if (s_aspnetcoreBrowserTools != null) + { + environmentVariables[aspnetcoreBrowserToolsName] = s_aspnetcoreBrowserTools; + } + + wasEmittedAlready = true; + settings = new (hostEnvironment.EnvironmentName, environmentVariables); + return true; + } +} diff --git a/src/Components/Endpoints/src/Directory.Build.targets b/src/Components/Endpoints/src/Directory.Build.targets index 09953b9b6c9d..35886951b6aa 100644 --- a/src/Components/Endpoints/src/Directory.Build.targets +++ b/src/Components/Endpoints/src/Directory.Build.targets @@ -1,6 +1,3 @@  - - diff --git a/src/Components/Endpoints/src/FormMapping/BrowserFileFromFormFile.cs b/src/Components/Endpoints/src/FormMapping/BrowserFileFromFormFile.cs index f0300d75cc4f..d6943c8637a3 100644 --- a/src/Components/Endpoints/src/FormMapping/BrowserFileFromFormFile.cs +++ b/src/Components/Endpoints/src/FormMapping/BrowserFileFromFormFile.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Components.Endpoints.FormMapping; internal sealed class BrowserFileFromFormFile(IFormFile formFile) : IBrowserFile { - public string Name => formFile.Name; + public string Name => formFile.FileName; public DateTimeOffset LastModified => DateTimeOffset.Parse(formFile.Headers.LastModified.ToString(), CultureInfo.InvariantCulture); diff --git a/src/Components/Endpoints/src/FormMapping/Converters/NullableConverter.cs b/src/Components/Endpoints/src/FormMapping/Converters/NullableConverter.cs index 58bd47c60396..205f114b732f 100644 --- a/src/Components/Endpoints/src/FormMapping/Converters/NullableConverter.cs +++ b/src/Components/Endpoints/src/FormMapping/Converters/NullableConverter.cs @@ -14,6 +14,15 @@ public bool CanConvertSingleValue() => _nonNullableConverter is ISingleValueConv public bool TryConvertValue(ref FormDataReader reader, string value, out T? result) { + if (string.IsNullOrEmpty(value) && IsSupportedUnderlyingType(typeof(T))) + { + // Form post sends empty string for a form field that does not have a value, + // in case of nullable value types, that should be treated as null and + // should not be parsed for its underlying type + result = null; + return true; + } + var converter = (ISingleValueConverter)_nonNullableConverter; if (converter.TryConvertValue(ref reader, value, out var converted)) @@ -30,17 +39,30 @@ public bool TryConvertValue(ref FormDataReader reader, string value, out T? resu [RequiresDynamicCode(FormMappingHelpers.RequiresDynamicCodeMessage)] [RequiresUnreferencedCode(FormMappingHelpers.RequiresUnreferencedCodeMessage)] - internal override bool TryRead(ref FormDataReader context, Type type, FormDataMapperOptions options, out T? result, out bool found) + internal override bool TryRead(ref FormDataReader reader, Type type, FormDataMapperOptions options, out T? result, out bool found) { - if (!(_nonNullableConverter.TryRead(ref context, type, options, out var innerResult, out found) && found)) + // Do not call non-nullable converter's TryRead method, it will fail to parse empty + // string. Call the TryConvertValue method above (similar to ParsableConverter) so + // that it can handle the empty string correctly + found = reader.TryGetValue(out var value); + if (!found) { - result = null; - return false; + result = default; + return true; } else { - result = innerResult; - return true; + return TryConvertValue(ref reader, value!, out result!); } } + + private static bool IsSupportedUnderlyingType(Type type) + { + return Type.GetTypeCode(type) != TypeCode.Object || IsSupportedUnderlyingObjectType(type); + } + + private static bool IsSupportedUnderlyingObjectType(Type type) + { + return type == typeof(DateOnly) || type == typeof(TimeOnly) || type == typeof(DateTimeOffset); + } } diff --git a/src/Components/Endpoints/src/FormMapping/Factories/ComplexTypeConverterFactory.cs b/src/Components/Endpoints/src/FormMapping/Factories/ComplexTypeConverterFactory.cs index 09df61c18329..7f5ec9973c75 100644 --- a/src/Components/Endpoints/src/FormMapping/Factories/ComplexTypeConverterFactory.cs +++ b/src/Components/Endpoints/src/FormMapping/Factories/ComplexTypeConverterFactory.cs @@ -27,7 +27,7 @@ public bool CanConvert(Type type, FormDataMapperOptions options) // We are going to compile a function that maps all the properties for the type. // Beware that the code below is not the actual exact code, just a simplification to understand what is happening at a high level. - // The general flow is as follows. For a type like Address { Street, City, Country, ZipCode } + // The general flow is as follows. For a type like Address { Street, City, CountryRegion, ZipCode } // we will generate a function that looks like: // public bool TryRead(ref FormDataReader reader, Type type, FormDataSerializerOptions options, out Address? result, out bool found) // { @@ -35,11 +35,11 @@ public bool CanConvert(Type type, FormDataMapperOptions options) // bool succeeded = true; // string street; // string city; - // string country; + // string countryRegion; // string zipCode; // FormDataConveter streetConverter; // FormDataConveter cityConverter; - // FormDataConveter countryConverter; + // FormDataConveter countryRegionConverter; // FormDataConveter zipCodeConverter; // var streetConverter = options.ResolveConverter(typeof(string)); @@ -54,11 +54,11 @@ public bool CanConvert(Type type, FormDataMapperOptions options) // found ||= foundProperty; // reader.PopPrefix("City"); // - // var countryConverter = options.ResolveConverter(typeof(string)); - // reader.PushPrefix("Country"); - // succeeded &= countryConverter.TryRead(ref reader, typeof(string), options, out street, out foundProperty); + // var countryRegionConverter = options.ResolveConverter(typeof(string)); + // reader.PushPrefix("CountryRegion"); + // succeeded &= countryRegionConverter.TryRead(ref reader, typeof(string), options, out street, out foundProperty); // found ||= foundProperty; - // reader.PopPrefix("Country"); + // reader.PopPrefix("CountryRegion"); // // var zipCodeConverter = options.ResolveConverter(typeof(string)); // reader.PushPrefix("ZipCode"); @@ -71,7 +71,7 @@ public bool CanConvert(Type type, FormDataMapperOptions options) // result = new Address(); // result.Street = street; // result.City = city; - // result.Country = country; + // result.CountryRegion = countryRegion; // result.ZipCode = zipCode; // } // else diff --git a/src/Components/Endpoints/src/Forms/EndpointAntiforgeryStateProvider.cs b/src/Components/Endpoints/src/Forms/EndpointAntiforgeryStateProvider.cs index 5df713d111c7..8a0a00df13d1 100644 --- a/src/Components/Endpoints/src/Forms/EndpointAntiforgeryStateProvider.cs +++ b/src/Components/Endpoints/src/Forms/EndpointAntiforgeryStateProvider.cs @@ -7,13 +7,15 @@ namespace Microsoft.AspNetCore.Components.Endpoints.Forms; -internal class EndpointAntiforgeryStateProvider(IAntiforgery antiforgery, PersistentComponentState state) : DefaultAntiforgeryStateProvider(state) +internal class EndpointAntiforgeryStateProvider(IAntiforgery antiforgery) : DefaultAntiforgeryStateProvider() { private HttpContext? _context; + private bool _canGenerateToken; internal void SetRequestContext(HttpContext context) { _context = context; + _canGenerateToken = true; } public override AntiforgeryRequestToken? GetAntiforgeryToken() @@ -21,19 +23,26 @@ internal void SetRequestContext(HttpContext context) if (_context == null) { // We're in an interactive context. Use the token persisted during static rendering. - return base.GetAntiforgeryToken(); + return _currentToken; } - // We already have a callback setup to generate the token when the response starts if needed. - // If we need the tokens before we start streaming the response, we'll generate and store them; - // otherwise we'll just retrieve them. - // In case there are no tokens available, we are going to return null and no-op. - var tokens = !_context.Response.HasStarted ? antiforgery.GetAndStoreTokens(_context) : antiforgery.GetTokens(_context); - if (tokens.RequestToken is null) + if (_currentToken == null && _canGenerateToken) { - return null; + // We already have a callback setup to generate the token when the response starts if needed. + // If we need the tokens before we start streaming the response, we'll generate and store them; + // otherwise we'll just retrieve them. + // In case there are no tokens available, we are going to return null and no-op. + var tokens = !_context.Response.HasStarted ? antiforgery.GetAndStoreTokens(_context) : antiforgery.GetTokens(_context); + if (tokens.RequestToken is null) + { + return null; + } + + _currentToken = new AntiforgeryRequestToken(tokens.RequestToken, tokens.FormFieldName); } - return new AntiforgeryRequestToken(tokens.RequestToken, tokens.FormFieldName); + return _currentToken; } + + internal void DisableTokenGeneration() => _canGenerateToken = false; } diff --git a/src/Components/Endpoints/src/Microsoft.AspNetCore.Components.Endpoints.csproj b/src/Components/Endpoints/src/Microsoft.AspNetCore.Components.Endpoints.csproj index f88a64780683..de0329c94e63 100644 --- a/src/Components/Endpoints/src/Microsoft.AspNetCore.Components.Endpoints.csproj +++ b/src/Components/Endpoints/src/Microsoft.AspNetCore.Components.Endpoints.csproj @@ -8,18 +8,10 @@ true $(NoWarn);CS0436 false - Microsoft.Extensions.FileProviders.Embedded.Manifest.xml enable $(DefineConstants);COMPONENTS - - - <_FileProviderTaskAssembly>$(ArtifactsDir)bin\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task\$(Configuration)\netstandard2.0\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.dll - - - - @@ -31,6 +23,8 @@ + + @@ -39,6 +33,8 @@ + + @@ -48,6 +44,7 @@ + @@ -57,31 +54,8 @@ - - - blazor.web.js - - ..\..\Web.JS\dist\Debug\$(BlazorWebJSFilename) - ..\..\Web.JS\dist\Release\$(BlazorWebJSFilename) - - - - - - - ..\..\Web.JS\dist\Release\$(BlazorWebJSFilename) - - - - - - - - - - diff --git a/src/Components/Endpoints/src/PublicAPI.Shipped.txt b/src/Components/Endpoints/src/PublicAPI.Shipped.txt index ffbad3d28b64..6e93e89dadda 100644 --- a/src/Components/Endpoints/src/PublicAPI.Shipped.txt +++ b/src/Components/Endpoints/src/PublicAPI.Shipped.txt @@ -35,10 +35,27 @@ Microsoft.AspNetCore.Components.Endpoints.RazorComponentsServiceOptions.Temporar Microsoft.AspNetCore.Components.Endpoints.RootComponentMetadata Microsoft.AspNetCore.Components.Endpoints.RootComponentMetadata.RootComponentMetadata(System.Type! rootComponentType) -> void Microsoft.AspNetCore.Components.Endpoints.RootComponentMetadata.Type.get -> System.Type! +Microsoft.AspNetCore.Components.ImportMap +Microsoft.AspNetCore.Components.ImportMap.AdditionalAttributes.get -> System.Collections.Generic.IReadOnlyDictionary? +Microsoft.AspNetCore.Components.ImportMap.AdditionalAttributes.set -> void +Microsoft.AspNetCore.Components.ImportMap.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext? +Microsoft.AspNetCore.Components.ImportMap.HttpContext.set -> void +Microsoft.AspNetCore.Components.ImportMap.ImportMap() -> void +Microsoft.AspNetCore.Components.ImportMap.ImportMapDefinition.get -> Microsoft.AspNetCore.Components.ImportMapDefinition? +Microsoft.AspNetCore.Components.ImportMap.ImportMapDefinition.set -> void +Microsoft.AspNetCore.Components.ImportMapDefinition +Microsoft.AspNetCore.Components.ImportMapDefinition.ImportMapDefinition(System.Collections.Generic.IReadOnlyDictionary? imports, System.Collections.Generic.IReadOnlyDictionary!>? scopes, System.Collections.Generic.IReadOnlyDictionary? integrity) -> void +Microsoft.AspNetCore.Components.ImportMapDefinition.Imports.get -> System.Collections.Generic.IReadOnlyDictionary? +Microsoft.AspNetCore.Components.ImportMapDefinition.Integrity.get -> System.Collections.Generic.IReadOnlyDictionary? +Microsoft.AspNetCore.Components.ImportMapDefinition.Scopes.get -> System.Collections.Generic.IReadOnlyDictionary!>? Microsoft.AspNetCore.Components.PersistedStateSerializationMode Microsoft.AspNetCore.Components.PersistedStateSerializationMode.Infer = 1 -> Microsoft.AspNetCore.Components.PersistedStateSerializationMode Microsoft.AspNetCore.Components.PersistedStateSerializationMode.Server = 2 -> Microsoft.AspNetCore.Components.PersistedStateSerializationMode Microsoft.AspNetCore.Components.PersistedStateSerializationMode.WebAssembly = 3 -> Microsoft.AspNetCore.Components.PersistedStateSerializationMode +Microsoft.AspNetCore.Components.Routing.RazorComponentsEndpointHttpContextExtensions +Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider +Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.ServerAuthenticationStateProvider() -> void +Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.SetAuthenticationState(System.Threading.Tasks.Task! authenticationStateTask) -> void Microsoft.AspNetCore.Http.HttpResults.RazorComponentResult Microsoft.AspNetCore.Http.HttpResults.RazorComponentResult.ComponentType.get -> System.Type! Microsoft.AspNetCore.Http.HttpResults.RazorComponentResult.ContentType.get -> string? @@ -59,7 +76,14 @@ Microsoft.AspNetCore.Http.HttpResults.RazorComponentResult.RazorComp Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection! Microsoft.Extensions.DependencyInjection.RazorComponentsServiceCollectionExtensions +override Microsoft.AspNetCore.Components.ImportMapDefinition.ToString() -> string! +override Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.GetAuthenticationStateAsync() -> System.Threading.Tasks.Task! static Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilderExtensions.AddAdditionalAssemblies(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, params System.Reflection.Assembly![]! assemblies) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! +static Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilderExtensions.WithStaticAssets(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, string? manifestPath = null) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! static Microsoft.AspNetCore.Builder.RazorComponentsEndpointRouteBuilderExtensions.MapRazorComponents(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder! endpoints) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! static Microsoft.AspNetCore.Components.Endpoints.Infrastructure.ComponentEndpointConventionBuilderHelper.AddRenderMode(Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, Microsoft.AspNetCore.Components.IComponentRenderMode! renderMode) -> void +static Microsoft.AspNetCore.Components.Endpoints.Infrastructure.ComponentEndpointConventionBuilderHelper.GetEndpointRouteBuilder(Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder) -> Microsoft.AspNetCore.Routing.IEndpointRouteBuilder! +static Microsoft.AspNetCore.Components.ImportMapDefinition.Combine(params Microsoft.AspNetCore.Components.ImportMapDefinition![]! sources) -> Microsoft.AspNetCore.Components.ImportMapDefinition! +static Microsoft.AspNetCore.Components.ImportMapDefinition.FromResourceCollection(Microsoft.AspNetCore.Components.ResourceAssetCollection! assets) -> Microsoft.AspNetCore.Components.ImportMapDefinition! +static Microsoft.AspNetCore.Components.Routing.RazorComponentsEndpointHttpContextExtensions.AcceptsInteractiveRouting(this Microsoft.AspNetCore.Http.HttpContext! context) -> bool static Microsoft.Extensions.DependencyInjection.RazorComponentsServiceCollectionExtensions.AddRazorComponents(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action? configure = null) -> Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! diff --git a/src/Components/Endpoints/src/PublicAPI.Unshipped.txt b/src/Components/Endpoints/src/PublicAPI.Unshipped.txt index 83071d81d258..424ca155339b 100644 --- a/src/Components/Endpoints/src/PublicAPI.Unshipped.txt +++ b/src/Components/Endpoints/src/PublicAPI.Unshipped.txt @@ -1,25 +1,5 @@ #nullable enable -Microsoft.AspNetCore.Components.ImportMap -Microsoft.AspNetCore.Components.ImportMap.AdditionalAttributes.get -> System.Collections.Generic.IReadOnlyDictionary? -Microsoft.AspNetCore.Components.ImportMap.AdditionalAttributes.set -> void -Microsoft.AspNetCore.Components.ImportMap.HttpContext.get -> Microsoft.AspNetCore.Http.HttpContext? -Microsoft.AspNetCore.Components.ImportMap.HttpContext.set -> void -Microsoft.AspNetCore.Components.ImportMap.ImportMap() -> void -Microsoft.AspNetCore.Components.ImportMap.ImportMapDefinition.get -> Microsoft.AspNetCore.Components.ImportMapDefinition? -Microsoft.AspNetCore.Components.ImportMap.ImportMapDefinition.set -> void -Microsoft.AspNetCore.Components.ImportMapDefinition -Microsoft.AspNetCore.Components.ImportMapDefinition.ImportMapDefinition(System.Collections.Generic.IReadOnlyDictionary? imports, System.Collections.Generic.IReadOnlyDictionary!>? scopes, System.Collections.Generic.IReadOnlyDictionary? integrity) -> void -Microsoft.AspNetCore.Components.ImportMapDefinition.Imports.get -> System.Collections.Generic.IReadOnlyDictionary? -Microsoft.AspNetCore.Components.ImportMapDefinition.Integrity.get -> System.Collections.Generic.IReadOnlyDictionary? -Microsoft.AspNetCore.Components.ImportMapDefinition.Scopes.get -> System.Collections.Generic.IReadOnlyDictionary!>? -Microsoft.AspNetCore.Components.Routing.RazorComponentsEndpointHttpContextExtensions -Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider -Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.ServerAuthenticationStateProvider() -> void -Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.SetAuthenticationState(System.Threading.Tasks.Task! authenticationStateTask) -> void -override Microsoft.AspNetCore.Components.ImportMapDefinition.ToString() -> string! -override Microsoft.AspNetCore.Components.Server.ServerAuthenticationStateProvider.GetAuthenticationStateAsync() -> System.Threading.Tasks.Task! -static Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilderExtensions.WithStaticAssets(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, string? manifestPath = null) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! -static Microsoft.AspNetCore.Components.Endpoints.Infrastructure.ComponentEndpointConventionBuilderHelper.GetEndpointRouteBuilder(Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder) -> Microsoft.AspNetCore.Routing.IEndpointRouteBuilder! -static Microsoft.AspNetCore.Components.ImportMapDefinition.Combine(params Microsoft.AspNetCore.Components.ImportMapDefinition![]! sources) -> Microsoft.AspNetCore.Components.ImportMapDefinition! -static Microsoft.AspNetCore.Components.ImportMapDefinition.FromResourceCollection(Microsoft.AspNetCore.Components.ResourceAssetCollection! assets) -> Microsoft.AspNetCore.Components.ImportMapDefinition! -static Microsoft.AspNetCore.Components.Routing.RazorComponentsEndpointHttpContextExtensions.AcceptsInteractiveRouting(this Microsoft.AspNetCore.Http.HttpContext! context) -> bool +Microsoft.AspNetCore.Components.ResourcePreloader +Microsoft.AspNetCore.Components.ResourcePreloader.ResourcePreloader() -> void +Microsoft.Extensions.DependencyInjection.RazorComponentsRazorComponentBuilderExtensions +static Microsoft.Extensions.DependencyInjection.RazorComponentsRazorComponentBuilderExtensions.RegisterPersistentService(this Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! builder, Microsoft.AspNetCore.Components.IComponentRenderMode! renderMode) -> Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! diff --git a/src/Components/Endpoints/src/RazorComponentEndpointInvoker.cs b/src/Components/Endpoints/src/RazorComponentEndpointInvoker.cs index 7a76a43098d4..22119d0522c9 100644 --- a/src/Components/Endpoints/src/RazorComponentEndpointInvoker.cs +++ b/src/Components/Endpoints/src/RazorComponentEndpointInvoker.cs @@ -6,7 +6,10 @@ using System.Text; using System.Text.Encodings.Web; using Microsoft.AspNetCore.Antiforgery; +using Microsoft.AspNetCore.Components.Endpoints.Forms; using Microsoft.AspNetCore.Components.Endpoints.Rendering; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Components.Infrastructure; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; @@ -21,10 +24,12 @@ internal partial class RazorComponentEndpointInvoker : IRazorComponentEndpointIn { private readonly EndpointHtmlRenderer _renderer; private readonly ILogger _logger; + private readonly ComponentsActivityLinkStore _activityLinkStore; public RazorComponentEndpointInvoker(EndpointHtmlRenderer renderer, ILogger logger) { _renderer = renderer; + _activityLinkStore = new ComponentsActivityLinkStore(renderer); _logger = logger; } @@ -39,12 +44,19 @@ private async Task RenderComponentCore(HttpContext context) { context.Response.ContentType = RazorComponentResultExecutor.DefaultContentType; var isErrorHandler = context.Features.Get() is not null; + var hasStatusCodePage = context.Features.Get() is not null; + var isReExecuted = context.Features.Get() is not null; + var httpActivityContext = context.Features.Get()?.Activity.Context ?? default; if (isErrorHandler) { Log.InteractivityDisabledForErrorHandling(_logger); } - _renderer.InitializeStreamingRenderingFraming(context, isErrorHandler); - EndpointHtmlRenderer.MarkAsAllowingEnhancedNavigation(context); + _renderer.InitializeStreamingRenderingFraming(context, isErrorHandler, isReExecuted); + if (!isReExecuted) + { + // re-executed pages have Headers already set up + EndpointHtmlRenderer.MarkAsAllowingEnhancedNavigation(context); + } var endpoint = context.GetEndpoint() ?? throw new InvalidOperationException($"An endpoint must be set on the '{nameof(HttpContext)}'."); @@ -66,15 +78,12 @@ private async Task RenderComponentCore(HttpContext context) return; } - context.Response.OnStarting(() => + if (httpActivityContext != default) { - // Generate the antiforgery tokens before we start streaming the response, as it needs - // to set the cookie header. - antiforgery!.GetAndStoreTokens(context); - return Task.CompletedTask; - }); + _activityLinkStore.SetActivityContext(ComponentsActivityLinkStore.Http, httpActivityContext, null); + } - await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( + await _renderer.InitializeStandardComponentServicesAsync( context, componentType: pageComponent, handler: result.HandlerName, @@ -85,6 +94,8 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( await using var writer = new HttpResponseStreamWriter(context.Response.Body, Encoding.UTF8, defaultBufferSize, ArrayPool.Shared, ArrayPool.Shared); using var bufferWriter = new BufferedTextWriter(writer); + bool isErrorHandlerOrReExecuted = isErrorHandler || isReExecuted; + // Note that we always use Static rendering mode for the top-level output from a RazorComponentResult, // because you never want to serialize the invocation of RazorComponentResultHost. Instead, that host // component takes care of switching into your desired render mode when it produces its own output. @@ -92,10 +103,10 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( context, rootComponent, ParameterView.Empty, - waitForQuiescence: result.IsPost || isErrorHandler); + waitForQuiescence: result.IsPost || isErrorHandlerOrReExecuted); Task quiesceTask; - if (!result.IsPost) + if (!result.IsPost || isReExecuted) { quiesceTask = htmlContent.QuiescenceTask; } @@ -119,6 +130,11 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( } } + if (_renderer.NotFoundEventArgs != null) + { + _renderer.SetNotFoundWhenResponseNotStarted(); + } + if (!quiesceTask.IsCompleted) { // An incomplete QuiescenceTask indicates there may be streaming rendering updates. @@ -126,8 +142,17 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( var bufferingFeature = context.Features.GetRequiredFeature(); bufferingFeature.DisableBuffering(); + // Store the tokens if not emitted already in case we stream a form in the response. + antiforgery!.GetAndStoreTokens(context); + context.Response.Headers.ContentEncoding = "identity"; } + else if (endpoint.Metadata.GetMetadata()?.ConfiguredRenderModes.Length == 0) + { + // Disable token generation on EndpointAntiforgeryStateProvider if we are not streaming. + var provider = (EndpointAntiforgeryStateProvider)context.RequestServices.GetRequiredService(); + provider.DisableTokenGeneration(); + } // Importantly, we must not yield this thread (which holds exclusive access to the renderer sync context) // in between the first call to htmlContent.WriteTo and the point where we start listening for subsequent @@ -138,6 +163,10 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( if (!quiesceTask.IsCompletedSuccessfully) { await _renderer.SendStreamingUpdatesAsync(context, quiesceTask, bufferWriter); + if (_renderer.NotFoundEventArgs != null) + { + await _renderer.SetNotFoundWhenResponseHasStarted(); + } } else { @@ -145,12 +174,23 @@ await EndpointHtmlRenderer.InitializeStandardComponentServicesAsync( } // Emit comment containing state. - if (!isErrorHandler) + if (!isErrorHandlerOrReExecuted) { var componentStateHtmlContent = await _renderer.PrerenderPersistedStateAsync(context); componentStateHtmlContent.WriteTo(bufferWriter, HtmlEncoder.Default); } + if (context.Response.StatusCode == StatusCodes.Status404NotFound && + !isReExecuted && + string.IsNullOrEmpty(_renderer.NotFoundEventArgs?.Path)) + { + // Router did not handle the NotFound event, otherwise this would not be empty. + // Don't flush the response if we have an unhandled 404 rendering + // This will allow the StatusCodePages middleware to re-execute the request + context.Response.ContentType = null; + return; + } + // Invoke FlushAsync to ensure any buffered content is asynchronously written to the underlying // response asynchronously. In the absence of this line, the buffer gets synchronously written to the // response as part of the Dispose which has a perf impact. diff --git a/src/Components/Endpoints/src/Rendering/EndpointComponentState.cs b/src/Components/Endpoints/src/Rendering/EndpointComponentState.cs index 5ff3e11be8fe..6c03d0585f2f 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointComponentState.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointComponentState.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Reflection.Metadata; using Microsoft.AspNetCore.Components.Endpoints; +using Microsoft.AspNetCore.Components.HotReload; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.RenderTree; @@ -16,9 +17,20 @@ internal sealed class EndpointComponentState : ComponentState { private static readonly ConcurrentDictionary _streamRenderingAttributeByComponentType = new(); + static EndpointComponentState() + { + if (HotReloadManager.Default.MetadataUpdateSupported) + { + HotReloadManager.Default.OnDeltaApplied += _streamRenderingAttributeByComponentType.Clear; + } + } + + private readonly EndpointHtmlRenderer _renderer; public EndpointComponentState(Renderer renderer, int componentId, IComponent component, ComponentState? parentComponentState) : base(renderer, componentId, component, parentComponentState) { + _renderer = (EndpointHtmlRenderer)renderer; + var streamRenderingAttribute = _streamRenderingAttributeByComponentType.GetOrAdd(component.GetType(), type => type.GetCustomAttribute()); @@ -35,6 +47,22 @@ public EndpointComponentState(Renderer renderer, int componentId, IComponent com public bool StreamRendering { get; } + protected override object? GetComponentKey() + { + if (ParentComponentState != null && ParentComponentState.Component is SSRRenderModeBoundary boundary) + { + var (sequence, key) = _renderer.GetSequenceAndKey(ParentComponentState); + var marker = boundary.GetComponentMarkerKey(sequence, key); + if (!marker.Equals(default)) + { + return marker.Serialized(); + } + } + + // Fall back to the default implementation + return base.GetComponentKey(); + } + /// /// MetadataUpdateHandler event. This is invoked by the hot reload host via reflection. /// diff --git a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.EventDispatch.cs b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.EventDispatch.cs index cd47eb63590f..a06d3e66d622 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.EventDispatch.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.EventDispatch.cs @@ -1,11 +1,16 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Components.Endpoints.Rendering; using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.RenderTree; +using Microsoft.AspNetCore.Components.Routing; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using System.Buffers; using System.Globalization; using System.Linq; using System.Text; @@ -74,6 +79,68 @@ private Task ReturnErrorResponse(string detailedMessage) : Task.CompletedTask; } + internal void SetNotFoundWhenResponseNotStarted() + { + _httpContext.Response.StatusCode = StatusCodes.Status404NotFound; + + // When the application triggers a NotFound event, we continue rendering the current batch. + // However, after completing this batch, we do not want to process any further UI updates, + // as we are going to return a 404 status and discard the UI updates generated so far. + SignalRendererToFinishRendering(); + } + + internal async Task SetNotFoundWhenResponseHasStarted() + { + if (string.IsNullOrEmpty(_notFoundUrl)) + { + var baseUri = $"{_httpContext.Request.Scheme}://{_httpContext.Request.Host}{_httpContext.Request.PathBase}/"; + _notFoundUrl = GetNotFoundUrl(baseUri, NotFoundEventArgs); + } + var defaultBufferSize = 16 * 1024; + await using var writer = new HttpResponseStreamWriter(_httpContext.Response.Body, Encoding.UTF8, defaultBufferSize, ArrayPool.Shared, ArrayPool.Shared); + using var bufferWriter = new BufferedTextWriter(writer); + HandleNotFoundAfterResponseStarted(bufferWriter, _httpContext, _notFoundUrl); + await bufferWriter.FlushAsync(); + + // When the application triggers a NotFound event, we continue rendering the current batch. + // However, after completing this batch, we do not want to process any further UI updates, + // as we are going to return a 404 status and discard the UI updates generated so far. + SignalRendererToFinishRendering(); + } + + private string GetNotFoundUrl(string baseUri, NotFoundEventArgs? args) + { + string? path = args?.Path; + if (string.IsNullOrEmpty(path)) + { + var pathFormat = _httpContext.Items[nameof(StatusCodePagesOptions)] as string; + if (string.IsNullOrEmpty(pathFormat)) + { + throw new InvalidOperationException($"The {nameof(Router.NotFoundPage)} route must be specified or re-execution middleware has to be set to render not found content."); + } + + path = pathFormat; + } + return $"{baseUri}{path.TrimStart('/')}"; + } + + private async Task OnNavigateTo(string uri) + { + if (_httpContext.Response.HasStarted) + { + var defaultBufferSize = 16 * 1024; + await using var writer = new HttpResponseStreamWriter(_httpContext.Response.Body, Encoding.UTF8, defaultBufferSize, ArrayPool.Shared, ArrayPool.Shared); + using var bufferWriter = new BufferedTextWriter(writer); + HandleNavigationAfterResponseStarted(bufferWriter, _httpContext, uri); + await bufferWriter.FlushAsync(); + } + else + { + await HandleNavigationBeforeResponseStarted(_httpContext, uri); + } + SignalRendererToFinishRendering(); + } + private void UpdateNamedSubmitEvents(in RenderBatch renderBatch) { if (renderBatch.NamedEventChanges is { } changes) diff --git a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Prerendering.cs b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Prerendering.cs index e331fd5707c2..ec8407b17a96 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Prerendering.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Prerendering.cs @@ -5,9 +5,11 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Encodings.Web; using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.AspNetCore.Components.RenderTree; using Microsoft.AspNetCore.Components.Web.HtmlRendering; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; using static Microsoft.AspNetCore.Internal.LinkerFlags; namespace Microsoft.AspNetCore.Components.Endpoints; @@ -166,7 +168,50 @@ private async Task WaitForResultReady(bool waitForQuiescence, PrerenderedCompone } else if (_nonStreamingPendingTasks.Count > 0) { - await WaitForNonStreamingPendingTasks(); + if (_isReExecuted) + { + HandleNonStreamingTasks(); + } + else + { + await WaitForNonStreamingPendingTasks(); + } + } + } + + public void HandleNonStreamingTasks() + { + if (NonStreamingPendingTasksCompletion == null) + { + foreach (var task in _nonStreamingPendingTasks) + { + _ = GetErrorHandledTask(task); + } + + // Clear the pending tasks since we are handling them + _nonStreamingPendingTasks.Clear(); + + NonStreamingPendingTasksCompletion = Task.CompletedTask; + } + } + + private async Task GetErrorHandledTask(Task taskToHandle) + { + try + { + await taskToHandle; + } + catch (Exception ex) + { + // Ignore errors due to task cancellations. + if (!taskToHandle.IsCanceled) + { + _logger.LogError( + ex, + "An exception occurred during non-streaming rendering. " + + "This exception will be ignored because the response " + + "is being discarded and the request is being re-executed."); + } } } @@ -184,9 +229,16 @@ async Task Execute() // Clear all pending work. _nonStreamingPendingTasks.Clear(); - // new work might be added before we check again as a result of waiting for all - // the child components to finish executing SetParametersAsync - await pendingWork; + try + { + // new work might be added before we check again as a result of waiting for all + // the child components to finish executing SetParametersAsync + await pendingWork; + } + catch (NavigationException navigationException) + { + await HandleNavigationException(_httpContext, navigationException); + } } } } @@ -206,7 +258,15 @@ public static ValueTask HandleNavigationExcepti "response and avoid using features like FlushAsync() before all components on the page have been rendered to prevent failed navigation commands.", navigationException); } - else if (IsPossibleExternalDestination(httpContext.Request, navigationException.Location) + else + { + return HandleNavigationBeforeResponseStarted(httpContext, navigationException.Location); + } + } + + private static ValueTask HandleNavigationBeforeResponseStarted(HttpContext httpContext, string destinationLocation) + { + if (IsPossibleExternalDestination(httpContext.Request, destinationLocation) && IsProgressivelyEnhancedNavigation(httpContext.Request)) { // For progressively-enhanced nav, we prefer to use opaque redirections for external URLs rather than @@ -214,12 +274,12 @@ public static ValueTask HandleNavigationExcepti // duplicated request. The client can't rely on receiving this header, though, since non-Blazor endpoints // wouldn't return it. httpContext.Response.Headers.Add("blazor-enhanced-nav-redirect-location", - OpaqueRedirection.CreateProtectedRedirectionUrl(httpContext, navigationException.Location)); + OpaqueRedirection.CreateProtectedRedirectionUrl(httpContext, destinationLocation)); return new ValueTask(PrerenderedComponentHtmlContent.Empty); } else { - httpContext.Response.Redirect(navigationException.Location); + httpContext.Response.Redirect(destinationLocation); return new ValueTask(PrerenderedComponentHtmlContent.Empty); } } @@ -246,6 +306,42 @@ internal static ServerComponentInvocationSequence GetOrCreateInvocationId(HttpCo return (ServerComponentInvocationSequence)result!; } + internal (int sequence, object? key) GetSequenceAndKey(ComponentState boundaryComponentState) + { + if (boundaryComponentState is null || boundaryComponentState.Component is not SSRRenderModeBoundary boundary) + { + throw new InvalidOperationException( + "The parent component state must be an SSRRenderModeBoundary to get the sequence and key."); + } + + // The boundary is at the root (not supported, but we handle it gracefully) + if (boundaryComponentState.ParentComponentState is null) + { + return (0, null); + } + + // Grab the parent of the boundary component. We need to find the SSRRenderModeBoundary component marker frame + // within it. As when we do `@rendermode="InteractiveServer" @key="some-key" the sequence we are interested in + // is the one on the SSRRenderModeBoundary component marker frame, not the one on the nested component frame. + // Same for the key. + var targetState = boundaryComponentState.ParentComponentState; + var frames = GetCurrentRenderTreeFrames(targetState.ComponentId); + for (var i = 0; i < frames.Count; i++) + { + ref var frame = ref frames.Array[i]; + if (frame.FrameType == RenderTreeFrameType.Component && + frame.Component is SSRRenderModeBoundary candidate && + ReferenceEquals(candidate, boundary)) + { + // This is the component marker frame, so we can use its sequence and key + return (frame.Sequence, frame.ComponentKey); + } + } + + throw new InvalidOperationException( + "The parent component state does not have a valid SSRRenderModeBoundary component marker frame."); + } + // An implementation of IHtmlContent that holds a reference to a component until we're ready to emit it as HTML to the response. // We don't construct the actual HTML until we receive the call to WriteTo. public class PrerenderedComponentHtmlContent : IHtmlAsyncContent diff --git a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs index f7fd6a8860f8..50728a8c3271 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs @@ -22,11 +22,13 @@ internal partial class EndpointHtmlRenderer private HashSet? _visitedComponentIdsInCurrentStreamingBatch; private string? _ssrFramingCommentMarkup; private bool _isHandlingErrors; + private bool _isReExecuted; - public void InitializeStreamingRenderingFraming(HttpContext httpContext, bool isErrorHandler) + public void InitializeStreamingRenderingFraming(HttpContext httpContext, bool isErrorHandler, bool isReExecuted) { _isHandlingErrors = isErrorHandler; - if (IsProgressivelyEnhancedNavigation(httpContext.Request)) + _isReExecuted = isReExecuted; + if (!isReExecuted && IsProgressivelyEnhancedNavigation(httpContext.Request)) { var id = Guid.NewGuid().ToString(); httpContext.Response.Headers.Add(_streamingRenderingFramingHeaderName, id); @@ -223,16 +225,27 @@ private static void HandleExceptionAfterResponseStarted(HttpContext httpContext, writer.Write(""); } + private static void HandleNotFoundAfterResponseStarted(TextWriter writer, HttpContext httpContext, string notFoundUrl) + { + writer.Write("