[
  {
    "path": ".azure-pipelines.yml",
    "content": "trigger:\r\n  branches:\r\n    include:\r\n      - master\r\n      - review/*\r\n      - experiment/*\r\n      - dev\r\n  paths:\r\n    exclude:\r\n      - '**/*.md'\r\n      - '.github/**/*'\r\npr:\r\n  branches:\r\n    include:\r\n      - dev\r\n  paths:\r\n    exclude:\r\n      - '**/*.md'\r\n      - '.github/**/*'\r\n\r\nvariables:\r\n- group: 'Bugsnag'\r\n- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE\r\n  value: true\r\n- name: Solution\r\n  value: 'EarTrumpet.vs15.sln'\r\n- name: BuildConfiguration\r\n  value: 'Release'\r\n- name: BuildPlatform\r\n  value: 'x86'\r\n\r\njobs:\r\n- job: Build\r\n  continueOnError: 'false'\r\n  pool:\r\n    vmImage: vs2017-win2016\r\n\r\n  strategy:\r\n    matrix:\r\n      AppInstaller:\r\n        Channel: AppInstaller\r\n        Publisher: 'CN=File-New-Project, O=File-New-Project, L=Purcellville, S=Virginia, C=US'\r\n      Store:\r\n        Channel: Store\r\n        Publisher: 'CN=6099D0EF-9374-47ED-BDFE-A82136831235'\r\n    maxParallel: 2\r\n\r\n  steps:\r\n  - task: GitVersion@4\r\n    displayName: 'Initialize Git Version'\r\n    inputs:\r\n      updateAssemblyInfo: false\r\n\r\n  - task: PowerShell@2\r\n    displayName: 'Set build number'\r\n    inputs:\r\n      targetType: inline\r\n      script: |\r\n        Write-Host \"##vso[build.updatebuildnumber]$(GitVersion.SemVer)\"\r\n\r\n  - task: PowerShell@2\r\n    displayName: 'Generate versioning metadata'\r\n    inputs:\r\n      targetType: inline\r\n      script: |\r\n        New-Item -ItemType Directory \"$(Build.ArtifactStagingDirectory)\\Metadata\" -ErrorAction Ignore\r\n        Set-Content \"$(Build.ArtifactStagingDirectory)\\Metadata\\semver.txt\" \"$(GitVersion.SemVer)\"\r\n        Set-Content \"$(Build.ArtifactStagingDirectory)\\Metadata\\branch.txt\" \"$(GitVersion.BranchName)\"\r\n        Set-Content \"$(Build.ArtifactStagingDirectory)\\Metadata\\commits.txt\" \"$(GitVersion.CommitsSinceVersionSource)\"\r\n\r\n        if(\"$(Channel)\" -eq \"Store\") {\r\n          $Version = \"$(GitVersion.MajorMinorPatch).0\"\r\n        } else {\r\n          $Version = \"$(GitVersion.AssemblySemVer)\"\r\n        }\r\n\r\n        Set-Content \"$(Build.ArtifactStagingDirectory)\\Metadata\\$(Channel).version.txt\" $Version\r\n\r\n  - task: NuGetToolInstaller@0\r\n    displayName: 'Install NuGet Tooling'\r\n\r\n  - task: NuGetCommand@2\r\n    displayName: 'Restore NuGet Packages'\r\n    inputs:\r\n      restoreSolution: '$(solution)'\r\n\r\n  - task: PowerShell@2\r\n    displayName: 'Set Bugsnag API Key'\r\n    inputs:\r\n      targetType: inline\r\n      script: |\r\n        $cfg = Get-Content \".\\EarTrumpet\\app.config\"\r\n        $cfg | ForEach-Object { $_.Replace(\"{bugsnag.apikey}\", \"$(bugsnag.apikey)\") } | Set-Content \".\\EarTrumpet\\app.config\"\r\n\r\n  - task: PowerShell@2\r\n    displayName: 'Adjust manifest and store association'\r\n    inputs:\r\n      targetType: inline\r\n      script: |\r\n        $manifestPath = \".\\EarTrumpet.Package\\Package.appxmanifest\"\r\n        $storeAssociationPath = \".\\EarTrumpet.Package\\Package.StoreAssociation.xml\"\r\n\r\n        $manifest = [xml](Get-Content $manifestPath)\r\n        $manifest.Package.Identity.Publisher = \"$(Publisher)\"\r\n        if(\"$(Channel)\" -eq \"AppInstaller\") {\r\n          $manifest.Package.Properties.DisplayName = \"EarTrumpet ($(GitVersion.BranchName))\"\r\n          $manifest.Package.Applications.Application.VisualElements.DisplayName = \"EarTrumpet ($(GitVersion.BranchName))\"\r\n        }\r\n        $manifest.Save($manifestPath)\r\n\r\n        $storeAssociation = [xml](Get-Content $storeAssociationPath)\r\n        $storeAssociation.StoreAssociation.Publisher = \"$(Publisher)\"\r\n        if(\"$(Channel)\" -eq \"AppInstaller\") {\r\n          $storeAssociation.StoreAssociation.ProductReservedInfo.ReservedNames.ReservedName = \"EarTrumpet ($(GitVersion.BranchName))\"\r\n        }\r\n        $storeAssociation.Save($storeAssociationPath)\r\n\r\n  - task: MSBuild@1\r\n    displayName: 'Build EarTrumpet appxupload package'\r\n    inputs:\r\n      solution: 'EarTrumpet.Package/EarTrumpet.Package.wapproj'\r\n      platform: 'x86'\r\n      configuration: '$(buildConfiguration)'\r\n      msbuildArguments: '/p:AppxBundle=Always /p:Channel=$(Channel) /p:AppxPackageDir=\"$(Build.ArtifactStagingDirectory)/AppxUpload\" /p:AppxPackageSigningEnabled=false /p:UapAppxPackageBuildMode=CI'\r\n      maximumCpuCount: true\r\n    condition: and(succeeded(), eq(variables['Channel'], 'Store'))\r\n\r\n  - task: PublishBuildArtifacts@1\r\n    displayName: 'Publish appxupload artifacts'\r\n    inputs:\r\n      pathToPublish: '$(Build.ArtifactStagingDirectory)/AppxUpload'\r\n      artifactName: 'AppxUpload'\r\n    condition: and(succeeded(), eq(variables['Channel'], 'Store'))\r\n\r\n  - task: MSBuild@1\r\n    displayName: 'Build EarTrumpet appinstaller/sideload package'\r\n    inputs:\r\n      solution: 'EarTrumpet.Package/EarTrumpet.Package.wapproj'\r\n      platform: 'x86'\r\n      configuration: '$(buildConfiguration)'\r\n      msbuildArguments: '/p:AppxBundle=Always /p:Channel=$(Channel) /p:AppxPackageDir=\"$(Build.ArtifactStagingDirectory)/Sideload\" /p:AppxPackageSigningEnabled=false /p:UapAppxPackageBuildMode=SideloadOnly /p:GenerateAppInstallerFile=true /p:AppxPackageTestDir=\"$(Build.ArtifactStagingDirectory)/Sideload/\" /p:AppInstallerUri=https://install.eartrumpet.app'\r\n      maximumCpuCount: true\r\n    condition: and(succeeded(), eq(variables['Channel'], 'AppInstaller'))\r\n\r\n  - task: PowerShell@2\r\n    displayName: 'Adjust appinstaller manifest'\r\n    inputs:\r\n      targetType: inline\r\n      script: |\r\n        $manifestPath = \"$(Build.ArtifactStagingDirectory)/Sideload/EarTrumpet.Package.appinstaller\"\r\n        $manifest = [xml](Get-Content $manifestPath)\r\n        $manifest.AppInstaller.Uri = \"https://install.eartrumpet.app/$(GitVersion.BranchName)/EarTrumpet.Package.appinstaller\"\r\n        $manifest.AppInstaller.MainBundle.Uri = \"https://install.eartrumpet.app/$(GitVersion.BranchName)/EarTrumpet.Package_$(GitVersion.MajorMinorPatch).$(GitVersion.CommitsSinceVersionSource)_x86.appxbundle\"\r\n        $manifest.AppInstaller.MainBundle.Publisher = \"$(Publisher)\"\r\n        $manifest.Save($manifestPath)\r\n      pwsh: true\r\n    condition: and(succeeded(), eq(variables['Channel'], 'AppInstaller'))\r\n\r\n  - task: PublishBuildArtifacts@1\r\n    displayName: 'Publish appinstaller/sideload package artifacts'\r\n    inputs:\r\n      pathToPublish: '$(Build.ArtifactStagingDirectory)/Sideload'\r\n      artifactName: 'Sideload'\r\n    condition: and(succeeded(), eq(variables['Channel'], 'AppInstaller'))\r\n\r\n  - task: CopyFiles@2\r\n    displayName: 'Stage packaging metadata'\r\n    inputs:\r\n      SourceFolder: 'Packaging'\r\n      Contents: '**'\r\n      TargetFolder: '$(Build.ArtifactStagingDirectory)/Metadata/Packaging'\r\n    condition: and(succeeded(), eq(variables['Channel'], 'Store'))\r\n\r\n  - task: PublishBuildArtifacts@1\r\n    displayName: 'Publish metadata artifacts'\r\n    inputs:\r\n      pathToPublish: '$(Build.ArtifactStagingDirectory)/Metadata'\r\n      artifactName: 'Metadata'\r\n"
  },
  {
    "path": ".chocolatey/eartrumpet.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<package xmlns=\"http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd\">\r\n  <metadata>\r\n    <id>eartrumpet</id>\r\n    <version>2.1.7.0</version>\r\n    <packageSourceUrl>https://github.com/File-New-Project/EarTrumpet/tree/master/.chocolatey</packageSourceUrl>\r\n    <owners>File-New-Project</owners>\r\n    <title>EarTrumpet</title>\r\n    <authors>EarTrumpet Contributors</authors>\r\n    <projectUrl>https://github.com/File-New-Project/EarTrumpet</projectUrl>\r\n    <iconUrl>https://raw.githubusercontent.com/File-New-Project/EarTrumpet/master/.chocolatey/logo.png</iconUrl>\r\n    <copyright>2015 File-New-Project</copyright>\r\n    <licenseUrl>https://github.com/File-New-Project/EarTrumpet/blob/master/LICENSE</licenseUrl>\r\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\r\n    <projectSourceUrl>https://github.com/File-New-Project/EarTrumpet</projectSourceUrl>\r\n    <bugTrackerUrl>https://github.com/File-New-Project/EarTrumpet/issues</bugTrackerUrl>\r\n    <tags>EarTrumpet</tags>\r\n    <description>EarTrumpet is a powerful volume control app for Windows</description>\r\n  </metadata>\r\n  <files>\r\n    <file src=\"tools\\**\" target=\"tools\" />\r\n  </files>\r\n</package>\r\n"
  },
  {
    "path": ".chocolatey/tools/LICENSE.txt",
    "content": "﻿From: https://github.com/File-New-Project/EarTrumpet/blob/master/LICENSE\r\n\r\nLICENSE\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE."
  },
  {
    "path": ".chocolatey/tools/VERIFICATION.txt",
    "content": "﻿VERIFICATION\r\nVerification is intended to assist the Chocolatey moderators and community\r\nin verifying that this package's contents are trustworthy.\r\n \r\nThis package is published directly by File-New-Project, the team that owns EarTrumpet."
  },
  {
    "path": ".chocolatey/tools/chocolateybeforemodify.ps1",
    "content": "﻿$process = Get-Process -Name EarTrumpet -ErrorAction SilentlyContinue\r\nif ($process) {\r\n  $process | Stop-Process -Force\r\n}"
  },
  {
    "path": ".chocolatey/tools/chocolateyinstall.ps1",
    "content": "﻿$ErrorActionPreference = 'Stop'\r\n$toolsDir   = \"$(Split-Path -parent $MyInvocation.MyCommand.Definition)\"\r\n$installPath = Join-Path $toolsDir 'EarTrumpet'\r\n$exePath = Join-Path $toolsDir 'EarTrumpet\\EarTrumpet.exe'\r\n$zipPath = Join-Path $toolsDir 'Release.zip'\r\n\r\nInstall-ChocolateyZipPackage -PackageName \"$packageName\" `\r\n                             -Url \"$zipPath\" `\r\n                             -UnzipLocation \"$installPath\"\r\n                             \r\nWrite-Output \"Adding shortcut to Start Menu\"\r\nInstall-ChocolateyShortcut -ShortcutFilePath \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\EarTrumpet.lnk\" -TargetPath $exePath\r\n\r\nWrite-Output \"Adding shortcut to Startup\"\r\nNew-ItemProperty -LiteralPath 'HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run' -Name 'EarTrumpet' -Value $exePath -PropertyType String -Force -ea SilentlyContinue | Out-Null"
  },
  {
    "path": ".chocolatey/tools/chocolateyuninstall.ps1",
    "content": "Remove-Item \"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\EarTrumpet.lnk\" -ErrorAction Continue\r\nRemove-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\" -Name \"EarTrumpet\""
  },
  {
    "path": ".gitattributes",
    "content": "[core]\r\n* text eol=crlf\r\n\r\n*.png binary\r\n*.jpg binary\r\n*.jpeg binary\r\n*.gif binary\r\n*.ico binary\r\n*.mov binary\r\n*.mp4 binary\r\n*.mp3 binary\r\n*.flv binary\r\n*.fla binary\r\n*.swf binary\r\n*.gz binary\r\n*.zip binary\r\n*.7z binary\r\n*.ttf binary\r\n*.eot binary\r\n*.woff binary\r\n*.pyc binary\r\n*.pdf binary\r\n*.ez binary\r\n*.bz2 binary\r\n*.swp binary\r\n*.pfx binary\r\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\r\n\r\n## Supported\r\ngithub: File-New-Project\r\n\r\n## Currently unsupported\r\npatreon:\r\nopen_collective:\r\nko_fi:\r\ntidelift:\r\ncommunity_bridge:\r\nliberapay:\r\nissuehunt:\r\notechie:\r\nlfx_crowdfunding:\r\ncustom:\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug report\r\ndescription: Report a problem with EarTrumpet or related add-on\r\nbody:\r\n  - type: textarea\r\n    id: summary\r\n    attributes:\r\n      label: Summary\r\n      description: A clear explaination of what the problem is.\r\n    validations:\r\n      required: true\r\n  - type: textarea\r\n    id: steps\r\n    attributes:\r\n      label: Steps to reproduce\r\n    validations:\r\n      required: true\r\n  - type: input\r\n    id: eartrumpet_version\r\n    attributes:\r\n      label: EarTrumpet version\r\n      description: Right-click the EarTrumpet icon, then click Settings > General > About.\r\n    validations:\r\n      required: true\r\n  - type: input\r\n    id: windows_version\r\n    attributes:\r\n      label: Windows version\r\n      description: Open the Command Prompt and observe the version shown on the first line.\r\n      placeholder: 10.0.22000.1024\r\n    validations:\r\n      required: true\r\n  - type: textarea\r\n    id: additional_info\r\n    attributes:\r\n      label: Additional information\r\n      description: Screenshots, logs, and other supplemental data go here.\r\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\r\ncontact_links:\r\n  - name: Request a feature\r\n    url: https://github.com/File-New-Project/EarTrumpet/discussions/new?category=ideas\r\n    about: Share an idea or suggest a change to EarTrumpet or related add-on\r\n  - name: Ask a question\r\n    url: https://github.com/File-New-Project/EarTrumpet/discussions/new?category=Q-A\r\n    about: Ask a question about EarTrumpet or anything related"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: EarTrumpet-CI\r\non:\r\n  push:\r\n    branches:\r\n      - master\r\n      - dev\r\n      - rafael/*\r\n      - dave/*\r\n      - david/*\r\n    paths-ignore:\r\n      - \"**/*.md\"\r\n      - \".github/ISSUE_TEMPLATE/*\"\r\n      - \".github/workflows/sponsors.yml\"\r\n      - \".github/workflows/translators.yml\"\r\n      - \"Graphics/*\"\r\n  pull_request:\r\n    branches:\r\n      - dev\r\n    paths-ignore:\r\n      - \"**/*.md\"\r\n      - crowdin.yml\r\nenv:\r\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\r\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\r\n  BUILD_CONFIGURATION: Release\r\n  BUILD_PLATFORM: x86\r\n  ARTIFACTS_BASE: '${{ github.workspace }}\\artifacts'\r\n\r\njobs:\r\n  build:\r\n    runs-on: windows-2019\r\n    strategy:\r\n      matrix:\r\n        channel: [AppInstaller, Store, Chocolatey]\r\n        include:\r\n          - channel: AppInstaller\r\n            publisher:\r\n              \"CN=File-New-Project, O=File-New-Project, L=Purcellville, S=Virginia, C=US\"\r\n          - channel: Store\r\n            publisher: CN=6099D0EF-9374-47ED-BDFE-A82136831235\r\n          - channel: Chocolatey\r\n            publisher:\r\n              \"CN=File-New-Project, O=File-New-Project, L=Purcellville, S=Virginia, C=US\"\r\n      max-parallel: 3\r\n    steps:\r\n      - name: Checkout\r\n        uses: actions/checkout@v3\r\n\r\n      - name: Fetch all history for all tags and branches\r\n        run: git fetch --prune --unshallow\r\n\r\n      - name: Install GitVersion\r\n        uses: gittools/actions/gitversion/setup@v0.9.15\r\n        with:\r\n          versionSpec: \"5.x\"\r\n          includePrerelease: false\r\n\r\n      - name: Use GitVersion\r\n        id: gitversion\r\n        uses: gittools/actions/gitversion/execute@v0.9.15\r\n\r\n      - name: Create artifact layout\r\n        shell: powershell\r\n        run: |\r\n          $ErrorActionPreference = 'Ignore'\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\"\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\\appxupload\"\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\\sideload\"\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\\chocolatey\"\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\\loose\"\r\n          New-Item -ItemType Directory \"$env:ARTIFACTS_BASE\\metadata\"\r\n\r\n      - name: Generate versioning metadata\r\n        shell: powershell\r\n        run: |\r\n          Set-Content \"$env:ARTIFACTS_BASE\\metadata\\semver.txt\" \"${{ steps.gitversion.outputs.semVer }}\"\r\n          Set-Content \"$env:ARTIFACTS_BASE\\metadata\\branch.txt\" \"${{ steps.gitversion.outputs.branchName }}\"\r\n          Set-Content \"$env:ARTIFACTS_BASE\\metadata\\commits.txt\" \"${{ steps.gitversion.outputs.commitsSinceVersionSource }}\"\r\n\r\n          if(\"${{ matrix.channel }}\" -eq \"Store\") {\r\n            $Version = \"${{ steps.gitversion.outputs.majorMinorPatch }}.0\"\r\n          } else {\r\n            $Version = \"${{ steps.gitversion.outputs.majorMinorPatch }}.${{ steps.gitversion.outputs.commitsSinceVersionSource }}\"\r\n          }\r\n\r\n          Set-Content \"$env:ARTIFACTS_BASE\\metadata\\${{ matrix.channel }}.version.txt\" $Version\r\n\r\n      - name: Install NuGet\r\n        uses: NuGet/setup-nuget@v1\r\n        with:\r\n          nuget-version: latest\r\n\r\n      - name: Restore NuGet Packages\r\n        run: nuget restore EarTrumpet.vs15.sln\r\n\r\n      - name: Set Bugsnag API Key\r\n        shell: powershell\r\n        run: |\r\n          $cfg = Get-Content \".\\EarTrumpet\\app.config\"\r\n          $cfg | ForEach-Object { $_.Replace(\"{bugsnag.apikey}\", \"${{ secrets.bugsnag_api_key }}\") } | Set-Content \".\\EarTrumpet\\app.config\"\r\n\r\n      - name: Adjust manifest and store association\r\n        if: matrix.channel == 'Store' || matrix.channel == 'AppInstaller'\r\n        shell: powershell\r\n        run: |\r\n          $manifestPath = \".\\EarTrumpet.Package\\Package.appxmanifest\"\r\n          $storeAssociationPath = \".\\EarTrumpet.Package\\Package.StoreAssociation.xml\"\r\n\r\n          $manifest = [xml](Get-Content $manifestPath)\r\n          $manifest.Package.Identity.Publisher = \"${{ matrix.publisher }}\"\r\n          if(\"${{ matrix.channel }}\" -eq \"AppInstaller\") {\r\n            if(\"${{ steps.gitversion.outputs.branchName }}\" -eq \"master\") {\r\n              $manifest.Package.Properties.DisplayName = \"EarTrumpet\"\r\n              $manifest.Package.Applications.Application.VisualElements.DisplayName = \"EarTrumpet\"\r\n            } else {\r\n              $manifest.Package.Properties.DisplayName = $manifest.Package.Properties.DisplayName + \" (${{ steps.gitversion.outputs.branchName }})\"\r\n            $manifest.Package.Applications.Application.VisualElements.DisplayName = \"EarTrumpet (${{ steps.gitversion.outputs.branchName }})\"\r\n            }\r\n          }\r\n          $manifest.Save($manifestPath)\r\n\r\n          $storeAssociation = [xml](Get-Content $storeAssociationPath)\r\n          $storeAssociation.StoreAssociation.Publisher = \"${{ matrix.publisher }}\"\r\n          if(\"${{ matrix.channel }}\" -eq \"AppInstaller\") {\r\n            if(\"${{ steps.gitversion.outputs.branchName }}\" -eq \"master\") {\r\n              $storeAssociation.StoreAssociation.ProductReservedInfo.ReservedNames.ReservedName = \"EarTrumpet\"\r\n            } else {\r\n              $storeAssociation.StoreAssociation.ProductReservedInfo.ReservedNames.ReservedName = \"EarTrumpet (${{ steps.gitversion.outputs.branchName }})\"\r\n            }\r\n          }\r\n          $storeAssociation.Save($storeAssociationPath)\r\n\r\n      - name: Set up MSBuild\r\n        uses: microsoft/setup-msbuild@v1\r\n\r\n      - name: Build EarTrumpet appxupload package\r\n        if: matrix.channel == 'Store'\r\n        shell: cmd\r\n        run:\r\n          msbuild EarTrumpet.Package/EarTrumpet.Package.wapproj\r\n          /p:Platform=%BUILD_PLATFORM% /p:Configuration=%BUILD_CONFIGURATION%\r\n          /p:AppxBundle=Always /p:Channel=${{ matrix.channel }}\r\n          /p:AppxPackageDir=%ARTIFACTS_BASE%\\appxupload\\\r\n          /p:AppxPackageSigningEnabled=false /p:UapAppxPackageBuildMode=CI\r\n          -maxcpucount\r\n\r\n      - name: Upload appxupload artifact\r\n        if: matrix.channel == 'Store' && github.event_name != 'pull_request'\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: appxupload\r\n          path: artifacts/appxupload\r\n\r\n      - name: Build EarTrumpet\r\n        if: matrix.channel == 'Chocolatey'\r\n        shell: cmd\r\n        run:\r\n          msbuild EarTrumpet/EarTrumpet.csproj /p:Platform=%BUILD_PLATFORM%\r\n          /p:Configuration=%BUILD_CONFIGURATION% /p:Channel=${{ matrix.channel\r\n          }} /p:OutputPath=%ARTIFACTS_BASE%\\loose\\ -maxcpucount\r\n\r\n      - name: Upload loose artifacts\r\n        if:\r\n          matrix.channel == 'Chocolatey' && github.event_name != 'pull_request'\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: loose\r\n          path: artifacts/loose\r\n\r\n      - name: Build EarTrumpet appinstaller/sideload package\r\n        if: matrix.channel == 'AppInstaller' || matrix.channel == 'Chocolatey'\r\n        shell: cmd\r\n        run:\r\n          msbuild EarTrumpet.Package/EarTrumpet.Package.wapproj\r\n          /p:Platform=%BUILD_PLATFORM% /p:Configuration=%BUILD_CONFIGURATION%\r\n          /p:AppxBundle=Always /p:Channel=${{ matrix.channel }}\r\n          /p:AppxPackageDir=%ARTIFACTS_BASE%\\sideload\\\r\n          /p:AppxPackageSigningEnabled=false\r\n          /p:UapAppxPackageBuildMode=SideloadOnly\r\n          /p:GenerateAppInstallerFile=true\r\n          /p:AppxPackageTestDir=%ARTIFACTS_BASE%\\sideload\\\r\n          /p:AppInstallerUri=\"https://install.eartrumpet.app\" -maxcpucount\r\n\r\n      - name: Adjust appinstaller manifest\r\n        if:\r\n          matrix.channel == 'AppInstaller' && github.event_name !=\r\n          'pull_request'\r\n        shell: powershell\r\n        run: |\r\n          $manifestPath = \"$env:ARTIFACTS_BASE/sideload/EarTrumpet.Package.appinstaller\"\r\n          $manifest = [xml](Get-Content $manifestPath)\r\n          $manifest.AppInstaller.Uri = \"https://install.eartrumpet.app/${{ steps.gitversion.outputs.branchName }}/EarTrumpet.Package.appinstaller\"\r\n          $manifest.AppInstaller.MainBundle.Uri = \"https://install.eartrumpet.app/${{ steps.gitversion.outputs.branchName }}/EarTrumpet.Package_${{ steps.gitversion.outputs.majorMinorPatch }}.${{ steps.gitversion.outputs.commitsSinceVersionSource }}_x86.appxbundle\"\r\n          $manifest.AppInstaller.MainBundle.Publisher = \"${{ matrix.publisher }}\"\r\n\r\n          $fragment = [xml]'<AppInstaller xmlns=\"http://schemas.microsoft.com/appx/appinstaller/2017/2\"><Dependencies><Package Name=\"Microsoft.VCLibs.140.00.UWPDesktop\" Publisher=\"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US\" Version=\"14.0.30704.0\" ProcessorArchitecture=\"x86\" Uri=\"https://aka.ms/Microsoft.VCLibs.x86.14.00.Desktop.appx\" /></Dependencies></AppInstaller>'\r\n          $manifest.AppInstaller.InsertAfter($manifest.ImportNode($fragment.AppInstaller.Dependencies, $true), $manifest.AppInstaller.MainBundle)\r\n\r\n          $manifest.Save($manifestPath)\r\n\r\n      - name: Upload appinstaller/sideload package artifacts\r\n        if:\r\n          matrix.channel == 'AppInstaller' && github.event_name !=\r\n          'pull_request'\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: sideload\r\n          path: artifacts/sideload\r\n\r\n      - name: Fix up PDPs\r\n        if: matrix.channel == 'Store' && github.event_name != 'pull_request'\r\n        shell: pwsh\r\n        run: |\r\n          Set-Location packaging\\MicrosoftStore\\PDPs\r\n          Get-ChildItem | ForEach-Object {\r\n              $locale = $_.Name\r\n              $pdp = [xml](Get-Content \"$locale\\pdp.xml\")\r\n              $pdp.ProductDescription.language = $locale\r\n              $pdp.ProductDescription.lang = $locale\r\n              $pdp.ProductDescription\r\n              $pdp.Save((Resolve-Path \"$locale\\pdp.xml\"))\r\n          }\r\n\r\n      - name: Stage msix packaging metadata\r\n        if: matrix.channel == 'Store' && github.event_name != 'pull_request'\r\n        shell: powershell\r\n        run: |\r\n          Copy-Item packaging\\ -Recurse \"$env:ARTIFACTS_BASE\\metadata\\\"\r\n\r\n      - name: Upload metadata artifacts\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: metadata\r\n          path: artifacts/metadata\r\n\r\n      - name: Stage chocolatey packaging metadata\r\n        if:\r\n          matrix.channel == 'Chocolatey' && github.event_name != 'pull_request'\r\n        shell: powershell\r\n        run: |\r\n          Copy-Item .chocolatey\\* -Recurse \"$env:ARTIFACTS_BASE\\chocolatey\\\"\r\n\r\n      - name: Upload chocolatey artifacts\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: chocolatey\r\n          path: artifacts/chocolatey\r\n  release:\r\n    needs: build\r\n    runs-on: windows-2019\r\n    if: github.event_name != 'pull_request'\r\n    strategy:\r\n      matrix:\r\n        channel: [AppInstaller, Store, Chocolatey]\r\n      max-parallel: 3\r\n    env:\r\n      AZURE_TENANT_ID: ${{ secrets.azure_tenant_id }}\r\n      AZURE_CLIENT_ID: ${{ secrets.azure_client_id }}\r\n      AZURE_CLIENT_SECRET: ${{ secrets.azure_client_secret }}\r\n    steps:\r\n      - name: Download artifacts\r\n        uses: actions/download-artifact@v3\r\n        with:\r\n          path: artifacts\r\n\r\n      - name: Install NuGet\r\n        uses: NuGet/setup-nuget@v1\r\n        with:\r\n          nuget-version: latest\r\n\r\n      - name: Install Build Tools\r\n        run: nuget install Microsoft.Windows.SDK.BuildTools\r\n\r\n      - name: Install Azure Codesigning\r\n        shell: pwsh\r\n        env:\r\n          ACS_PACKAGE_URI: ${{ secrets.acs_package_uri }}\r\n          ACS_METADATA_URI: ${{ secrets.acs_metadata_uri }}\r\n          GITHUB_RUN_ID: ${{ github.run_id }}\r\n        run: |\r\n          Invoke-WebRequest $env:ACS_PACKAGE_URI -UseBasicParsing -OutFile package.zip\r\n          Expand-Archive package.zip -DestinationPath acs\r\n          Invoke-WebRequest $env:ACS_METADATA_URI -UseBasicParsing -OutFile acs\\metadata.json\r\n\r\n      - name: Sign and repackage Store artifacts\r\n        if: matrix.channel == 'Store'\r\n        shell: pwsh\r\n        run: |\r\n          $MetadataPath = \"$env:ARTIFACTS_BASE\\metadata\"\r\n          $Version = [Version](Get-Content \"$MetadataPath\\Store.version.txt\")\r\n          $AppxUploadPath = \"$env:ARTIFACTS_BASE\\AppxUpload\"\r\n          $BundleFilename = \"EarTrumpet.Package_${Version}_x86.appxbundle\"\r\n          $SymbolsBundleFilename = \"EarTrumpet.Package_${Version}_x86.appxsym\"\r\n          $AppxFilename = \"EarTrumpet.Package_${Version}_x86.appx\"\r\n          $StoreBundleFilename = \"EarTrumpet.Package_${Version}_x86_bundle.appxupload\"\r\n\r\n          ### Expand bundle and appx package within\r\n          $ExtractedPath = \"$env:ARTIFACTS_BASE\\Extracted\"\r\n          Expand-Archive \"$AppxUploadPath\\$StoreBundleFilename\" \"$ExtractedPath\\AppxUpload\"\r\n          Expand-Archive \"$ExtractedPath\\AppxUpload\\$SymbolsBundleFilename\" \"$ExtractedPath\\Symbols\"\r\n          Expand-Archive \"$ExtractedPath\\AppxUpload\\$BundleFilename\" \"$ExtractedPath\\Bundle\"\r\n          Expand-Archive \"$ExtractedPath\\Bundle\\$AppxFilename\" \"$ExtractedPath\\Package\"\r\n\r\n          ### Place symbols next to executable image\r\n          Copy-Item \"$ExtractedPath\\Symbols\\EarTrumpet.pdb\" \"$ExtractedPath\\Package\\EarTrumpet\\\"\r\n\r\n          ### Sign executable image\r\n          & (Resolve-Path \"Microsoft.Windows.SDK.BuildTools.*\\bin\\*\\x64\\signtool.exe\") sign /v /fd SHA256 /td SHA256 /tr http://timestamp.acs.microsoft.com /dlib \"acs\\bin\\x64\\Azure.CodeSigning.Dlib.dll\" /dmdf \"acs\\metadata.json\" \"$ExtractedPath\\Package\\EarTrumpet\\EarTrumpet.exe\"\r\n\r\n          $SignedPath = \"$env:ARTIFACTS_BASE\\Signed\"\r\n          New-Item -ItemType Directory \"$SignedPath\"\r\n          New-Item -ItemType Directory \"$SignedPath\\Package\"\r\n          New-Item -ItemType Directory \"$SignedPath\\Bundle\"\r\n          New-Item -ItemType Directory \"$SignedPath\\AppxUpload\"\r\n\r\n          ### Repackage appx package\r\n          & \"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.17763.0\\x86\\makeappx.exe\" pack /l /h sha256 /d \"$ExtractedPath\\Package\" /o /p \"$SignedPath\\Package\\$AppxFilename\"\r\n\r\n          Set-ItemProperty \"$SignedPath\\Package\\$AppxFilename\" -Name IsReadOnly -Value $true\r\n          Copy-Item \"$ExtractedPath\\Bundle\\*.appx\" \"$SignedPath\\Package\\\" -ErrorAction Ignore\r\n          Set-ItemProperty \"$SignedPath\\Package\\$AppxFilename\" -Name IsReadOnly -Value $false\r\n\r\n          ### Repackage appx bundle\r\n          & \"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.17763.0\\x86\\makeappx.exe\" bundle /d \"$SignedPath\\Package\" /bv $Version /o /p \"$SignedPath\\Bundle\\$BundleFilename\"\r\n\r\n          ### Repackage appxupload\r\n          Copy-Item \"$ExtractedPath\\AppxUpload\\$SymbolsBundleFilename\" \"$SignedPath\\Bundle\"\r\n          Compress-Archive -Path \"$SignedPath\\Bundle\\*\" -DestinationPath \"$SignedPath\\AppxUpload\\$StoreBundleFilename\" -CompressionLevel Optimal\r\n\r\n      - name: Sign AppInstaller artifacts\r\n        if: matrix.channel == 'AppInstaller'\r\n        shell: pwsh\r\n        run: |\r\n          $MetadataPath = \"$env:ARTIFACTS_BASE\\metadata\"\r\n          $Version = [Version](Get-Content \"$MetadataPath\\AppInstaller.version.txt\")\r\n          $Branch = Get-Content \"$MetadataPath\\branch.txt\"\r\n          $Semver= Get-Content \"$MetadataPath\\semver.txt\"\r\n          $BundleFilename = \"EarTrumpet.Package_${Version}_x86.appxbundle\"\r\n          $SymbolsBundleFilename = \"EarTrumpet.Package_${Version}_x86.appxsym\"\r\n          $AppxFilename = \"EarTrumpet.Package_${Version}_x86.appx\"\r\n\r\n          $SideloadPath = \"$env:ARTIFACTS_BASE\\sideload\"\r\n          $SignedPath = \"$env:ARTIFACTS_BASE\\sideload\\signed\"\r\n\r\n          ### Expand bundle and appx package within\r\n          $ExtractedPath = \"$env:TEMP\\extracted\"\r\n          Expand-Archive \"$SideloadPath\\$SymbolsBundleFilename\" \"$ExtractedPath\\Symbols\"\r\n          Expand-Archive \"$SideloadPath\\$BundleFilename\" \"$ExtractedPath\\Bundle\"\r\n          Write-Output \"Expand $ExtractedPath\\Bundle\\EarTrumpet.Package_${Version}_x86.appx\"\r\n          Expand-Archive \"$ExtractedPath\\Bundle\\EarTrumpet.Package_${Version}_x86.appx\" \"$ExtractedPath\\Package\"\r\n\r\n          ### Place symbols next to executable image\r\n          Copy-Item \"$ExtractedPath\\Symbols\\EarTrumpet.pdb\" \"$ExtractedPath\\Package\\EarTrumpet\\\"\r\n\r\n          ### Sign executable image\r\n          Write-Output \"Signing $ExtractedPath\\Package\\EarTrumpet\\EarTrumpet.exe\"\r\n          & (Resolve-Path \"Microsoft.Windows.SDK.BuildTools.*\\bin\\*\\x64\\signtool.exe\") sign /v /fd SHA256 /td SHA256 /tr http://timestamp.acs.microsoft.com /dlib \"acs\\bin\\x64\\Azure.CodeSigning.Dlib.dll\" /dmdf \"acs\\metadata.json\" \"$ExtractedPath\\Package\\EarTrumpet\\EarTrumpet.exe\"\r\n\r\n          New-Item -ItemType Directory \"$SignedPath\"\r\n          New-Item -ItemType Directory \"$SignedPath\\Package\"\r\n          New-Item -ItemType Directory \"$SignedPath\\Bundle\"\r\n\r\n          ### Repackage appx package\r\n          & \"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.17763.0\\x86\\makeappx.exe\" pack /l /h sha256 /d \"$ExtractedPath\\Package\" /o /p \"$SignedPath\\Package\\$AppxFilename\"\r\n\r\n          Set-ItemProperty \"$SignedPath\\Package\\EarTrumpet.Package_${Version}_x86.appx\" -Name IsReadOnly -Value $true\r\n          Copy-Item \"$ExtractedPath\\Bundle\\*.appx\" \"$SignedPath\\Package\\\" -ErrorAction Ignore\r\n          Set-ItemProperty \"$SignedPath\\Package\\EarTrumpet.Package_${Version}_x86.appx\" -Name IsReadOnly -Value $false\r\n\r\n          ### Repackage appx bundle\r\n          & \"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.17763.0\\x86\\makeappx.exe\" bundle /d \"$SignedPath\\Package\" /bv $Version /o /p \"$SignedPath\\Bundle\\$BundleFilename\"\r\n\r\n          ### Sign appx bundle\r\n          Write-Output \"Signing $SignedPath\\Bundle\\$BundleFilename\"\r\n          & (Resolve-Path \"Microsoft.Windows.SDK.BuildTools.*\\bin\\*\\x64\\signtool.exe\") sign /v /fd SHA256 /td SHA256 /tr http://timestamp.acs.microsoft.com /dlib \"acs\\bin\\x64\\Azure.CodeSigning.Dlib.dll\" /dmdf \"acs\\metadata.json\" \"$SignedPath\\Bundle\\$BundleFilename\"\r\n\r\n          Copy-Item \"$SideloadPath\\*.appinstaller\" \"$SignedPath\\Bundle\"\r\n\r\n      - name: Sign and repackage Chocolatey artifacts\r\n        if: matrix.channel == 'Chocolatey'\r\n        shell: pwsh\r\n        run: |\r\n          $MetadataPath = \"$env:ARTIFACTS_BASE\\metadata\"\r\n          $Branch = Get-Content \"$MetadataPath\\branch.txt\"\r\n          $Semver= Get-Content \"$MetadataPath\\semver.txt\"\r\n          $LooseFilesPath = \"$env:ARTIFACTS_BASE\\loose\"\r\n\r\n          ### Sign executable image\r\n          & (Resolve-Path \"Microsoft.Windows.SDK.BuildTools.*\\bin\\*\\x64\\signtool.exe\") sign /v /fd SHA256 /td SHA256 /tr http://timestamp.acs.microsoft.com /dlib \"acs\\bin\\x64\\Azure.CodeSigning.Dlib.dll\" /dmdf \"acs\\metadata.json\" \"$LooseFilesPath\\EarTrumpet.exe\"\r\n\r\n          ### Package for release\r\n          Compress-Archive -Path \"$LooseFilesPath\\*\" -DestinationPath \"$env:ARTIFACTS_BASE\\chocolatey\\tools\\release.zip\" -CompressionLevel Optimal\r\n\r\n      - name: Adjust nuspec\r\n        if: matrix.channel == 'Chocolatey'\r\n        shell: pwsh\r\n        run: |\r\n          $MetadataPath = \"$env:ARTIFACTS_BASE\\metadata\"\r\n          $Version = [Version](Get-Content \"$MetadataPath\\Chocolatey.version.txt\")\r\n          $NuspecPath = \"$env:ARTIFACTS_BASE\\chocolatey\\eartrumpet.nuspec\"\r\n\r\n          $nuspec = [xml](Get-Content -Path $NuspecPath)\r\n          $nuspec.package.metadata.version = $Version\r\n          $nuspec.Save($NuspecPath)\r\n\r\n      - name: Create chocolatey package\r\n        if: matrix.channel == 'Chocolatey'\r\n        shell: powershell\r\n        run: |\r\n          choco pack \"$env:ARTIFACTS_BASE\\chocolatey\\eartrumpet.nuspec\" --out \"$env:ARTIFACTS_BASE\\chocolatey\"\r\n\r\n      - name: Upload chocolatey artifact\r\n        if: matrix.channel == 'Chocolatey'\r\n        uses: actions/upload-artifact@v3\r\n        with:\r\n          name: chocolatey-package\r\n          path: artifacts/chocolatey/*.nupkg\r\n\r\n      - name: Install OpenSSH FOD\r\n        if: matrix.channel == 'AppInstaller' || matrix.channel == 'Store'\r\n        shell: powershell\r\n        run: |\r\n          Set-Service -Name wuauserv -StartupType Manual\r\n          Start-Service -Name wuauserv\r\n          Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0\r\n\r\n      - name: Prepare for staging\r\n        if: matrix.channel == 'AppInstaller' || matrix.channel == 'Store'\r\n        shell: powershell\r\n        run: |\r\n          \"${{ secrets.staging_userkey }}\" | Out-File -Encoding ascii staging.key | Out-Null\r\n\r\n      - name: Stage AppInstaller artifacts via SCP\r\n        if: matrix.channel == 'AppInstaller'\r\n        shell: pwsh\r\n        run: |\r\n          icacls .\\staging.key /inheritance:r\r\n          icacls .\\staging.key /grant:r \"$env:USERNAME`:(R)\"\r\n          $Branch = Get-Content $env:ARTIFACTS_BASE\\metadata\\branch.txt\r\n          ssh -i staging.key -o \"StrictHostKeyChecking no\" ${{ secrets.staging_username }}@${{ secrets.staging_host }} \"mkdir -p /var/www/html/$Branch\"\r\n          scp -B -i staging.key -o \"StrictHostKeyChecking no\" $env:ARTIFACTS_BASE\\sideload\\signed\\bundle\\* ${{ secrets.staging_username }}@${{ secrets.staging_host }}:/var/www/html/$Branch\r\n          del staging.key\r\n\r\n      - name: Stage Store artifacts via SCP\r\n        if: matrix.channel == 'Store'\r\n        shell: pwsh\r\n        run: |\r\n          icacls .\\staging.key /inheritance:r\r\n          icacls .\\staging.key /grant:r \"$env:USERNAME`:(R)\"\r\n          $Branch = Get-Content $env:ARTIFACTS_BASE\\metadata\\branch.txt\r\n          ssh -i staging.key -o \"StrictHostKeyChecking no\" ${{ secrets.staging_username }}@${{ secrets.staging_host }} \"mkdir -p /var/www/html/store/$Branch\"\r\n          scp -B -i staging.key -o \"StrictHostKeyChecking no\" $env:ARTIFACTS_BASE\\signed\\appxupload\\* ${{ secrets.staging_username }}@${{ secrets.staging_host }}:/var/www/html/store/$Branch\r\n          del staging.key\r\n\r\n      - name: Push release to Partner Center via StoreBroker\r\n        if: matrix.channel == 'Store'\r\n        shell: powershell\r\n        run: |\r\n          Set-PSRepository -Name \"PSGallery\" -InstallationPolicy Trusted\r\n          Install-Module -Name StoreBroker\r\n\r\n          $Password = ConvertTo-SecureString '${{ secrets.partnercenter_clientkey }}' -AsPlainText -Force\r\n          $Credentials = New-Object System.Management.Automation.PSCredential ('${{ secrets.partnercenter_clientid }}', $Password)\r\n          Set-StoreBrokerAuthentication -TenantId '${{ secrets.partnercenter_tenantid }}' -Credential $Credentials -Verbose\r\n\r\n          $MetadataPath = \"$env:ARTIFACTS_BASE\\metadata\"\r\n          $PackagingRoot = \"$MetadataPath\\Packaging\\MicrosoftStore\"\r\n          $SubmissionRoot = \"$env:TEMP\\Packaging\\Submission\"\r\n          $Version = [Version](Get-Content \"$MetadataPath\\Store.version.txt\")\r\n          $StoreBundleFilename = \"EarTrumpet.Package_${Version}_x86_bundle.appxupload\"\r\n\r\n          New-SubmissionPackage -ConfigPath \"$PackagingRoot\\SBConfig.json\" -PDPRootPath \"$PackagingRoot\\PDPs\" -ImagesRootPath \"$PackagingRoot\\PDPs\" -AppxPath \"$env:ARTIFACTS_BASE\\Signed\\AppxUpload\\$StoreBundleFilename\" -MediaFallbackLanguage en-US -OutPath \"$SubmissionRoot\" -OutName EarTrumpet -Verbose\r\n          $submissionId, $submissionUrl = Update-ApplicationSubmission -AppId \"${{ secrets.partnercenter_appid }}\" -SubmissionDataPath \"$SubmissionRoot\\EarTrumpet.json\" -PackagePath \"$SubmissionRoot\\EarTrumpet.zip\" -AddPackages -UpdateListings -UpdatePublishModeAndVisibility -UpdatePricingAndAvailability -UpdateAppProperties -UpdateNotesForCertification -TargetPublishMode Manual -Force -Verbose\r\n          Complete-ApplicationSubmission -AppId \"${{ secrets.partnercenter_appid }}\" -SubmissionId $submissionId -Verbose\r\n"
  },
  {
    "path": ".github/workflows/sponsors.yml",
    "content": "name: Generate Sponsors\r\non:\r\n  workflow_dispatch:\r\n  schedule:\r\n    - cron: 0 12 1-31 * *\r\njobs:\r\n  deploy:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - name: Checkout\r\n        uses: actions/checkout@v3\r\n\r\n      - name: Generate Sponsors\r\n        uses: JamesIves/github-sponsors-readme-action@v1\r\n        with:\r\n          token: ${{ secrets.SPONSORS_PAT }}\r\n          file: 'README.md'\r\n          organization: true\r\n          template: '<a href=\"https://github.com/{{{ login }}}\"><img src=\"https://github.com/{{{ login }}}.png\" width=\"60px\" alt=\"{{{ name }}}\" title=\"{{{ name }}}\" /></a> '\r\n\r\n      - name: Deploy to GitHub Pages\r\n        uses: JamesIves/github-pages-deploy-action@v4\r\n        with:\r\n          branch: master\r\n          folder: '.'\r\n"
  },
  {
    "path": ".github/workflows/translators.yml",
    "content": "name: Update Translators List\r\n\r\non:\r\n  schedule:\r\n    - cron: '0 0 * * 0' # Run weekly on Sunday at 00:00\r\n  workflow_dispatch:\r\n\r\njobs:\r\n  update-translators:\r\n    runs-on: windows-latest\r\n    steps:\r\n      - name: Checkout code\r\n        uses: actions/checkout@v4\r\n\r\n      - name: Update README.md\r\n        shell: pwsh\r\n        run: |\r\n          $headers = @{\r\n            \"Authorization\" = \"Bearer ${{ secrets.CROWDIN_API_TOKEN }}\"\r\n          }\r\n\r\n          $response = Invoke-RestMethod `\r\n            -Uri \"https://api.crowdin.com/api/v2/projects/407880/members\" `\r\n            -Headers $headers\r\n          $translators = $response.data.data\r\n\r\n          $html = ($translators | Sort-Object -Property @{Expression={ $_.fullName }}, @{Expression={ $_.username }} | ForEach-Object {\r\n              $translator = $_\r\n              $translatorName = if ($translator.fullName) { $translator.fullName } else { $translator.username }\r\n              $avatarUrl = $translator.avatarUrl\r\n              \"<img src=`\"$avatarUrl`\" width=`\"60`\" alt=`\"$translatorName`\" title=`\"$translatorName`\" />\"\r\n          }) -join \" \"\r\n          $html = \"<!-- begin-translators -->`n$html`n<!-- end-translators -->\"\r\n\r\n          $readmeContent = Get-Content -Path .\\README.md -Raw\r\n          $readmeContent -match \"(?<sof>[\\s\\S]*?)<!-- begin-translators -->[\\s\\S]*?<!-- end-translators -->(?<eof>[\\s\\S]*)\"\r\n          $readmeContent = $matches[\"sof\"] + $html + $matches[\"eof\"]\r\n\r\n          Set-Content -Path .\\README.md -Value $readmeContent\r\n\r\n      - name: Commit changes\r\n        run: |\r\n          git config --local user.email \"action@github.com\"\r\n          git config --local user.name \"GitHub Action\"\r\n          git add README.md\r\n          git commit -m \"Update translators via GitHub Actions\" || exit 0\r\n          git push origin master\r\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\r\n## files generated by popular Visual Studio add-ons.\r\n\r\n# User-specific files\r\n*.suo\r\n*.user\r\n*.userosscache\r\n*.sln.docstates\r\n\r\n# User-specific files (MonoDevelop/Xamarin Studio)\r\n*.userprefs\r\n\r\n# Build results\r\n[Dd]ebug/\r\n[Dd]ebugPublic/\r\n[Rr]elease/\r\n[Rr]eleases/\r\nx64/\r\nx86/\r\nbuild/\r\nbld/\r\n[Bb]in/\r\n[Oo]bj/\r\n\r\n# Visual Studo 2015 cache/options directory\r\n.vs/\r\n\r\n# MSTest test Results\r\n[Tt]est[Rr]esult*/\r\n[Bb]uild[Ll]og.*\r\n\r\n# NUNIT\r\n*.VisualState.xml\r\nTestResult.xml\r\n\r\n# Build Results of an ATL Project\r\n[Dd]ebugPS/\r\n[Rr]eleasePS/\r\ndlldata.c\r\n\r\n*_i.c\r\n*_p.c\r\n*_i.h\r\n*.ilk\r\n*.meta\r\n*.obj\r\n*.pch\r\n*.pdb\r\n*.pgc\r\n*.pgd\r\n*.rsp\r\n*.sbr\r\n*.tlb\r\n*.tli\r\n*.tlh\r\n*.tmp\r\n*.tmp_proj\r\n*.log\r\n*.vspscc\r\n*.vssscc\r\n.builds\r\n*.pidb\r\n*.svclog\r\n*.scc\r\n\r\n# Chutzpah Test files\r\n_Chutzpah*\r\n\r\n# Visual C++ cache files\r\nipch/\r\n*.aps\r\n*.ncb\r\n*.opensdf\r\n*.sdf\r\n*.cachefile\r\n\r\n# Visual Studio profiler\r\n*.psess\r\n*.vsp\r\n*.vspx\r\n\r\n# TFS 2012 Local Workspace\r\n$tf/\r\n\r\n# Guidance Automation Toolkit\r\n*.gpState\r\n\r\n# ReSharper is a .NET coding add-in\r\n_ReSharper*/\r\n*.[Rr]e[Ss]harper\r\n*.DotSettings.user\r\n\r\n# JustCode is a .NET coding addin-in\r\n.JustCode\r\n\r\n# TeamCity is a build add-in\r\n_TeamCity*\r\n\r\n# DotCover is a Code Coverage Tool\r\n*.dotCover\r\n\r\n# NCrunch\r\n_NCrunch_*\r\n.*crunch*.local.xml\r\n\r\n# MightyMoose\r\n*.mm.*\r\nAutoTest.Net/\r\n\r\n# Web workbench (sass)\r\n.sass-cache/\r\n\r\n# Installshield output folder\r\n[Ee]xpress/\r\n\r\n# DocProject is a documentation generator add-in\r\nDocProject/buildhelp/\r\nDocProject/Help/*.HxT\r\nDocProject/Help/*.HxC\r\nDocProject/Help/*.hhc\r\nDocProject/Help/*.hhk\r\nDocProject/Help/*.hhp\r\nDocProject/Help/Html2\r\nDocProject/Help/html\r\n\r\n# Click-Once directory\r\npublish/\r\n\r\n# Publish Web Output\r\n*.[Pp]ublish.xml\r\n*.azurePubxml\r\n# TODO: Comment the next line if you want to checkin your web deploy settings \r\n# but database connection strings (with potential passwords) will be unencrypted\r\n*.pubxml\r\n*.publishproj\r\n\r\n# NuGet Packages\r\n#*.nupkg\r\n# The packages folder can be ignored because of Package Restore\r\n**/packages/*\r\n# except build/, which is used as an MSBuild target.\r\n#!**/packages/build/\r\n# Uncomment if necessary however generally it will be regenerated when needed\r\n#!**/packages/repositories.config\r\n\r\n# Windows Azure Build Output\r\ncsx/\r\n*.build.csdef\r\n\r\n# Windows Store app package directory\r\nAppPackages/\r\n\r\n# Others\r\n*.[Cc]ache\r\nClientBin/\r\n[Ss]tyle[Cc]op.*\r\n~$*\r\n*~\r\n*.dbmdl\r\n*.dbproj.schemaview\r\n*.pfx\r\n*.publishsettings\r\nnode_modules/\r\nbower_components/\r\n\r\n# RIA/Silverlight projects\r\nGenerated_Code/\r\n\r\n# Backup & report files from converting an old project file\r\n# to a newer Visual Studio version. Backup files are not needed,\r\n# because we have git ;-)\r\n_UpgradeReport_Files/\r\nBackup*/\r\nUpgradeLog*.XML\r\nUpgradeLog*.htm\r\n\r\n# SQL Server files\r\n*.mdf\r\n*.ldf\r\n\r\n# Business Intelligence projects\r\n*.rdl.data\r\n*.bim.layout\r\n*.bim_*.settings\r\n\r\n# Microsoft Fakes\r\nFakesAssemblies/\r\n\r\n# Node.js Tools for Visual Studio\r\n.ntvs_analysis.dat\r\n\r\n# Visual Studio 6 build log\r\n*.plg\r\n\r\n# Visual Studio 6 workspace options file\r\n*.opt\r\n\r\n# Visual Studio databases\r\n*.VC.db\r\n*.VC.VC.opendb\r\n*.vs15.VC.db\r\n*.vs15.VC.VC.opendb\r\n\r\n*.lastcodeanalysissucceeded\r\n*.CodeAnalysisLog.xml\r\n*.filters\r\n\r\n# Auto-generated files\r\nBundleArtifacts/\r\n_pkginfo.txt\r\n\r\n# Choco\r\n.chocolatey/*.nupkg\r\n.chocolatey/tools/Release.zip\r\n/artifacts/sideload\r\n/Tools\r\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\r\n\r\n## 2.3.0.0\r\n- Added setting to turn on/off ability to change volume with the scroll wheel anywhere (thanks @Tester798!)\r\n- Added setting to turn on/off ability to change volume with the scroll wheel when hovering over the EarTrumpet icon (thanks @Tester798!)\r\n- Added new community settings area\r\n- Added new community setting to turn on/off use of a logarithmic volume scale (thanks @yonatan-mitmit!)\r\n- Added legacy shortcuts to the context menu pointing to [App volume and device preferences] / [Volume mixer]\r\n- Added ability to use the Windows key in shortcuts (thanks @iamevn!)\r\n- Added linguistic display name sorting for audio devices (thanks @Tester798!)\r\n- Added a workaround for Windows Search (CortanaUI) showing a default asset (X) icon\r\n- Fixed an issue where installation of EarTrumpet via AppInstaller would fail if the Visual C++ libs package was not installed\r\n- Fixed an issue where EarTrumpet tooltips were not updating live while scrolling the mouse wheel on Windows 10 (thanks @krlvm!)\r\n- Forced EarTrumpet to render in software-only mode to keep it off power hungry GPUs.\r\n- Improved the flyout animation (thanks @krlvm!)\r\n\r\n## 2.2.2.0\r\n- Fixed an issue with the volume changing when scrolling in certain scenarios (e.g. virtual reality)\r\n- Updated Japanese translations\r\n- Cleaned up old language resources\r\n\r\n## 2.2.1.0\r\n- Fixed touch context menu behavior on Windows 11 machines with future \"ShyTaskbar\" enabled\r\n- Fixed appearance of flyout on Windows 10 with light mode enabled (thanks @xmha97)\r\n- Fixed flyout animation not respecting correct system settings on Windows 10 and Windows 11\r\n- Upgraded GIF playback library to reduce memory usage (thanks @rocksdanister)\r\n- Reduced use of a workaround for Acrylic slowdowns for most builds of Windows (thanks @krlvm)\r\n- Updated translations from Crowdin contributors\r\n- Updated Microsoft Store Product Detail Page metadata to correct localization issues\r\n\r\n## 2.2.0.0\r\n- Added hotkeys to control volume of multiple devices at once (thanks @Taknok!)\r\n- Adjusted how application data is stored to increase reliability\r\n- Fixed crash that could occur when the flyout Acrylic was toggled on/off in certain scenarios\r\n- Fixed an issue with the expanded flyout becoming too tall on Windows 11\r\n- Updated Japanese, Greek, Croatian, and Russian translations (thank you Crowdin contributors!)\r\n\r\n## 2.1.10.0\r\n- Flyout now remembers if it was expanded/collapsed between launches (thanks @Tester798!)\r\n- Fixed an issue with the flyout open animation behaving erratically with some mice\r\n- Fixed an issue where devices without certain characteristics would interfere with mute and other actions\r\n- Fixed an issue with device names not appearing correctly if they contained underscores\r\n- Fixed an issue with the flyout opening outside the working area in additional cases\r\n- Adjusted the flyout position from the edge of the screen to match Windows 11 look and feel\r\n- Removed solid color plating behind application icons\r\n- Updated Finnish, German, and other translations\r\n\r\n## 2.1.9.0\r\n- Added basic support for Windows 11\r\n- Added/updated Italian, Hungarian, Spanish, Portuguese, Turkish, Chinese, Norwegian, Arabic, Czech, Polish, Swedish, Romanian, and Russian translations\r\n- Fixed an issue with the flyout opening outside the working area\r\n- Fixed an issue with slow window movement when dragging\r\n\r\n## 2.1.8.0\r\n- Added Hungarian, Swedish, Korean, and Tamil translations\r\n- Updated Japanese translations\r\n- Added a fluent icon\r\n- Fixed an issue with missing Czech and Afrikaans translations \r\n- Fixed an issue with icons not appearing for packaged desktop applications (e.g. Microsoft Flight Simulator)\r\n- Fixed an issue with the [Windows Legacy > Sound settings] menu item opening the wrong panel\r\n- Fixed an issue with notification area icon handling\r\n- Fixed an issue that prevented the use of system keys in keyboard shortcuts\r\n\r\n## 2.1.7.0\r\n- Fixed crash when retrieving region info for GDPR compliance on some machines\r\n\r\n## 2.1.6.0\r\n- Added ability to turn on/off crash reporting\r\n- Added missing translations\r\n- Added privacy policy link\r\n- Fixed an icon display issue with libmpv-based apps (e.g. Plex)\r\n- Fixed an issue that made volume sliders difficult to manipulate with a mouse at high DPI\r\n- Restored pre-2.1.2.0 tray icon behavior until we can address icon duplication issues\r\n\r\n## 2.1.5.0\r\n- Fixed an issue with line in icon not appearing\r\n- Fixed an issue with context menu submenus disappearing unexpectedly\r\n\r\n## 2.1.4.0\r\n- Fixed various bugs with the search textbox in Settings\r\n- Fixed tray icon disappearing when the Windows Shell crashes/restarts\r\n- Fixed master volume slider dimming on mute\r\n- Fixed flyout track color in light theme\r\n- Fixed mute icon when at zero volume\r\n- Added mixer window width constraints when a high number of audio devices are present\r\n- Added Slovenian language support\r\n- Added hover states to buttons\r\n- Additional crash bugfixes\r\n\r\n## 2.1.3.0\r\n- Fixed a crash causing EarTrumpet disappear on startup\r\n- Fixed various potential leaks\r\n- Added a help dialog to assist when EarTrumpet can't start due to broken fonts\r\n\r\n## 2.1.2.0\r\n- Fixed icon handle leak that caused a crash\r\n- Fixed hotkeys not being properly unregistered\r\n- Fixed arrow keys changing the default device volume\r\n- Fixed High Contrast theme colors\r\n- Fixed settings window covering the Taskbar when maximized\r\n- Tray icon should remain in place after updates going forward\r\n- Tray and app icons will now scale correctly\r\n- Tray icon supports scrolling without opening the flyout\r\n- Removed unwanted metadata from telemetry\r\n\r\n## 2.1.1.0\r\n- Fixed a crash when parsing numbers on non-English systems\r\n\r\n## 2.1.0.0\r\n- Added new settings experience\r\n- Added support for Windows light mode\r\n- Added keyboard shortcuts for opening the mixer and settings windows\r\n- Reduced clutter in the context menu\r\n- Fixed various display issues when using RTL writing systems\r\n- Changed app naming behavior to align with Windows\r\n- Added mute text to the notification area icon\r\n- Added 'Open sound settings' link to context menu\r\n- Added text to notification area icon tooltip to indicate mute state\r\n- Re-added flyout window shadow and borders\r\n- Added additional telemetry points\r\n- Removed Arabic, Hungarian, Korean, Norwegian Bokm�l, Portuguese, Romanian, and Turkish until we complete localization\r\n- Additional bugfixes\r\n\r\n## 2.0.8.0\r\n- Changed grouping behavior to key off app install path vs. executable name\r\n- Disabled flyout window blur when not visible to ensure it doesn't appear in task switcher\r\n- Fixed an issue where the Enhancements tab was missing in playback devices dialog\r\n- Fixed an issue where the flyout was too tall when the taskbar is configured to auto-hide\r\n- Fixed an issue where disabled or unplugged devices would unexpectedly appear\r\n- Fixed a crash when no default audio endpoint was present\r\n- Fixed a crash when right-clicking an audio session after moving it\r\n\r\n## 2.0.7.0\r\n- Added additional support for high contrast themes\r\n- Added per-monitor DPI support\r\n- Added internal diagnostic logging buffer limit\r\n- Disabled Alt+Space on the flyout window\r\n- Fixed a rendering issue when the DPI was greater than 100% and there were more devices than would fit in the flyout without a scrollbar\r\n- Fixed a rendering issue where the Notification Area icon becomes blurry at DPIs geater than 100%\r\n- Fixed the icon and name of recording devices in 'Listen' mode\r\n- Fixed Notification Area icon scaling\r\n- Fixed overflow flyout at greater than 100% DPI\r\n\r\n## 2.0.6.0\r\n- Fixed an issue that affected localization on non-English systems\r\n\r\n## 2.0.5.0\r\n- Fixed System Sounds icon on ARM64\r\n- High Contrast colors updated\r\n- Added collection of debug information when device enumeration fails\r\n\r\n## 2.0.4.0\r\n- Scoped the mouse wheel scrolling to only over the Notification Area icon.\r\n- Added support for RS3.\r\n- Fixed a bug that caused the flyout to show 'It doesn't look like you have any playback devices.' when removing the default device.\r\n- Fixed a crash during adding/removing devices.\r\n- Removed non-fatal errors from telemetry.\r\n\r\n## 2.0.3.0\r\n- Fixed an issue with certain apps (e.g. Sea of Thieves) not appearing correctly\r\n- Added additional languages (Arabic, Spanish, Hungarian, Korean, Turkish, and Ukrainian)\r\n\r\n## 2.0.2.0\r\n- Changes to telemetry \r\n\r\n## 2.0.1.0\r\n- Fixed a crash when a device is quickly added/removed\r\n- Fixed a crash with multi-process audio sessions\r\n- Fixed a crash launching web links\r\n- Fixed a crash when closing EarTrumpet windows\r\n- Fixed a crash when expanding/collapsing the main window\r\n- Fixed a crash when Taskbar auto-hide is in use\r\n- Fixed a crash when the registry has invalid personalization data\r\n- Fixed a crash when calling application data storage APIs\r\n\r\n## 2.0.0.0\r\n- Added middle click on notification area icon to mute\r\n- Added ability to use mouse wheel to change device volume when window is open\r\n- Added multi-channel peak metering\r\n- Added ability to move apps between devices\r\n- Added ability to view multiple devices\r\n- Added volume mixer window\r\n- Enhanced app session grouping\r\n- Enhanced keyboarding\r\n- Added keyboard shortcut to open flyout\r\n- Added support for Windows light/dark mode\r\n- Added Sounds, Recording, etc. links to context menu\r\n- Enhanced animations and detail work\r\n- Additional fixes for RTL, Accessibility, and apps without icons\r\n\r\n## 1.5.3.0\r\n- Improved slider performance\r\n- Fixed Acrylic Blur compatibility for Windows 10 1803\r\n\r\n## 1.5.2.0\r\n\r\n## 1.5.1.0\r\n\r\n## 1.5.0.0\r\n\r\n## 1.4.4.0\r\n\r\n## 1.4.3.0\r\n\r\n## 1.4.2.0\r\n\r\n## 1.4.1.0\r\n\r\n## 1.4.0.0\r\n\r\n## 1.3.2.0\r\n- Fixed changing audio devices in Windows 10 (RS1)\r\n\r\n## 1.3.1.0\r\n- Fixed DWM scaling issue where window appeared in the wrong position\r\n- Fixed UI issues when no audio devices found\r\n- Fixed changing audio devices in Windows 10 (TH1) and Windows 10 November Update (TH2)\r\n- Fixed multiple sessions not appearing for some applications\r\n- Added company metadata for Task Manager\r\n\r\n## 1.3.0.0\r\n- Fixed Speech Runtime display\r\n- Fixed positioning when Taskbar auto-hide is enabled\r\n- Installer/uninstaller now checks if the app is running\r\n- Added ability to change default audio device (right-click the tray icon)\r\n- Added ability to mute apps/audio device\r\n- Added default audio device master volume slider\r\n\r\n## 1.2.0.0\r\n- Fixed issue with a number of apps not appearing in Ear Trumpet when using background audio services (e.g. iHeartRadio)\r\n- Fixed issue with a number of apps not appearing in Ear Trumpet when playing protected media (e.g. Netflix)\r\n- Fixed issue with apps not showing due to unexpected logo/icon paths (e.g. Skype Translator)\r\n- Added base localization to Ear Trumpet (defaults to English for now - feel free to provide translations as pull requests)\r\n\r\n## 1.1.1.0\r\n\r\n## 1.1.0.0\r\n- Fixed DPI scaling issue\r\n- Fixed Ear Trumpet not displaying correctly when the Taskbar was in a different location or not on the primary monitor\r\n- Initial fix for modern app missing extracted logo\r\n- Ear Trumpet will now only allow one open instance\r\n- GitHub readme updated with details and minimum versions\r\n- Installer no longer allows installs on Windows versions before Windows 10\r\n- Fixed issue with Windows 10 tablet mode\r\n- Fixed Ear Trumpet window not having the correct border and drop shadow \r\n\r\n## 1.0.0.0\r\n- Initial release\r\n"
  },
  {
    "path": "COMPILING.md",
    "content": "# Compiling EarTrumpet\r\n\r\n## Requirements\r\n* [Visual Studio 2017](https://visualstudio.microsoft.com/vs/community/) (or newer)\r\n* [Git for Windows](https://git-scm.com/download/win)\r\n* [Windows 10 Anniversary Update](https://blogs.windows.com/windowsexperience/2016/08/02/how-to-get-the-windows-10-anniversary-update/#GD97Eq04wJA7S4P7.97) (or newer)\r\n* [.NET Framework 4.6.2 Developer Pack](https://www.microsoft.com/net/download/thank-you/net462-developer-pack)\r\n* [Windows 10 SDK (10.0.14393.0)](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive)\r\n\r\n## Step-by-step\r\n1. Install Visual Studio 2017 with the `.NET desktop development` and `Universal Windows Platform development` workloads. \r\n2. Install the `Windows 10 SDK (10.0.14393.0)` SDK.\r\n3. Install the .NET Framework 4.6.2 Developer Pack.\r\n4. Install Git for Windows.\r\n5. Clone the EarTrumpet repository (`git clone https://github.com/File-New-Project/EarTrumpet.git`).\r\n6. Open `EarTrumpet.vs15.sln` in Visual Studio.\r\n7. Change the target platform to `x86` and build the `EarTrumpet.Package` project.\r\n8. You're done. If you plan on submitting your changes to us, please review the [Contributing guide](https://github.com/File-New-Project/EarTrumpet/blob/master/CONTRIBUTING.md) first.\r\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to EarTrumpet\r\nThanks for your interest in contributing to EarTrumpet!\r\n\r\nYou can contribute to EarTrumpet with issues and pull requests (PRs). Simply filing issues for problems you encounter is a great way to contribute. Contributing code via the below workflow is greatly appreciated.\r\n\r\n## Copyright\r\n\r\nEarTrumpet copyright is held by \"Rafael Rivera, David Golden, David \"Dave\" Amenta, and Contributors\".\r\n\r\n## Contribution Workflow\r\n\r\nBefore contributing code, we require the following workflow:\r\n\r\n1. Create an issue for your work or reuse an existing issue on the topic, if there is one.\r\n\r\n2. Get agreement from the team that your proposed change is OK. (You can alternatively email the `team@eartrumpet.app`.)\r\n\r\n3. Clearly state that you are going to take on the bug/enhancement work and we will assign the task to you.\r\n\r\n4. Create a fork of the repository on GitHub (if you don't already have one).\r\n\r\n5. Create a branch from **dev** (`git checkout -b mybranch dev`).\r\n\r\n6. Name the branch so that it clearly communicates your intentions, such as issue-123 or feature-456.\r\n\r\n7. Build the repository with your changes. Make sure that the builds are clean in all configurations (i.e. `Debug`, `Release`, and `VSDebug`).\r\n\r\n8. Commit and push your changes to your fork.\r\n\r\n9. Create a pull request (PR) against our **dev** branch.\r\n\r\n    ℹ It is OK for your PR to include a large number of commits. We will squash them on merge.\r\n\r\n    ℹ It is also OK to create your PR as \"[WIP]\" before the implementation is done. This can be useful if you'd like to start the feedback process while you finish your implementation. State that this is the case in the initial PR comment."
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/AddonResources.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                    xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n                    xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n                    xmlns:conv=\"clr-namespace:EarTrumpet.UI.Converters\"\r\n                    xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n                    xmlns:etctl=\"clr-namespace:EarTrumpet.Actions.Controls\"\r\n                    xmlns:etvm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n                    xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n                    xmlns:ui=\"clr-namespace:EarTrumpet.UI\"\r\n                    xmlns:vm=\"clr-namespace:EarTrumpet.Actions.ViewModel\">\r\n    <Style x:Key=\"RunStyle\" TargetType=\"Run\">\r\n        <Setter Property=\"FontSize\" Value=\"15\" />\r\n        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n    </Style>\r\n    <Style x:Key=\"ThinListStyle\"\r\n           BasedOn=\"{StaticResource {x:Type ListView}}\"\r\n           TargetType=\"{x:Type ListView}\">\r\n        <Setter Property=\"Margin\" Value=\"0,0,24,0\" />\r\n    </Style>\r\n    <Style x:Key=\"HyperlinkStyle\"\r\n           BasedOn=\"{StaticResource {x:Type Hyperlink}}\"\r\n           TargetType=\"{x:Type Hyperlink}\">\r\n        <Setter Property=\"TextDecorations\">\r\n            <Setter.Value>\r\n                <TextDecorationCollection>\r\n                    <TextDecoration Location=\"Underline\" PenOffset=\"3\" />\r\n                </TextDecorationCollection>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n    <DataTemplate DataType=\"{x:Type vm:EarTrumpetActionPageHeaderViewModel}\">\r\n        <Border BorderBrush=\"Transparent\" BorderThickness=\"0\">\r\n            <Grid Height=\"64\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"*\" />\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                </Grid.ColumnDefinitions>\r\n                <TextBox Name=\"txtHeader\"\r\n                         MinWidth=\"200\"\r\n                         Margin=\"12,0,6,0\"\r\n                         HorizontalAlignment=\"Left\"\r\n                         VerticalAlignment=\"Bottom\"\r\n                         HorizontalContentAlignment=\"Left\"\r\n                         FontSize=\"26\"\r\n                         Text=\"{Binding DisplayName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\">\r\n                    <TextBox.Style>\r\n                        <Style BasedOn=\"{StaticResource {x:Type TextBox}}\" TargetType=\"TextBox\">\r\n                            <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Transparent\" />\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding IsEditClicked}\" Value=\"True\">\r\n                                    <Setter Property=\"FocusManager.FocusedElement\" Value=\"{Binding ElementName=txtHeader}\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </TextBox.Style>\r\n                </TextBox>\r\n                <ItemsControl Name=\"Toolbar\"\r\n                              Grid.Column=\"1\"\r\n                              Margin=\"0,0,24,0\"\r\n                              VerticalAlignment=\"Bottom\"\r\n                              IsTabStop=\"False\"\r\n                              ItemsSource=\"{Binding Toolbar}\">\r\n                    <ItemsControl.ItemsPanel>\r\n                        <ItemsPanelTemplate>\r\n                            <StackPanel Orientation=\"Horizontal\" />\r\n                        </ItemsPanelTemplate>\r\n                    </ItemsControl.ItemsPanel>\r\n                    <ItemsControl.ItemTemplate>\r\n                        <DataTemplate DataType=\"{x:Type etvm:ToolbarItemViewModel}\">\r\n                            <Button VerticalAlignment=\"Center\"\r\n                                    HorizontalContentAlignment=\"Stretch\"\r\n                                    AutomationProperties.Name=\"{Binding DisplayName}\"\r\n                                    BorderThickness=\"0\"\r\n                                    Command=\"{Binding Command}\"\r\n                                    ToolTipService.ToolTip=\"{Binding DisplayName}\">\r\n                                <Button.Style>\r\n                                    <Style BasedOn=\"{StaticResource ToolbarButtonStyle}\" TargetType=\"Button\">\r\n                                        <Style.Triggers>\r\n                                            <MultiDataTrigger>\r\n                                                <MultiDataTrigger.Conditions>\r\n                                                    <Condition Binding=\"{Binding Id}\" Value=\"Save\" />\r\n                                                    <Condition Binding=\"{Binding ElementName=Toolbar, Path=DataContext.IsWorkSaved}\" Value=\"True\" />\r\n                                                </MultiDataTrigger.Conditions>\r\n                                                <MultiDataTrigger.Setters>\r\n                                                    <Setter Property=\"IsEnabled\" Value=\"False\" />\r\n                                                </MultiDataTrigger.Setters>\r\n                                            </MultiDataTrigger>\r\n                                        </Style.Triggers>\r\n                                    </Style>\r\n                                </Button.Style>\r\n                                <TextBlock FontSize=\"{Binding GlyphFontSize}\" Text=\"{Binding Glyph}\">\r\n                                    <TextBlock.Style>\r\n                                        <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                                            <Style.Triggers>\r\n                                                <MultiDataTrigger>\r\n                                                    <MultiDataTrigger.Conditions>\r\n                                                        <Condition Binding=\"{Binding Id}\" Value=\"Save\" />\r\n                                                        <Condition Binding=\"{Binding ElementName=Toolbar, Path=DataContext.IsWorkSaved}\" Value=\"False\" />\r\n                                                    </MultiDataTrigger.Conditions>\r\n                                                    <MultiDataTrigger.Setters>\r\n                                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"SystemAccent\" />\r\n                                                    </MultiDataTrigger.Setters>\r\n                                                </MultiDataTrigger>\r\n                                            </Style.Triggers>\r\n                                        </Style>\r\n                                    </TextBlock.Style>\r\n                                </TextBlock>\r\n                            </Button>\r\n                        </DataTemplate>\r\n                    </ItemsControl.ItemTemplate>\r\n                </ItemsControl>\r\n            </Grid>\r\n\r\n        </Border>\r\n    </DataTemplate>\r\n    <DataTemplate x:Key=\"PartListItemTemplate\" DataType=\"vm:PartViewModel\">\r\n        <Grid Margin=\"0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"*\" />\r\n                <ColumnDefinition Width=\"Auto\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Border Margin=\"0\"\r\n                    VerticalAlignment=\"Center\"\r\n                    ClipToBounds=\"True\">\r\n                <!--  The negative bottom margin below achieves vertical alignment along with LineStackingStrategy=MaxHeight and ClipTobounds on the parent  -->\r\n                <etctl:LinkedTextBlock Margin=\"0,0,0,-8\"\r\n                                       Padding=\"12,14\"\r\n                                       HorizontalAlignment=\"Left\"\r\n                                       VerticalAlignment=\"Center\"\r\n                                       DataItem=\"{Binding}\"\r\n                                       FormatText=\"{Binding LinkText}\"\r\n                                       HyperlinkStyle=\"{DynamicResource HyperlinkStyle}\"\r\n                                       LineHeight=\"30\"\r\n                                       LineStackingStrategy=\"MaxHeight\"\r\n                                       RunStyle=\"{DynamicResource RunStyle}\"\r\n                                       TextWrapping=\"Wrap\">\r\n                    <etctl:LinkedTextBlock.ContextMenu2>\r\n                        <ContextMenu Theme:Options.Source=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Theme:Options.Source)}\"\r\n                                     ItemContainerTemplateSelector=\"{StaticResource MenuSelector}\"\r\n                                     Placement=\"Mouse\"\r\n                                     UsesItemContainerTemplate=\"True\" />\r\n                    </etctl:LinkedTextBlock.ContextMenu2>\r\n                    <etctl:LinkedTextBlock.Popup>\r\n                        <Popup Width=\"260\"\r\n                               Theme:Options.Source=\"App\"\r\n                               AllowsTransparency=\"False\"\r\n                               FocusVisualStyle=\"{x:Null}\"\r\n                               Focusable=\"False\"\r\n                               Placement=\"Mouse\"\r\n                               PopupAnimation=\"None\"\r\n                               StaysOpen=\"False\"\r\n                               TextOptions.TextFormattingMode=\"Display\"\r\n                               UseLayoutRounding=\"True\">\r\n                            <Popup.Style>\r\n                                <Style TargetType=\"Popup\">\r\n                                    <Style.Triggers>\r\n                                        <Trigger Property=\"IsOpen\" Value=\"False\">\r\n                                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                        </Trigger>\r\n                                    </Style.Triggers>\r\n                                </Style>\r\n                            </Popup.Style>\r\n\r\n                            <Border x:Name=\"SubmenuBorder\"\r\n                                    Theme:Brush.Background=\"Theme={Theme}ChromeMediumLow, HighContrast=Menu\"\r\n                                    Theme:Brush.BorderBrush=\"Light=LightChromeHigh, Dark=ControlDarkAppButtonTextDisabled/0.9, HighContrast=ControlText\"\r\n                                    BorderThickness=\"1\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentControl Theme:Brush.Foreground=\"Theme=Text\" Content=\"{Binding}\" />\r\n                            </Border>\r\n                        </Popup>\r\n                    </etctl:LinkedTextBlock.Popup>\r\n                </etctl:LinkedTextBlock>\r\n            </Border>\r\n            <Button Grid.Column=\"1\"\r\n                    HorizontalAlignment=\"Right\"\r\n                    VerticalAlignment=\"Center\"\r\n                    AutomationProperties.Name=\"{x:Static resx:Resources.RemoveButtonAccessibleName}\"\r\n                    Command=\"{Binding Remove}\"\r\n                    CommandParameter=\"{Binding}\"\r\n                    Style=\"{StaticResource ToolbarButtonStyle}\">\r\n                <TextBlock FontSize=\"14\"\r\n                           Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                           Text=\"&#xE107;\" />\r\n            </Button>\r\n            <TextBlock Margin=\"12,-10,0,0\"\r\n                       VerticalAlignment=\"Top\"\r\n                       Theme:Brush.Foreground=\"GrayText\"\r\n                       FontSize=\"14\"\r\n                       IsHitTestVisible=\"False\"\r\n                       Text=\"{Binding AdditionalText}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:ImportExportPageViewModel}\">\r\n        <StackPanel Orientation=\"Vertical\">\r\n            <TextBlock Style=\"{DynamicResource HeadingText}\" Text=\"{x:Static resx:Resources.ExportHeaderText}\" />\r\n            <TextBlock Style=\"{DynamicResource BodyText}\" Text=\"{x:Static resx:Resources.ExportHelpText}\" />\r\n            <Button HorizontalAlignment=\"Left\"\r\n                    Command=\"{Binding Export}\"\r\n                    Content=\"{x:Static resx:Resources.ExportHeaderText}\" />\r\n            <TextBlock Style=\"{DynamicResource HeadingText}\" Text=\"{x:Static resx:Resources.ImportHeaderText}\" />\r\n            <TextBlock Style=\"{DynamicResource BodyText}\" Text=\"{x:Static resx:Resources.ImportHelpText}\" />\r\n            <Button HorizontalAlignment=\"Left\"\r\n                    Command=\"{Binding Import}\"\r\n                    Content=\"{x:Static resx:Resources.ImportHeaderText}\" />\r\n        </StackPanel>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:EarTrumpetActionViewModel}\">\r\n        <Grid>\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n\r\n            <TextBlock Grid.Row=\"1\"\r\n                       Style=\"{DynamicResource HeadingText}\"\r\n                       Text=\"{x:Static resx:Resources.TriggerVerbText}\" />\r\n            <ListView Grid.Row=\"2\"\r\n                      IsSynchronizedWithCurrentItem=\"True\"\r\n                      ItemTemplate=\"{DynamicResource PartListItemTemplate}\"\r\n                      ItemsSource=\"{Binding Triggers}\"\r\n                      Style=\"{DynamicResource ThinListStyle}\" />\r\n            <etctl:MenuButton Grid.Row=\"3\"\r\n                              HorizontalAlignment=\"Stretch\"\r\n                              Content=\"{x:Static resx:Resources.AddTriggerText}\"\r\n                              PreviewMouseRightButtonUp=\"{Event:HandledBinding}\"\r\n                              Style=\"{DynamicResource AddButtonStyle}\">\r\n                <etctl:MenuButton.ContextMenu>\r\n                    <ContextMenu Theme:Options.Source=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Theme:Options.Source)}\"\r\n                                 ItemContainerTemplateSelector=\"{DynamicResource MenuSelector}\"\r\n                                 ItemsSource=\"{Binding NewTriggers}\"\r\n                                 UsesItemContainerTemplate=\"True\" />\r\n                </etctl:MenuButton.ContextMenu>\r\n            </etctl:MenuButton>\r\n\r\n            <TextBlock Grid.Row=\"4\"\r\n                       Style=\"{DynamicResource HeadingText}\"\r\n                       Text=\"{x:Static resx:Resources.ActionVerbText}\" />\r\n            <ListView Grid.Row=\"5\"\r\n                      IsSynchronizedWithCurrentItem=\"True\"\r\n                      ItemTemplate=\"{DynamicResource PartListItemTemplate}\"\r\n                      ItemsSource=\"{Binding Actions}\"\r\n                      Style=\"{DynamicResource ThinListStyle}\" />\r\n            <etctl:MenuButton Grid.Row=\"6\"\r\n                              HorizontalAlignment=\"Stretch\"\r\n                              Content=\"{x:Static resx:Resources.AddActionText}\"\r\n                              PreviewMouseRightButtonUp=\"{Event:HandledBinding}\"\r\n                              Style=\"{DynamicResource AddButtonStyle}\">\r\n                <etctl:MenuButton.ContextMenu>\r\n                    <ContextMenu Theme:Options.Source=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Theme:Options.Source)}\"\r\n                                 ItemContainerTemplateSelector=\"{DynamicResource MenuSelector}\"\r\n                                 ItemsSource=\"{Binding NewActions}\"\r\n                                 UsesItemContainerTemplate=\"True\" />\r\n                </etctl:MenuButton.ContextMenu>\r\n            </etctl:MenuButton>\r\n\r\n            <Grid Grid.Row=\"7\">\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                </Grid.RowDefinitions>\r\n\r\n                <TextBlock Style=\"{DynamicResource HeadingText}\" Text=\"{x:Static resx:Resources.ConditionVerbText}\" />\r\n                <TextBlock Grid.Row=\"1\"\r\n                           Style=\"{DynamicResource BodyText}\"\r\n                           Text=\"{x:Static resx:Resources.ConditionsHelpText}\" />\r\n\r\n                <ListView Grid.Row=\"2\"\r\n                          IsSynchronizedWithCurrentItem=\"True\"\r\n                          ItemTemplate=\"{DynamicResource PartListItemTemplate}\"\r\n                          ItemsSource=\"{Binding Conditions}\"\r\n                          Style=\"{DynamicResource ThinListStyle}\" />\r\n\r\n                <etctl:MenuButton Grid.Row=\"3\"\r\n                                  HorizontalAlignment=\"Stretch\"\r\n                                  Content=\"{x:Static resx:Resources.AddConditionText}\"\r\n                                  PreviewMouseRightButtonUp=\"{Event:HandledBinding}\"\r\n                                  Style=\"{DynamicResource AddButtonStyle}\">\r\n                    <etctl:MenuButton.ContextMenu>\r\n                        <ContextMenu Theme:Options.Source=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Theme:Options.Source)}\"\r\n                                     ItemContainerTemplateSelector=\"{DynamicResource MenuSelector}\"\r\n                                     ItemsSource=\"{Binding NewConditions}\"\r\n                                     UsesItemContainerTemplate=\"True\" />\r\n                    </etctl:MenuButton.ContextMenu>\r\n                </etctl:MenuButton>\r\n\r\n                <TextBlock Grid.Row=\"4\"\r\n                           Style=\"{DynamicResource HeadingText}\"\r\n                           Text=\"{x:Static resx:Resources.RemoveActionHeadingText}\" />\r\n                <TextBlock Grid.Row=\"5\"\r\n                           Style=\"{DynamicResource BodyText}\"\r\n                           Text=\"{x:Static resx:Resources.RemoveActionDescriptionText}\" />\r\n                <Button Grid.Row=\"6\"\r\n                        Command=\"{Binding Delete}\"\r\n                        Content=\"{x:Static resx:Resources.RemoveActionButtonText}\" />\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:VolumeViewModel}\">\r\n\r\n        <Grid>\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"*\" />\r\n                <ColumnDefinition Width=\"{DynamicResource Mutable_VolumeCellWidth}\" />\r\n            </Grid.ColumnDefinitions>\r\n            <ctl:VolumeSlider Margin=\"12\"\r\n                              Maximum=\"100\"\r\n                              Minimum=\"0\"\r\n                              Style=\"{DynamicResource {x:Type Slider}}\"\r\n                              Value=\"{Binding Volume, Mode=TwoWay}\" />\r\n            <TextBlock Grid.Column=\"1\"\r\n                       Style=\"{StaticResource AppVolumeTextStyle}\"\r\n                       Text=\"{Binding Volume, Mode=OneWay}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:HotkeyViewModel}\">\r\n        <ContentControl Content=\"{Binding Hotkey}\" IsTabStop=\"False\" />\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:TextViewModel}\">\r\n        <Grid Margin=\"12\">\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n            <TextBlock Text=\"{Binding PromptText}\" />\r\n            <TextBox Grid.Row=\"1\" Text=\"{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate DataType=\"{x:Type vm:DefaultPlaybackDeviceViewModel}\">\r\n        <Grid Margin=\"6\">\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Border Grid.RowSpan=\"2\"\r\n                    Width=\"32\"\r\n                    Height=\"32\"\r\n                    Margin=\"12,0\"\r\n                    HorizontalAlignment=\"Center\"\r\n                    VerticalAlignment=\"Center\">\r\n                <TextBlock FontSize=\"20\"\r\n                           Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                           Text=\"&#xEC61;\" />\r\n            </Border>\r\n            <TextBlock Grid.Column=\"1\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Text=\"{Binding DisplayName}\" />\r\n            <TextBlock Grid.Row=\"2\"\r\n                       Grid.Column=\"1\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Opacity=\"0.5\"\r\n                       Text=\"{Binding InterfaceName}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:DeviceViewModel}\">\r\n        <Grid Margin=\"6\">\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <ctl:ImageEx Grid.RowSpan=\"3\"\r\n                         Width=\"32\"\r\n                         Height=\"32\"\r\n                         Margin=\"12,0\"\r\n                         HorizontalAlignment=\"Center\"\r\n                         VerticalAlignment=\"Center\"\r\n                         SourceEx=\"{Binding}\" />\r\n\r\n            <TextBlock Grid.Column=\"1\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Text=\"{Binding DeviceDescription}\" />\r\n            <TextBlock Grid.Row=\"2\"\r\n                       Grid.Column=\"1\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Opacity=\"0.5\"\r\n                       Text=\"{Binding InterfaceName}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:DeviceListViewModel}\">\r\n        <Grid>\r\n            <Grid.Resources>\r\n                <CollectionViewSource x:Key=\"cvs\"\r\n                                      IsLiveGroupingRequested=\"True\"\r\n                                      Source=\"{Binding All}\">\r\n                    <CollectionViewSource.GroupDescriptions>\r\n                        <PropertyGroupDescription PropertyName=\"GroupName\" />\r\n                    </CollectionViewSource.GroupDescriptions>\r\n                </CollectionViewSource>\r\n            </Grid.Resources>\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n            <TextBlock Margin=\"12\"\r\n                       Style=\"{StaticResource HeadingText}\"\r\n                       Text=\"{x:Static resx:Resources.ChooseADeviceTitle}\" />\r\n\r\n            <ctl:ListView Grid.Row=\"1\"\r\n                          MaxHeight=\"300\"\r\n                          ItemContainerStyle=\"{DynamicResource HoverListItemStyle}\"\r\n                          ItemInvoked=\"{Event:Binding OnInvoked}\"\r\n                          ItemsSource=\"{Binding Source={StaticResource cvs}}\">\r\n                <ListView.Style>\r\n                    <Style BasedOn=\"{StaticResource {x:Type ListView}}\" TargetType=\"ListView\">\r\n                        <Setter Property=\"Template\">\r\n                            <Setter.Value>\r\n                                <ControlTemplate TargetType=\"ListView\">\r\n                                    <Border Background=\"{TemplateBinding Background}\">\r\n                                        <ScrollViewer Padding=\"{TemplateBinding Padding}\" Focusable=\"false\">\r\n                                            <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                                        </ScrollViewer>\r\n                                    </Border>\r\n                                </ControlTemplate>\r\n                            </Setter.Value>\r\n                        </Setter>\r\n                    </Style>\r\n                </ListView.Style>\r\n                <ListView.GroupStyle>\r\n                    <GroupStyle>\r\n                        <GroupStyle.HeaderTemplate>\r\n                            <DataTemplate>\r\n                                <TextBlock Margin=\"16,12,0,6\"\r\n                                           Theme:Brush.Foreground=\"GrayText\"\r\n                                           FontSize=\"15\"\r\n                                           Text=\"{Binding Name}\">\r\n                                    <TextBlock.Style>\r\n                                        <Style TargetType=\"TextBlock\">\r\n                                            <Style.Triggers>\r\n                                                <DataTrigger Binding=\"{Binding Name}\" Value=\"{x:Null}\">\r\n                                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                                </DataTrigger>\r\n                                            </Style.Triggers>\r\n                                        </Style>\r\n                                    </TextBlock.Style>\r\n                                </TextBlock>\r\n                            </DataTemplate>\r\n                        </GroupStyle.HeaderTemplate>\r\n                    </GroupStyle>\r\n                </ListView.GroupStyle>\r\n            </ctl:ListView>\r\n        </Grid>\r\n\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:ForegroundAppViewModel}\">\r\n        <Grid Margin=\"6\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                  Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                  HorizontalAlignment=\"Center\"\r\n                  VerticalAlignment=\"Center\">\r\n                <TextBlock Theme:Brush.Foreground=\"SystemAccentLight2\"\r\n                           FontSize=\"18\"\r\n                           Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                           Text=\"&#xF5EE;\" />\r\n                <TextBlock FontSize=\"18\"\r\n                           Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                           Text=\"&#xF5ED;\" />\r\n            </Grid>\r\n            <TextBlock Grid.Column=\"1\"\r\n                       Margin=\"12,2\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Text=\"{x:Static resx:Resources.ForegroundAppText}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:EveryAppViewModel}\">\r\n        <Grid Margin=\"6\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n            <Border Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    HorizontalAlignment=\"Center\"\r\n                    VerticalAlignment=\"Center\">\r\n                <TextBlock FontSize=\"18\"\r\n                           Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                           Text=\"&#xE71D;\" />\r\n            </Border>\r\n\r\n            <TextBlock Grid.Column=\"1\"\r\n                       Margin=\"12,2\"\r\n                       HorizontalAlignment=\"Left\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Text=\"{x:Static resx:Resources.EveryAppText}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n    <DataTemplate DataType=\"{x:Type vm:AppListViewModel}\">\r\n        <Grid>\r\n            <Grid.RowDefinitions>\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n                <RowDefinition Height=\"Auto\" />\r\n            </Grid.RowDefinitions>\r\n            <TextBlock Margin=\"12\"\r\n                       Style=\"{StaticResource HeadingText}\"\r\n                       Text=\"{x:Static resx:Resources.ChooseAnAppTitle}\" />\r\n            <ctl:ListView Grid.Row=\"1\"\r\n                          MaxHeight=\"300\"\r\n                          ItemContainerStyle=\"{DynamicResource HoverListItemStyle}\"\r\n                          ItemInvoked=\"{Event:Binding OnInvoked}\"\r\n                          ItemsSource=\"{Binding All}\">\r\n                <ListView.Style>\r\n                    <Style BasedOn=\"{StaticResource {x:Type ListView}}\" TargetType=\"ListView\">\r\n                        <Setter Property=\"Template\">\r\n                            <Setter.Value>\r\n                                <ControlTemplate TargetType=\"ListView\">\r\n                                    <Border Background=\"{TemplateBinding Background}\">\r\n                                        <ScrollViewer Padding=\"{TemplateBinding Padding}\" Focusable=\"false\">\r\n                                            <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                                        </ScrollViewer>\r\n                                    </Border>\r\n                                </ControlTemplate>\r\n                            </Setter.Value>\r\n                        </Setter>\r\n                    </Style>\r\n                </ListView.Style>\r\n            </ctl:ListView>\r\n            <TextBlock Grid.Row=\"2\"\r\n                       Margin=\"12\"\r\n                       Style=\"{StaticResource BodyText}\"\r\n                       Text=\"{x:Static resx:Resources.ChooseAnAppHelpText}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n</ResourceDictionary>"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/Controls/LinkedTextBlock.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.ViewModel;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.Actions.Controls\r\n{\r\n    public class LinkedTextBlock : TextBlock\r\n    {\r\n        public Popup Popup\r\n        {\r\n            get { return (Popup)this.GetValue(PopupProperty); }\r\n            set { this.SetValue(PopupProperty, value); }\r\n        }\r\n        public static readonly DependencyProperty PopupProperty = DependencyProperty.Register(\r\n          \"Popup\", typeof(Popup), typeof(LinkedTextBlock), new PropertyMetadata(null));\r\n\r\n        // We avoid ContextMenu because something external connects it to right-click behavior that (seemingly) can't be prevented.\r\n        public ContextMenu ContextMenu2\r\n        {\r\n            get { return (ContextMenu)this.GetValue(ContextMenuProperty2); }\r\n            set { this.SetValue(ContextMenuProperty2, value); }\r\n        }\r\n        public static readonly DependencyProperty ContextMenuProperty2 = DependencyProperty.Register(\r\n          \"ContextMenu2\", typeof(ContextMenu), typeof(LinkedTextBlock), new PropertyMetadata(null));\r\n\r\n        public object DataItem\r\n        {\r\n            get { return (object)this.GetValue(DataItemProperty); }\r\n            set { this.SetValue(DataItemProperty, value); }\r\n        }\r\n        public static readonly DependencyProperty DataItemProperty = DependencyProperty.Register(\r\n          \"DataItem\", typeof(object), typeof(LinkedTextBlock), new PropertyMetadata(null, new PropertyChangedCallback(DataItemChanged)));\r\n\r\n        private static void DataItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((LinkedTextBlock)d).DataItemChanged();\r\n\r\n        public string FormatText\r\n        {\r\n            get { return (string)this.GetValue(FormatTextProperty); }\r\n            set { this.SetValue(FormatTextProperty, value); }\r\n        }\r\n        public static readonly DependencyProperty FormatTextProperty = DependencyProperty.Register(\r\n          \"FormatText\", typeof(string), typeof(LinkedTextBlock), new PropertyMetadata(\"\", new PropertyChangedCallback(FormatTextChanged)));\r\n\r\n        private static void FormatTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((LinkedTextBlock)d).PropertiesChanged();\r\n\r\n        public Style HyperlinkStyle\r\n        {\r\n            get { return (Style)this.GetValue(HyperlinkStyleProperty); }\r\n            set { this.SetValue(HyperlinkStyleProperty, value); }\r\n        }\r\n        public static readonly DependencyProperty HyperlinkStyleProperty = DependencyProperty.Register(\r\n          \"HyperlinkStyle\", typeof(Style), typeof(LinkedTextBlock), new PropertyMetadata(null, new PropertyChangedCallback(HyperlinkStyleChanged)));\r\n\r\n        public Style RunStyle\r\n        {\r\n            get { return (Style)this.GetValue(RunStyleProperty); }\r\n            set { this.SetValue(RunStyleProperty, value); }\r\n        }\r\n        public static readonly DependencyProperty RunStyleProperty = DependencyProperty.Register(\r\n          \"RunStyle\", typeof(Style), typeof(LinkedTextBlock), new PropertyMetadata(null, new PropertyChangedCallback(RunStyleChanged)));\r\n\r\n\r\n        private static void HyperlinkStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((LinkedTextBlock)d).PropertiesChanged();\r\n        private static void RunStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((LinkedTextBlock)d).PropertiesChanged();\r\n\r\n        private void DataItemChanged()\r\n        {\r\n            ((INotifyPropertyChanged)DataItem).PropertyChanged += (s, e) => PropertiesChanged();\r\n        }\r\n\r\n        private void PropertiesChanged()\r\n        {\r\n            this.Inlines.Clear();\r\n\r\n            if (ContextMenu != null && Popup != null)\r\n            {\r\n                ContextMenu.Loaded += ContextMenu_Loaded;\r\n                Popup.Loaded += Popup_Loaded;\r\n            }\r\n\r\n            ReadLinksAndText(FormatText, (text, isLink) =>\r\n            {\r\n                text = text.Trim();\r\n                if (!isLink)\r\n                {\r\n                    var run = new Run(text);\r\n                    run.Style = RunStyle;\r\n                    this.Inlines.Add(run);\r\n                }\r\n                else\r\n                {\r\n                    var resolvedPropertyObject = DataItem.GetType().GetProperty(text).GetValue(DataItem, null);\r\n                    var link = new Hyperlink(new Run(resolvedPropertyObject.ToString()));\r\n                    link.NavigateUri = new Uri(\"about:none\");\r\n                    link.Style = HyperlinkStyle;\r\n\r\n                    link.RequestNavigate += (s, e) =>\r\n                    {\r\n                        // Take focus now so that we get return focus when the user leaves.\r\n                        link.Focus();\r\n                        var dpiX = Window.GetWindow(this).DpiX();\r\n                        var dpiY = Window.GetWindow(this).DpiY();\r\n\r\n                        if (resolvedPropertyObject is IOptionViewModel)\r\n                        {\r\n                            ContextMenu2.Opacity = 0;\r\n                            ContextMenu2.ItemsSource = GetContextMenuFromOptionViewModel((IOptionViewModel)resolvedPropertyObject).OrderBy(menu => menu.DisplayName);\r\n                            ContextMenu2.UpdateLayout();\r\n                            ContextMenu2.IsOpen = true;\r\n                            ContextMenu2.Dispatcher.BeginInvoke((Action)(() =>\r\n                            {\r\n                                ContextMenu2.Opacity = 1;\r\n                                ContextMenu2.HorizontalOffset = -1 * (ContextMenu2.RenderSize.Width / dpiX) / 2;\r\n                                ContextMenu2.VerticalOffset = -1 * (ContextMenu2.RenderSize.Height / dpiY) / 2;\r\n                                ContextMenu2.Focus();\r\n                            }),\r\n                            System.Windows.Threading.DispatcherPriority.DataBind, null);\r\n                        }\r\n                        else\r\n                        {\r\n                            Popup.PreviewKeyDown += (_, ee) =>\r\n                            {\r\n                                if (ee.Key == Key.Escape)\r\n                                {\r\n                                    Popup.IsOpen = false;\r\n                                }\r\n                            };\r\n                            Popup.Opacity = 0;\r\n                            Popup.DataContext = resolvedPropertyObject;\r\n                            Popup.UpdateLayout();\r\n                            Popup.Child.UpdateLayout();\r\n                            Popup.IsOpen = true;\r\n                            Popup.Dispatcher.BeginInvoke((Action)(() =>\r\n                            {\r\n                                Popup.Opacity = 1;\r\n                                Popup.HorizontalOffset = -1 * (Popup.Child.RenderSize.Width / dpiX) / 2;\r\n                                Popup.VerticalOffset = -1 * (Popup.Child.RenderSize.Height / dpiY) / 2;\r\n                                Keyboard.Focus(Popup.Child.FindVisualChild<Control>());\r\n                            }),\r\n                            System.Windows.Threading.DispatcherPriority.DataBind, null);\r\n                        }\r\n                    };\r\n                    this.Inlines.Add(link);\r\n                }\r\n                this.Inlines.Add(new Run(\" \"));\r\n            });\r\n        }\r\n\r\n        private void Popup_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            Popup.UpdateLayout();\r\n            Popup.Child.UpdateLayout();\r\n            Popup.HorizontalOffset = -1 * Popup.Child.RenderSize.Width / 2;\r\n            Popup.VerticalOffset = -1 * Popup.Child.RenderSize.Height / 2;\r\n        }\r\n\r\n        private void ContextMenu_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            ContextMenu2.UpdateLayout();\r\n            ContextMenu2.HorizontalOffset = -1 * ContextMenu2.RenderSize.Width / 2;\r\n            ContextMenu2.VerticalOffset = -1 * ContextMenu2.RenderSize.Height / 2;\r\n        }\r\n\r\n        private List<ContextMenuItem> GetContextMenuFromOptionViewModel(IOptionViewModel options)\r\n        {\r\n            return options.All.Select(item => new ContextMenuItem\r\n            {\r\n                DisplayName = item.DisplayName,\r\n                IsChecked = (item == options.Selected),\r\n                Command = new RelayCommand(() => options.Selected = item),\r\n            }).ToList();\r\n        }\r\n\r\n        private void ReadLinksAndText(string text, Action<string, bool> callback)\r\n        {\r\n            int ptr = 0;\r\n            for (int i = 0; i < text.Length; i++)\r\n            {\r\n                if (text[i] == '{')\r\n                {\r\n                    if (i > 0)\r\n                    {\r\n                        callback(text.Substring(ptr, i - 1 - ptr), false);\r\n                    }\r\n                    ptr = i + 1;\r\n                }\r\n                else if (text[i] == '}')\r\n                {\r\n                    callback(text.Substring(ptr, i - ptr), true);\r\n                    ptr = i + 1;\r\n                }\r\n            }\r\n\r\n            if (ptr < text.Length - 1)\r\n            {\r\n                callback(text.Substring(ptr, text.Length - ptr), false);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/Controls/MenuButton.cs",
    "content": "﻿using System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\n\r\nnamespace EarTrumpet.Actions.Controls\r\n{\r\n    public class MenuButton : Button\r\n    {\r\n        public MenuButton()\r\n        {\r\n            Click += Button_Click;\r\n        }\r\n\r\n        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)\r\n        {\r\n            var btn = (Button)sender;\r\n\r\n            btn.ContextMenu.Opened += (_, __) =>\r\n            {\r\n                ((Popup)btn.ContextMenu.Parent).PopupAnimation = PopupAnimation.None;\r\n            };\r\n\r\n            btn.ContextMenu.PlacementTarget = btn;\r\n            btn.ContextMenu.Placement = PlacementMode.Bottom;\r\n            btn.ContextMenu.IsOpen = true;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/AudioAppEventKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum AudioAppEventKind\r\n    {\r\n        Added,\r\n        Removed,\r\n        PlayingSound,\r\n        NotPlayingSound,\r\n        Muted,\r\n        Unmuted,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/AudioDeviceEventKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum AudioDeviceEventKind\r\n    {\r\n        Added,\r\n        Removed,\r\n        BecomingDefault,\r\n        LeavingDefault,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/BoolValue.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum BoolValue\r\n    {\r\n        True,\r\n        False,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/ComparisonBoolKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum ComparisonBoolKind\r\n    {\r\n        Is,\r\n        IsNot,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/EarTrumpetEventKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum EarTrumpetEventKind\r\n    {\r\n        Startup,\r\n        Shutdown,\r\n    };\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/MuteKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum MuteKind\r\n    {\r\n        Mute,\r\n        Unmute,\r\n        ToggleMute,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/ProcessEventKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum ProcessEventKind\r\n    {\r\n        Start,\r\n        Stop,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/ProcessStateKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum ProcessStateKind\r\n    {\r\n        Running,\r\n        NotRunning\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Enum/SetVolumeKind.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Enum\r\n{\r\n    public enum SetVolumeKind\r\n    {\r\n        Set,\r\n        Increment,\r\n        Decrement,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/IPartWithApp.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.DataModel\r\n{\r\n    interface IPartWithApp\r\n    {\r\n        AppRef App { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/IPartWithDevice.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.DataModel\r\n{\r\n    public interface IPartWithDevice\r\n    {\r\n        Device Device { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/IPartWithText.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel\r\n{\r\n    interface IPartWithText\r\n    {\r\n        string Text { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/IPartWithVolume.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel\r\n{\r\n    public interface IPartWithVolume\r\n    {\r\n        double Volume { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/LocalVariablesContainer.cs",
    "content": "﻿using EarTrumpet.DataModel.Storage;\r\n\r\nnamespace EarTrumpet.Actions.DataModel\r\n{\r\n    public class LocalVariablesContainer\r\n    {\r\n        public bool this[string key]\r\n        {\r\n            get => _settings.Get($\"{s_localVariablePrefix}{key}\", false);\r\n            set => _settings.Set($\"{s_localVariablePrefix}{key}\", value);\r\n        }\r\n\r\n        private const string s_localVariablePrefix = \"LocalVariable.\";\r\n        private readonly ISettingsBag _settings;\r\n\r\n        public LocalVariablesContainer(ISettingsBag settings)\r\n        {\r\n            _settings = settings;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Part.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel\r\n{\r\n    public abstract class Part { }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/ProcessWatcher.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing EarTrumpet.Actions.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading;\r\n\r\nnamespace EarTrumpet.Actions.DataModel\r\n{\r\n    public class ProcessWatcher\r\n    {\r\n        class ProcessInfo\r\n        {\r\n            public List<IntPtr> Windows = new List<IntPtr>();\r\n        }\r\n\r\n        class WatcherInfo\r\n        {\r\n            public List<Action> StartCallbacks = new List<Action>();\r\n            public List<Action> StopCallbacks = new List<Action>();\r\n            public Dictionary<int, ProcessInfo> RunningProcesses = new Dictionary<int, ProcessInfo>();\r\n        }\r\n\r\n        public static ProcessWatcher Current { get; } = new ProcessWatcher();\r\n\r\n        WindowWatcher _watcher = new WindowWatcher();\r\n        Dictionary<string, WatcherInfo> _info = new Dictionary<string, WatcherInfo>();\r\n\r\n        public ProcessWatcher()\r\n        {\r\n            _watcher.WindowCreated += OnWindowCreated;\r\n        }\r\n\r\n        // Used only by the condition processor, so we use realtime data only.\r\n        public bool IsRunning(string procName)\r\n        {\r\n            try\r\n            {\r\n                return Process.GetProcessesByName(procName).Any();\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n            return false;\r\n        }\r\n\r\n        private void OnWindowCreated(IntPtr hwnd)\r\n        {\r\n            try\r\n            {\r\n                User32.GetWindowThreadProcessId(hwnd, out uint pid);\r\n\r\n                using (var proc = Process.GetProcessById((int)pid))\r\n                {\r\n                    if (_info.ContainsKey(proc.ProcessName.ToLower()))\r\n                    {\r\n                        FoundNewRelevantProcess(proc);\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        bool FoundNewRelevantProcess(Process proc)\r\n        {\r\n            var info = _info[proc.ProcessName.ToLower()];\r\n\r\n            if (!info.RunningProcesses.ContainsKey(proc.Id))\r\n            {\r\n                var procInfo = new ProcessInfo();\r\n                info.RunningProcesses[proc.Id] = procInfo;\r\n\r\n                new Thread(() =>\r\n                {\r\n                    Thread.CurrentThread.IsBackground = true;\r\n\r\n                    var procName = proc.ProcessName;\r\n                    proc.WaitForExit();\r\n                    Trace.WriteLine($\"ProcessWatcher STOP {procName}\");\r\n                    info.StopCallbacks.ForEach(s => s.Invoke());\r\n                }).Start();\r\n\r\n                Trace.WriteLine($\"ProcessWatcher START {proc.ProcessName}\");\r\n                info.StartCallbacks.ForEach(s => s.Invoke());\r\n                return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        public void RegisterStop(string text, Action callback)\r\n        {\r\n            Trace.WriteLine($\"ProcessWatcher RegisterStop {text}\");\r\n            text = text.ToLower();\r\n            WatcherInfo info = _info.ContainsKey(text) ? _info[text] : _info[text] = new WatcherInfo();\r\n            info.StopCallbacks.Add(callback);\r\n\r\n            try\r\n            {\r\n                var runningProcs = Process.GetProcessesByName(text);\r\n                foreach (var proc in runningProcs)\r\n                {\r\n                    FoundNewRelevantProcess(proc);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        public void RegisterStart(string text, Action callback)\r\n        {\r\n            Trace.WriteLine($\"ProcessWatcher RegisterStart {text}\");\r\n            text = text.ToLower();\r\n            WatcherInfo info = _info.ContainsKey(text) ? _info[text] : new WatcherInfo();\r\n            info.StartCallbacks.Add(callback);\r\n\r\n            try\r\n            {\r\n                bool didSignal = false;\r\n                var runningProcs = Process.GetProcessesByName(text);\r\n                foreach (var proc in runningProcs)\r\n                {\r\n                    didSignal = didSignal || FoundNewRelevantProcess(proc);\r\n                }\r\n\r\n                if (runningProcs.Any() && !didSignal)\r\n                {\r\n                    // We were already watching so we didn't signal but the process is running.\r\n                    callback();\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        public void Clear()\r\n        {\r\n            Trace.WriteLine(\"ProcessWatcher Clear\");\r\n            _info = new Dictionary<string, WatcherInfo>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Processing/ActionProcessor.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing EarTrumpet.Actions.DataModel.Enum;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.DataModel.AppInformation;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Processing\r\n{\r\n    class ActionProcessor\r\n    {\r\n        public static void Invoke(BaseAction a)\r\n        {\r\n            Trace.WriteLine($\"ActionProcessor Invoke: {a.GetType().Name}\");\r\n            if (a is SetVariableAction)\r\n            {\r\n                EarTrumpetActionsAddon.Current.LocalVariables[((SetVariableAction)a).Text] = (((SetVariableAction)a).Value == BoolValue.True);\r\n            }\r\n            else if (a is SetDefaultDeviceAction)\r\n            {\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((SetDefaultDeviceAction)a).Device.Kind));\r\n\r\n                var dev = mgr.Devices.FirstOrDefault(d => d.Id == ((SetDefaultDeviceAction)a).Device.Id);\r\n                if (dev != null)\r\n                {\r\n                    mgr.Default = dev;\r\n                }\r\n            }\r\n            else if (a is SetAppVolumeAction)\r\n            {\r\n                var action = (SetAppVolumeAction)a;\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((SetAppVolumeAction)a).Device.Kind));\r\n\r\n                var device = (action.Device?.Id == null) ?\r\n                    mgr.Default : mgr.Devices.FirstOrDefault(d => d.Id == action.Device.Id);\r\n                if (device != null)\r\n                {\r\n                    if (action.App.Id == AppRef.ForegroundAppId)\r\n                    {\r\n                        var app = FindForegroundApp(device.Groups);\r\n                        if (app != null)\r\n                        {\r\n                            DoAudioAction(action.Option, app, action);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        foreach (var app in device.Groups.Where(app => action.App.Id == AppRef.EveryAppId || app.AppId == action.App.Id))\r\n                        {\r\n                            DoAudioAction(action.Option, app, action);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (a is SetAppMuteAction)\r\n            {\r\n                var action = (SetAppMuteAction)a;\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((SetAppMuteAction)a).Device.Kind));\r\n\r\n                var device = (action.Device?.Id == null) ?\r\n                    mgr.Default : mgr.Devices.FirstOrDefault(d => d.Id == action.Device.Id);\r\n                if (device != null)\r\n                {\r\n                    if (action.App.Id == AppRef.ForegroundAppId)\r\n                    {\r\n                        var app = FindForegroundApp(device.Groups);\r\n                        if (app != null)\r\n                        {\r\n                            DoAudioAction(action.Option, app);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        foreach (var app in device.Groups.Where(app => action.App.Id == AppRef.EveryAppId || app.AppId == action.App.Id))\r\n                        {\r\n                            DoAudioAction(action.Option, app);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            else if (a is SetDeviceVolumeAction)\r\n            {\r\n                var action = (SetDeviceVolumeAction)a;\r\n\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((SetDeviceVolumeAction)a).Device.Kind));\r\n\r\n                var device = (action.Device?.Id == null) ?\r\n                    mgr.Default : mgr.Devices.FirstOrDefault(d => d.Id == action.Device.Id);\r\n                if (device != null)\r\n                {\r\n                    DoAudioAction(action.Option, device, action);\r\n                }\r\n            }\r\n            else if (a is SetDeviceMuteAction)\r\n            {\r\n                var action = (SetDeviceMuteAction)a;\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((SetDeviceMuteAction)a).Device.Kind));\r\n\r\n                var device = (action.Device?.Id == null) ?\r\n                    mgr.Default : mgr.Devices.FirstOrDefault(d => d.Id == action.Device.Id);\r\n                if (device != null)\r\n                {\r\n                    DoAudioAction(action.Option, device);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private static IAudioDeviceSession FindForegroundApp(ObservableCollection<IAudioDeviceSession> groups)\r\n        {\r\n            var hWnd = User32.GetForegroundWindow();\r\n            var foregroundClassName = new StringBuilder(User32.MAX_CLASSNAME_LENGTH);\r\n            User32.GetClassName(hWnd, foregroundClassName, foregroundClassName.Capacity);\r\n\r\n            if (hWnd == IntPtr.Zero)\r\n            {\r\n                Trace.WriteLine($\"ActionProcessor FindForegroundApp: No Window (1)\");\r\n                return null;\r\n            }\r\n\r\n            // ApplicationFrameWindow.exe, find the real hosted process in the child CoreWindow.\r\n            if (foregroundClassName.ToString() == \"ApplicationFrameWindow\")\r\n            {\r\n                hWnd = User32.FindWindowEx(hWnd, IntPtr.Zero, \"Windows.UI.Core.CoreWindow\", IntPtr.Zero);\r\n            }\r\n\r\n            if (hWnd == IntPtr.Zero)\r\n            {\r\n                Trace.WriteLine($\"ActionProcessor FindForegroundApp: No Window (2)\");\r\n                return null;\r\n            }\r\n\r\n            User32.GetWindowThreadProcessId(hWnd, out uint processId);\r\n\r\n            try\r\n            {\r\n                var appInfo = AppInformationFactory.CreateForProcess((int)processId);\r\n\r\n                foreach(var group in groups)\r\n                {\r\n                    if (group.AppId == appInfo.PackageInstallPath)\r\n                    {\r\n                        Trace.WriteLine($\"ActionProcessor FindForegroundApp: {group.DisplayName}\");\r\n                        return group;\r\n                    }\r\n                }\r\n            }\r\n            catch(Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n            Trace.WriteLine(\"ActionProcessor FindForegroundApp Didn't locate foreground app\");\r\n            return null;\r\n        }\r\n\r\n        private static void DoAudioAction(MuteKind action, IStreamWithVolumeControl stream)\r\n        {\r\n            switch (action)\r\n            {\r\n                case MuteKind.Mute:\r\n                    stream.IsMuted = true;\r\n                    break;\r\n                case MuteKind.ToggleMute:\r\n                    stream.IsMuted = !stream.IsMuted;\r\n                    break;\r\n                case MuteKind.Unmute:\r\n                    stream.IsMuted = false;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private static void DoAudioAction(SetVolumeKind action, IStreamWithVolumeControl stream, IPartWithVolume part)\r\n        {\r\n            var vol = (float)(part.Volume / 100f);\r\n            switch (action)\r\n            {\r\n                case SetVolumeKind.Set:\r\n                    stream.Volume = vol;\r\n                    break;\r\n                case SetVolumeKind.Increment:\r\n                    stream.Volume += vol;\r\n                    break;\r\n                case SetVolumeKind.Decrement:\r\n                    stream.Volume -= vol;\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Processing/AudioTriggerManager.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Enum;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensibility.Shared;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Processing\r\n{\r\n    class AudioTriggerManager\r\n    {\r\n        public event Action<BaseTrigger> Triggered;\r\n\r\n        private readonly PlaybackDataModelHost _playbackManager;\r\n        private readonly IAudioDeviceManager _recordingManager;\r\n        private readonly List<AppEventTrigger> _appTriggers = new List<AppEventTrigger>();\r\n        private readonly List<DeviceEventTrigger> _deviceTriggers = new List<DeviceEventTrigger>();\r\n        private IAudioDevice _defaultPlaybackDevice;\r\n        private IAudioDevice _defaultRecordingDevice;\r\n\r\n        public AudioTriggerManager()\r\n        {\r\n            _playbackManager = PlaybackDataModelHost.Current;\r\n            _playbackManager.AppPropertyChanged += OnAppPropertyChanged;\r\n            _playbackManager.AppAdded += (a) => OnAppAddOrRemove(a, AudioAppEventKind.Added);\r\n            _playbackManager.AppRemoved += (a) => OnAppAddOrRemove(a, AudioAppEventKind.Removed);\r\n            _playbackManager.DeviceAdded += (d) => OnDeviceAddOrRemove(d, AudioDeviceEventKind.Added);\r\n            _playbackManager.DeviceRemoved += (d) => OnDeviceAddOrRemove(d, AudioDeviceEventKind.Removed);\r\n            _playbackManager.DeviceManager.DefaultChanged += PlaybackDeviceManager_DefaultChanged;\r\n            _defaultPlaybackDevice = _playbackManager.DeviceManager.Default;\r\n\r\n            _recordingManager = WindowsAudioFactory.Create(AudioDeviceKind.Recording);\r\n            _recordingManager.DefaultChanged += RecordingMgr_DefaultChanged;\r\n            _defaultRecordingDevice = _recordingManager.Default;\r\n        }\r\n\r\n        public void Register(BaseTrigger trigger)\r\n        {\r\n            if (trigger is DeviceEventTrigger)\r\n            {\r\n                _deviceTriggers.Add((DeviceEventTrigger)trigger);\r\n            }\r\n            else if (trigger is AppEventTrigger)\r\n            {\r\n                _appTriggers.Add((AppEventTrigger)trigger);\r\n            }\r\n            else throw new NotImplementedException();\r\n        }\r\n\r\n        public void Clear()\r\n        {\r\n            _appTriggers.Clear();\r\n            _deviceTriggers.Clear();\r\n        }\r\n\r\n        private void PlaybackDeviceManager_DefaultChanged(object sender, EarTrumpet.DataModel.Audio.IAudioDevice newDefault)\r\n        {\r\n            if (newDefault == null) return;\r\n\r\n            ProcessDefaultChanged(newDefault);\r\n\r\n            _defaultPlaybackDevice = newDefault;\r\n        }\r\n\r\n        private void RecordingMgr_DefaultChanged(object sender, IAudioDevice newDefault)\r\n        {\r\n            if (newDefault == null) return;\r\n\r\n            ProcessDefaultChanged(newDefault);\r\n\r\n            _defaultRecordingDevice = newDefault;\r\n        }\r\n\r\n        private void ProcessDefaultChanged(IAudioDevice newDefault)\r\n        {\r\n            foreach (var trigger in _deviceTriggers)\r\n            {\r\n                if (trigger.Device.Id == _defaultPlaybackDevice?.Id &&\r\n                    trigger.Option == AudioDeviceEventKind.LeavingDefault)\r\n                {\r\n                    Triggered?.Invoke(trigger);\r\n                }\r\n\r\n                if (trigger.Device.Id == newDefault.Id &&\r\n                    trigger.Option == AudioDeviceEventKind.BecomingDefault)\r\n                {\r\n                    Triggered?.Invoke(trigger);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnDeviceAddOrRemove(IAudioDevice device, AudioDeviceEventKind option)\r\n        {\r\n            foreach (var trigger in _deviceTriggers)\r\n            {\r\n                if (trigger.Option == option)\r\n                {\r\n                    // Default device: not supported\r\n                    if (trigger.Device.Id == device.Id)\r\n                    {\r\n                        Triggered?.Invoke(trigger);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnAppAddOrRemove(IAudioDeviceSession app, AudioAppEventKind option)\r\n        {\r\n            foreach (var trigger in _appTriggers)\r\n            {\r\n                if (trigger.Option == option)\r\n                {\r\n                    var device = app.Parent;\r\n                    if ((trigger.Device?.Id == null && device == _playbackManager.DeviceManager.Default) ||\r\n                         trigger.Device?.Id == device.Id)\r\n                    {\r\n                        if (trigger.App.Id == app.AppId)\r\n                        {\r\n                            Triggered?.Invoke(trigger);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnAppPropertyChanged(IAudioDeviceSession app, string propertyName)\r\n        {\r\n            foreach (var trigger in _appTriggers)\r\n            {\r\n                var device = app.Parent;\r\n                if ((trigger.Device?.Id == null && device == _playbackManager.DeviceManager.Default) || trigger.Device?.Id == device.Id)\r\n                {\r\n                    if (trigger.App.Id == app.AppId)\r\n                    {\r\n                        switch (trigger.Option)\r\n                        {\r\n                            case AudioAppEventKind.Muted:\r\n                                if (propertyName == nameof(app.IsMuted) && app.IsMuted)\r\n                                {\r\n                                    Triggered?.Invoke(trigger);\r\n                                }\r\n                                break;\r\n                            case AudioAppEventKind.Unmuted:\r\n                                if (propertyName == nameof(app.IsMuted) && !app.IsMuted)\r\n                                {\r\n                                    Triggered?.Invoke(trigger);\r\n                                }\r\n                                break;\r\n                            case AudioAppEventKind.PlayingSound:\r\n                                if (propertyName == nameof(app.State) && app.State == SessionState.Active)\r\n                                {\r\n                                    Triggered?.Invoke(trigger);\r\n                                }\r\n                                break;\r\n                            case AudioAppEventKind.NotPlayingSound:\r\n                                if (propertyName == nameof(app.State) && app.State != SessionState.Active)\r\n                                {\r\n                                    Triggered?.Invoke(trigger);\r\n                                }\r\n                                break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Processing/ConditionProcessor.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Enum;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Processing\r\n{\r\n    class ConditionProcessor\r\n    {\r\n        public static bool IsMet(BaseCondition condition)\r\n        {\r\n            if (condition is ProcessCondition)\r\n            {\r\n                bool isProcessRunning = ProcessWatcher.Current.IsRunning(((ProcessCondition)condition).Text);\r\n                switch (((ProcessCondition)condition).Option)\r\n                {\r\n                    case ProcessStateKind.Running:\r\n                        return isProcessRunning;\r\n                    case ProcessStateKind.NotRunning:\r\n                        return !isProcessRunning;\r\n                    default:\r\n                        throw new NotImplementedException();\r\n                }\r\n            }\r\n            else if (condition is DefaultDeviceCondition)\r\n            {\r\n                var mgr = WindowsAudioFactory.Create((AudioDeviceKind)System.Enum.Parse(typeof(AudioDeviceKind), ((DefaultDeviceCondition)condition).Device.Kind));\r\n\r\n                var isDeviceCurrentlyDefault = ((DefaultDeviceCondition)condition).Device.Id == mgr.Default?.Id;\r\n                switch (((DefaultDeviceCondition)condition).Option)\r\n                {\r\n                    case ComparisonBoolKind.Is:\r\n                        return isDeviceCurrentlyDefault;\r\n                    case ComparisonBoolKind.IsNot:\r\n                        return !isDeviceCurrentlyDefault;\r\n                    default:\r\n                        throw new NotImplementedException();\r\n                }\r\n            }\r\n            else if (condition is VariableCondition)\r\n            {\r\n                return (EarTrumpetActionsAddon.Current.LocalVariables[((VariableCondition)condition).Text] == (((VariableCondition)condition).Value == BoolValue.True));\r\n            }\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Processing/TriggerManager.cs",
    "content": "﻿using EarTrumpet.Extensibility;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.Actions.DataModel.Enum;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Processing\r\n{\r\n    class TriggerManager\r\n    {\r\n        public event Action<BaseTrigger> Triggered;\r\n\r\n        private List<EventTrigger> _eventTriggers = new List<EventTrigger>();\r\n        private AudioTriggerManager _audioManager;\r\n\r\n        public TriggerManager()\r\n        {\r\n            _audioManager = new AudioTriggerManager();\r\n            _audioManager.Triggered += (t) => Triggered?.Invoke(t);\r\n        }\r\n\r\n        public void Clear()\r\n        {\r\n            ProcessWatcher.Current.Clear();\r\n            _eventTriggers.Clear();\r\n            _audioManager.Clear();\r\n        }\r\n\r\n        public void OnEvent(AddonEventKind evt)\r\n        {\r\n            foreach (var trigger in _eventTriggers)\r\n            {\r\n                if ((trigger.Option == EarTrumpetEventKind.Startup && evt == AddonEventKind.InitializeAddon) ||\r\n                    (trigger.Option == EarTrumpetEventKind.Shutdown && evt == AddonEventKind.AppShuttingDown))\r\n                {\r\n                    Triggered?.Invoke(trigger);\r\n                }\r\n            }\r\n        }\r\n\r\n        public void Register(BaseTrigger trig)\r\n        {\r\n            if (trig is ProcessTrigger)\r\n            {\r\n                var trigger = (ProcessTrigger)trig;\r\n                if (!string.IsNullOrWhiteSpace(trigger.Text))\r\n                {\r\n                    if (trigger.Option == ProcessEventKind.Start)\r\n                    {\r\n                        ProcessWatcher.Current.RegisterStart(trigger.Text, () => Triggered?.Invoke(trig));\r\n                    }\r\n                    else\r\n                    {\r\n                        ProcessWatcher.Current.RegisterStop(trigger.Text, () => Triggered?.Invoke(trig));\r\n                    }\r\n                }\r\n            }\r\n            else if (trig is EventTrigger)\r\n            {\r\n                _eventTriggers.Add((EventTrigger)trig);\r\n            }\r\n            else if (trig is DeviceEventTrigger)\r\n            {\r\n                _audioManager.Register(trig);\r\n            }\r\n            else if (trig is AppEventTrigger)\r\n            {\r\n                _audioManager.Register(trig);\r\n            }\r\n            else if (trig is HotkeyTrigger)\r\n            {\r\n                var trigger = (HotkeyTrigger)trig;\r\n\r\n                HotkeyManager.Current.Register(trigger.Option);\r\n                HotkeyManager.Current.KeyPressed += (data) =>\r\n                {\r\n                    if (data.Equals(trigger.Option))\r\n                    {\r\n                        Triggered?.Invoke(trig);\r\n                    }\r\n                };\r\n            }\r\n            else if (trig is ContextMenuTrigger)\r\n            {\r\n                // Nothing to do.\r\n            }\r\n            else throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Actions.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Enum;\r\nusing System.Xml.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    [XmlInclude(typeof(SetAppVolumeAction))]\r\n    [XmlInclude(typeof(SetAppMuteAction))]\r\n    [XmlInclude(typeof(SetDeviceVolumeAction))]\r\n    [XmlInclude(typeof(SetDeviceMuteAction))]\r\n    [XmlInclude(typeof(SetDefaultDeviceAction))]\r\n    [XmlInclude(typeof(SetVariableAction))]\r\n    public abstract class BaseAction : Part { }\r\n\r\n    public class SetAppMuteAction : BaseAction, IPartWithDevice, IPartWithApp\r\n    {\r\n        public Device Device { get; set; }\r\n        public AppRef App { get; set; }\r\n        public MuteKind Option { get; set; }\r\n    }\r\n\r\n    public class SetAppVolumeAction : BaseAction, IPartWithVolume, IPartWithDevice, IPartWithApp\r\n    {\r\n        public Device Device { get; set; }\r\n        public AppRef App { get; set; }\r\n        public SetVolumeKind Option { get; set; }\r\n        public double Volume { get; set; }\r\n    }\r\n\r\n    public class SetDefaultDeviceAction : BaseAction, IPartWithDevice\r\n    {\r\n        public Device Device { get; set; }\r\n    }\r\n\r\n    public class SetDeviceMuteAction : BaseAction, IPartWithDevice\r\n    {\r\n        public Device Device { get; set; }\r\n        public MuteKind Option { get; set; }\r\n    }\r\n\r\n    public class SetDeviceVolumeAction : BaseAction, IPartWithDevice, IPartWithVolume\r\n    {\r\n        public Device Device { get; set; }\r\n        public SetVolumeKind Option { get; set; }\r\n        public double Volume { get; set; }\r\n    }\r\n\r\n    public class SetVariableAction : BaseAction, IPartWithText\r\n    {\r\n        public string Text { get; set; }\r\n        public BoolValue Value { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/App.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    public class AppRef\r\n    {\r\n        public static readonly string EveryAppId = \"EarTrumpet.EveryApp\";\r\n        public static readonly string ForegroundAppId = \"EarTrumpet.ForegroundApp\";\r\n\r\n        public string Id { get; set; }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Id == null ? 0 : Id.GetHashCode();\r\n        }\r\n\r\n        public bool Equals(AppRef other)\r\n        {\r\n            return other.Id == Id;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Conditions.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Enum;\r\nusing System.Xml.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    [XmlInclude(typeof(DefaultDeviceCondition))]\r\n    [XmlInclude(typeof(ProcessCondition))]\r\n    [XmlInclude(typeof(VariableCondition))]\r\n    public abstract class BaseCondition : Part { }\r\n\r\n    public class DefaultDeviceCondition : BaseCondition, IPartWithDevice\r\n    {\r\n        public Device Device { get; set; }\r\n        public ComparisonBoolKind Option { get; set; }\r\n    }\r\n\r\n    public class ProcessCondition : BaseCondition, IPartWithText\r\n    {\r\n        public string Text { get; set; }\r\n        public ProcessStateKind Option { get; set; }\r\n    }\r\n\r\n    public class VariableCondition : BaseCondition, IPartWithText\r\n    {\r\n        public string Text { get; set; }\r\n        public BoolValue Value { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Device.cs",
    "content": "﻿namespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    public class Device\r\n    {\r\n        public string Id { get; set; }\r\n\r\n        public string Kind { get; set; }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return Id == null ? 0 : Id.GetHashCode();\r\n        }\r\n\r\n        public bool Equals(Device other)\r\n        {\r\n            return other.Id == Id;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/EarTrumpetAction.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    public class EarTrumpetAction\r\n    {\r\n        public string DisplayName { get; set; }\r\n        public Guid Id { get; set; } = Guid.NewGuid();\r\n        public ObservableCollection<BaseTrigger> Triggers { get; set; } = new ObservableCollection<BaseTrigger>();\r\n        public ObservableCollection<BaseCondition> Conditions { get; set; } = new ObservableCollection<BaseCondition>();\r\n        public ObservableCollection<BaseAction> Actions { get; set; } = new ObservableCollection<BaseAction>();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/DataModel/Serialization/Triggers.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.Actions.DataModel.Enum;\r\nusing System.Xml.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.DataModel.Serialization\r\n{\r\n    [XmlInclude(typeof(EventTrigger))]\r\n    [XmlInclude(typeof(HotkeyTrigger))]\r\n    [XmlInclude(typeof(DeviceEventTrigger))]\r\n    [XmlInclude(typeof(AppEventTrigger))]\r\n    [XmlInclude(typeof(ProcessTrigger))]\r\n    [XmlInclude(typeof(ContextMenuTrigger))]\r\n    public abstract class BaseTrigger : Part { }\r\n\r\n    public class AppEventTrigger : BaseTrigger, IPartWithDevice, IPartWithApp\r\n    {\r\n        public Device Device { get; set; }\r\n        public AppRef App { get; set; }\r\n        public AudioAppEventKind Option { get; set; }\r\n    }\r\n\r\n    public class ContextMenuTrigger : BaseTrigger { }\r\n\r\n    public class DeviceEventTrigger : BaseTrigger, IPartWithDevice\r\n    {\r\n        public Device Device { get; set; }\r\n        public AudioDeviceEventKind Option { get; set; }\r\n    }\r\n\r\n    public class EventTrigger : BaseTrigger\r\n    {\r\n        public EarTrumpetEventKind Option { get; set; }\r\n    }\r\n\r\n    public class HotkeyTrigger : BaseTrigger\r\n    {\r\n        public HotkeyData Option { get; set; } = new HotkeyData();\r\n    }\r\n\r\n    public class ProcessTrigger : BaseTrigger, IPartWithText\r\n    {\r\n        public string Text { get; set; }\r\n        public ProcessEventKind Option { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/EarTrumpetActionsAddon.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel;\r\nusing EarTrumpet.Actions.DataModel.Processing;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing EarTrumpet.Actions.ViewModel;\r\nusing EarTrumpet.DataModel.Storage;\r\nusing EarTrumpet.Extensibility;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel.Composition;\r\nusing System.IO;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Actions\r\n{\r\n    [Export(typeof(EarTrumpetAddon))]\r\n    public class EarTrumpetActionsAddon : EarTrumpetAddon, IEarTrumpetAddonEvents, IEarTrumpetAddonSettingsPage, IEarTrumpetAddonNotificationAreaContextMenu\r\n    {\r\n        public static EarTrumpetActionsAddon Current { get; private set; }\r\n        public LocalVariablesContainer LocalVariables { get; private set; }\r\n\r\n        public EarTrumpetActionsAddon() : base()\r\n        {\r\n            DisplayName = Properties.Resources.MyActionsText;\r\n        }\r\n\r\n        public EarTrumpetAction[] Actions\r\n        {\r\n            get => _actions;\r\n            set\r\n            {\r\n                Settings.Set(c_actionsSettingKey, value);\r\n                LoadAndRegister();\r\n            }\r\n        }\r\n\r\n        private readonly string c_actionsSettingKey = \"ActionsData\";\r\n        private EarTrumpetAction[] _actions = new EarTrumpetAction[] { };\r\n        private TriggerManager _triggerManager = new TriggerManager();\r\n\r\n        public void OnAddonEvent(AddonEventKind evt)\r\n        {\r\n            if (evt == AddonEventKind.AddonsInitialized)\r\n            {\r\n                Current = this;\r\n                LocalVariables = new LocalVariablesContainer(Settings);\r\n\r\n                _triggerManager.Triggered += OnTriggered;\r\n                LoadAndRegister();\r\n\r\n                _triggerManager.OnEvent(AddonEventKind.InitializeAddon);\r\n            }\r\n            else if (evt == AddonEventKind.AppShuttingDown)\r\n            {\r\n                _triggerManager.OnEvent(AddonEventKind.AppShuttingDown);\r\n            }\r\n        }\r\n\r\n        public SettingsCategoryViewModel GetSettingsCategory()\r\n        {\r\n            LoadAddonResources();\r\n            return new ActionsCategoryViewModel();\r\n        }\r\n\r\n        public IEnumerable<ContextMenuItem> NotificationAreaContextMenuItems\r\n        {\r\n            get\r\n            {\r\n                var ret = new List<ContextMenuItem>();\r\n\r\n                if (EarTrumpetActionsAddon.Current == null)\r\n                {\r\n                    return ret;\r\n                }\r\n\r\n                foreach (var item in EarTrumpetActionsAddon.Current.Actions.Where(a => a.Triggers.FirstOrDefault(ax => ax is ContextMenuTrigger) != null))\r\n                {\r\n                    ret.Add(new ContextMenuItem\r\n                    {\r\n                        Glyph = \"\\xE1CE\",\r\n                        IsChecked = true,\r\n                        DisplayName = item.DisplayName,\r\n                        Command = new RelayCommand(() => EarTrumpetActionsAddon.Current.TriggerAction(item))\r\n                    });\r\n                }\r\n                return ret;\r\n            }\r\n        }\r\n\r\n        private void LoadAndRegister()\r\n        {\r\n            _triggerManager.Clear();\r\n            _actions = Settings.Get(c_actionsSettingKey, new EarTrumpetAction[] { });\r\n            _actions.SelectMany(a => a.Triggers).ToList().ForEach(t => _triggerManager.Register(t));\r\n        }\r\n\r\n        public void Import(string fileName)\r\n        {\r\n            var imported = Serializer.FromString<EarTrumpetAction[]>(File.ReadAllText(fileName)).ToList();\r\n            foreach(var imp in imported)\r\n            {\r\n                imp.Id = Guid.NewGuid();\r\n            }\r\n            imported.AddRange(Actions);\r\n            Actions = imported.ToArray();\r\n        }\r\n\r\n        public string Export()\r\n        {\r\n            return Settings.Get(c_actionsSettingKey, \"\");\r\n        }\r\n\r\n        private void OnTriggered(BaseTrigger trigger)\r\n        {\r\n            var action = Actions.FirstOrDefault(a => a.Triggers.Contains(trigger));\r\n            if (action != null && action.Conditions.All(c => ConditionProcessor.IsMet(c)))\r\n            {\r\n                TriggerAction(action);\r\n            }\r\n        }\r\n\r\n        public void TriggerAction(EarTrumpetAction action)\r\n        {\r\n            action.Actions.ToList().ForEach(a => ActionProcessor.Invoke(a));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/Interop/Helpers/WindowWatcher.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Actions.Interop.Helpers\r\n{\r\n    class WindowWatcher\r\n    {\r\n        public event Action<IntPtr> WindowCreated;\r\n        public event Action<IntPtr> WindowDestroyed;\r\n        readonly Win32Window _window;\r\n        readonly uint _ShellNotifyMsg;\r\n\r\n        public WindowWatcher()\r\n        {\r\n            _window = new Win32Window();\r\n            _window.Initialize(WndProc);\r\n            _ShellNotifyMsg = User32.RegisterWindowMessageW(User32.SHELLHOOK);\r\n            if (!User32.RegisterShellHookWindow(_window.Handle))\r\n            {\r\n                Trace.WriteLine(\"Failed to register shell hook window\");\r\n            }\r\n        }\r\n\r\n        void WndProc(Message m)\r\n        {\r\n            if (m.Msg == _ShellNotifyMsg)\r\n            {\r\n                if (m.WParam.ToInt32() == User32.HSHELL_WINDOWCREATED)\r\n                {\r\n                    WindowCreated?.Invoke(m.LParam);\r\n                }\r\n                else if (m.WParam.ToInt32() == User32.HSHELL_WINDOWDESTROYED)\r\n                {\r\n                    WindowDestroyed?.Invoke(m.LParam);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/Interop/User32.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Actions.Interop\r\n{\r\n    class User32\r\n    {\r\n        public static readonly string SHELLHOOK = \"SHELLHOOK\";\r\n        public const int HSHELL_WINDOWCREATED = 1;\r\n        public const int HSHELL_WINDOWDESTROYED = 2;\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        public static extern bool RegisterShellHookWindow(IntPtr hWnd);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern uint RegisterWindowMessageW([MarshalAs(UnmanagedType.LPWStr)] string msg);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppMuteActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetAppMuteActionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public DeviceListViewModel Device { get; }\r\n        public AppListViewModel App { get; }\r\n\r\n        private SetAppMuteAction _action;\r\n\r\n        public SetAppMuteActionViewModel(SetAppMuteAction action) : base(action)\r\n        {\r\n            _action = action;\r\n\r\n            Option = new OptionViewModel(action, nameof(action.Option));\r\n            App = new AppListViewModel(action, AppListViewModel.AppKind.EveryApp | AppListViewModel.AppKind.ForegroundApp);\r\n            Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.DefaultPlayback);\r\n\r\n            Attach(Option);\r\n            Attach(App);\r\n            Attach(Device);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetAppVolumeActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\nusing EarTrumpet.Actions.DataModel.Enum;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetAppVolumeActionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public DeviceListViewModel Device { get; }\r\n        public AppListViewModel App { get; }\r\n        public VolumeViewModel Volume { get; }\r\n\r\n        private SetAppVolumeAction _action;\r\n\r\n        public SetAppVolumeActionViewModel(SetAppVolumeAction action) : base(action)\r\n        {\r\n            _action = action;\r\n\r\n            Option = new OptionViewModel(action, nameof(action.Option));\r\n            App = new AppListViewModel(action, AppListViewModel.AppKind.EveryApp | AppListViewModel.AppKind.ForegroundApp);\r\n            Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.DefaultPlayback);\r\n            Volume = new VolumeViewModel(action);\r\n\r\n            Attach(Option);\r\n            Attach(App);\r\n            Attach(Device);\r\n            Attach(Volume);\r\n        }\r\n\r\n        public override string LinkText\r\n        {\r\n            get\r\n            {\r\n                if (_action.Option == SetVolumeKind.Set)\r\n                {\r\n                    return base.LinkText;\r\n                }\r\n                else\r\n                {\r\n                    return Properties.Resources.SetAppVolumeAction_LinkTextIncrement;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDefaultDeviceActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetDefaultDeviceActionViewModel : PartViewModel\r\n    {\r\n        public DeviceListViewModel Device { get; }\r\n\r\n        public SetDefaultDeviceActionViewModel(SetDefaultDeviceAction action) : base(action)\r\n        {\r\n            Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.Recording);\r\n            Attach(Device);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceMuteActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetDeviceMuteActionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public DeviceListViewModel Device { get; }\r\n\r\n        private SetDeviceMuteAction _action;\r\n\r\n        public SetDeviceMuteActionViewModel(SetDeviceMuteAction action) : base(action)\r\n        {\r\n            _action = action;\r\n            Option = new OptionViewModel(action, nameof(action.Option));\r\n            Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.Recording | DeviceListViewModel.DeviceListKind.DefaultPlayback);\r\n\r\n            Attach(Option);\r\n            Attach(Device);\r\n        }\r\n\r\n        public override string LinkText\r\n        {\r\n            get\r\n            {\r\n                if (_action.Option == DataModel.Enum.MuteKind.ToggleMute)\r\n                {\r\n                    return Properties.Resources.SetDeviceMuteAction_LinkTextToggle;\r\n                }\r\n                else\r\n                {\r\n                    return base.LinkText;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetDeviceVolumeActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Enum;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetDeviceVolumeActionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public DeviceListViewModel Device { get; }\r\n        public VolumeViewModel Volume { get; }\r\n\r\n        private SetDeviceVolumeAction _action;\r\n\r\n        public SetDeviceVolumeActionViewModel(SetDeviceVolumeAction action) : base(action)\r\n        {\r\n            _action = action;\r\n            Option = new OptionViewModel(action, nameof(action.Option));\r\n            Device = new DeviceListViewModel(action, DeviceListViewModel.DeviceListKind.Recording | DeviceListViewModel.DeviceListKind.DefaultPlayback);\r\n            Volume = new VolumeViewModel(action);\r\n\r\n            Attach(Option);\r\n            Attach(Device);\r\n            Attach(Volume);\r\n        }\r\n\r\n        public override string LinkText\r\n        {\r\n            get\r\n            {\r\n                if (_action.Option == SetVolumeKind.Set)\r\n                {\r\n                    return base.LinkText;\r\n                }\r\n                else\r\n                {\r\n                    return Properties.Resources.SetDeviceVolumeAction_LinkTextIncrement;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Actions/SetVariableActionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Actions\r\n{\r\n    class SetVariableActionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public TextViewModel Text { get; }\r\n\r\n        public SetVariableActionViewModel(SetVariableAction action) : base(action)\r\n        {\r\n            Option = new OptionViewModel(action, nameof(action.Value));\r\n            Text = new TextViewModel(action);\r\n\r\n            Attach(Option);\r\n            Attach(Text);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/ActionsCategoryViewModel.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class ActionsCategoryViewModel : SettingsCategoryViewModel\r\n    {\r\n        public ActionsCategoryViewModel()\r\n            : base(Properties.Resources.MyActionsText, \"\\xE950\", Properties.Resources.AddonDescriptionText, EarTrumpetActionsAddon.Current.Manifest.Id, new ObservableCollection<SettingsPageViewModel>())\r\n        {\r\n            // Get a 'fresh' copy so that we can edit the objects and still go back later.\r\n            var actions = EarTrumpetActionsAddon.Current.Actions;\r\n            EarTrumpetActionsAddon.Current.Actions = EarTrumpetActionsAddon.Current.Actions;\r\n\r\n            Pages.AddRange(actions.Select(a => new EarTrumpetActionViewModel(this, a)));\r\n            Pages.Add(new ImportExportPageViewModel(this));\r\n\r\n            Toolbar = new ToolbarItemViewModel[] { new ToolbarItemViewModel{\r\n                Command = new RelayCommand(() =>\r\n                {\r\n                    var vm = new EarTrumpetActionViewModel(this, new EarTrumpetAction { DisplayName = Properties.Resources.NewActionText });\r\n                    vm.IsWorkSaved = false;\r\n                    vm.IsPersisted = false;\r\n\r\n                    vm.PropertyChanged += (_, e) =>\r\n                    {\r\n                        if (e.PropertyName == nameof(vm.IsSelected) &&\r\n                            vm.IsSelected && !Pages.Contains(vm))\r\n                        {\r\n                            Pages.Insert(0, vm);\r\n                        }\r\n                    };\r\n\r\n                    Selected = vm;\r\n                }),\r\n                DisplayName = Properties.Resources.NewActionText,\r\n                Glyph = \"\\xE948\",\r\n                GlyphFontSize = 15,\r\n            } };\r\n\r\n            if (Pages.Count == 2)\r\n            {\r\n                Toolbar[0].Command.Execute(null);\r\n            }\r\n        }\r\n\r\n        internal void ReloadSavedPages()\r\n        {\r\n            foreach (var item in Pages.Where(p => p is EarTrumpetActionViewModel).ToList())\r\n            {\r\n                Pages.Remove(item);\r\n            }\r\n\r\n            Pages.InsertRange(0, new System.Collections.ObjectModel.ObservableCollection<SettingsPageViewModel>(EarTrumpetActionsAddon.Current.Actions.Select(a => new EarTrumpetActionViewModel(this, a))));\r\n            Selected = Pages[0];\r\n        }\r\n\r\n        public void Delete(EarTrumpetActionViewModel earTrumpetActionViewModel, bool promptOverride = false)\r\n        {\r\n            Action doRemove = () =>\r\n            {\r\n                var actions = EarTrumpetActionsAddon.Current.Actions.ToList();\r\n                if (actions.Any(a => a.Id == earTrumpetActionViewModel.Id))\r\n                {\r\n                    actions.Remove(item => item.Id == earTrumpetActionViewModel.Id);\r\n                }\r\n                EarTrumpetActionsAddon.Current.Actions = actions.ToArray();\r\n\r\n                if (Pages.Any(a => a == earTrumpetActionViewModel))\r\n                {\r\n                    Pages.Remove(earTrumpetActionViewModel);\r\n                }\r\n            };\r\n\r\n            if (earTrumpetActionViewModel.IsPersisted && !promptOverride)\r\n            {\r\n                _parent.ShowDialog(Properties.Resources.DeleteActionDialogTitle, Properties.Resources.DeleteActionDialogText,\r\n                    Properties.Resources.DeleteActionDialogYesText, Properties.Resources.DeleteActionDialogNoText, doRemove, () => { });\r\n            }\r\n            else\r\n            {\r\n                doRemove();\r\n            }\r\n        }\r\n\r\n        public void Save(EarTrumpetActionViewModel earTrumpetActionViewModel)\r\n        {\r\n            var actions = EarTrumpetActionsAddon.Current.Actions.ToList();\r\n            if (actions.Any(a => a.Id == earTrumpetActionViewModel.Id))\r\n            {\r\n                actions.Remove(item => item.Id == earTrumpetActionViewModel.Id);\r\n            }\r\n            actions.Insert(0, earTrumpetActionViewModel.GetAction());\r\n            EarTrumpetActionsAddon.Current.Actions = actions.ToArray();\r\n            earTrumpetActionViewModel.IsWorkSaved = true;\r\n\r\n            if (Pages.Any(a => a == earTrumpetActionViewModel))\r\n            {\r\n                Pages.Remove(earTrumpetActionViewModel);\r\n            }\r\n            Pages.Insert(0, earTrumpetActionViewModel);\r\n            Selected = Pages[0];\r\n        }\r\n\r\n        public void CompleteNavigation(NavigationCookie cookie)\r\n        {\r\n            _parent.CompleteNavigation(cookie);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/AppListViewModel.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.DataModel;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls.Primitives;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.DataModel.Audio;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class AppListViewModel : BindableBase\r\n    {\r\n        [Flags]\r\n        public enum AppKind\r\n        {\r\n            Default = 0,\r\n            EveryApp = 1,\r\n            ForegroundApp = 2,\r\n        }\r\n\r\n        public ObservableCollection<IAppItemViewModel> All { get; }\r\n\r\n        private IPartWithApp _part;\r\n\r\n        public AppListViewModel(IPartWithApp part, AppKind flags)\r\n        {\r\n            _part = part;\r\n            All = new ObservableCollection<IAppItemViewModel>();\r\n\r\n            GetApps(flags);\r\n\r\n            if (part.App?.Id == null)\r\n            {\r\n                _part.App = new AppRef { Id = All[0].Id };\r\n            }\r\n        }\r\n\r\n        public void OnInvoked(object sender, IAppItemViewModel vivewModel)\r\n        {\r\n            _part.App = new AppRef { Id = vivewModel.Id };\r\n            RaisePropertyChanged(\"\");  // Signal change so ToString will be called.\r\n\r\n            var popup = ((DependencyObject)sender).FindVisualParent<Popup>();\r\n            popup.IsOpen = false;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var existing = All.FirstOrDefault(d => d.Id == _part.App?.Id);\r\n            if (existing != null)\r\n            {\r\n                return existing.DisplayName;\r\n            }\r\n            return _part.App?.Id;\r\n        }\r\n\r\n        public void GetApps(AppKind flags)\r\n        {\r\n            if ((flags & AppKind.EveryApp) == AppKind.EveryApp)\r\n            {\r\n                All.Add(new EveryAppViewModel());\r\n            }\r\n\r\n            if ((flags & AppKind.ForegroundApp) == AppKind.ForegroundApp)\r\n            {\r\n                All.Add(new ForegroundAppViewModel());\r\n            }\r\n\r\n            foreach (var app in WindowsAudioFactory.Create(AudioDeviceKind.Playback).Devices.SelectMany(d => d.Groups).Distinct(IAudioDeviceSessionComparer.Instance).OrderBy(d => d.DisplayName).OrderBy(d => d.DisplayName))\r\n            {\r\n                All.Add(new SettingsAppItemViewModel(app));\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Conditions/DefaultDeviceConditionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Conditions\r\n{\r\n    class DefaultDeviceConditionViewModel : PartViewModel\r\n    {\r\n        public DeviceListViewModel Device { get; }\r\n\r\n        public OptionViewModel Option { get; }\r\n\r\n        public DefaultDeviceConditionViewModel(DefaultDeviceCondition condition) : base(condition)\r\n        {\r\n            Option = new OptionViewModel(condition, nameof(condition.Option));\r\n            Device = new DeviceListViewModel(condition, DeviceListViewModel.DeviceListKind.Recording);\r\n\r\n            Attach(Option);\r\n            Attach(Device);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Conditions/ProcessConditionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Conditions\r\n{\r\n    class ProcessConditionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n\r\n        public TextViewModel Text { get; }\r\n\r\n        public ProcessConditionViewModel(ProcessCondition condition) : base(condition)\r\n        {\r\n            Option = new OptionViewModel(condition, nameof(condition.Option));\r\n            Text = new TextViewModel(condition);\r\n\r\n            Attach(Option);\r\n            Attach(Text);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Conditions/VariableConditionViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Conditions\r\n{\r\n    class VariableConditionViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public TextViewModel Text { get; }\r\n\r\n        public VariableConditionViewModel(VariableCondition condition) : base(condition)\r\n        {\r\n            Option = new OptionViewModel(condition, nameof(condition.Value));\r\n            Text = new TextViewModel(condition);\r\n\r\n            Attach(Option);\r\n            Attach(Text);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/DefaultPlaybackDeviceViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.WindowsAudio;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class DefaultPlaybackDeviceViewModel : DeviceViewModelBase\r\n    {\r\n        public DefaultPlaybackDeviceViewModel()\r\n        {\r\n            DisplayName = Properties.Resources.DefaultPlaybackDeviceText;\r\n            Kind = AudioDeviceKind.Playback.ToString();\r\n            GroupName = Properties.Resources.PlaybackDeviceGroupText;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/DeviceListViewModel.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Actions.DataModel;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls.Primitives;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class DeviceListViewModel : BindableBase\r\n    {\r\n        [Flags]\r\n        public enum DeviceListKind\r\n        {\r\n            Playback = 0,\r\n            Recording = 1,\r\n            DefaultPlayback = 2\r\n        }\r\n\r\n        public ObservableCollection<DeviceViewModelBase> All { get; }\r\n\r\n        public void OnInvoked(object sender, DeviceViewModelBase vivewModel)\r\n        {\r\n            _part.Device = new Device { Id = vivewModel.Id, Kind = vivewModel.Kind };\r\n            RaisePropertyChanged(\"\");  // Signal change so ToString will be called.\r\n\r\n            var popup = ((DependencyObject)sender).FindVisualParent<Popup>();\r\n            popup.IsOpen = false;\r\n        }\r\n\r\n        private IPartWithDevice _part;\r\n\r\n        public DeviceListViewModel(IPartWithDevice part, DeviceListKind flags)\r\n        {\r\n            _part = part;\r\n            All = new ObservableCollection<DeviceViewModelBase>();\r\n            GetDevices(flags);\r\n\r\n            if (_part.Device == null)\r\n            {\r\n                _part.Device = new Device { Id = All[0].Id, Kind = All[0].Kind };\r\n            }\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            var existing = All.FirstOrDefault(d => d.Id == _part.Device?.Id);\r\n            if (existing != null)\r\n            {\r\n                return existing.DisplayName;\r\n            }\r\n            return _part.Device?.Id;\r\n        }\r\n\r\n        void GetDevices(DeviceListKind flags)\r\n        {\r\n            bool isRecording = (flags & DeviceListKind.Recording) == DeviceListKind.Recording;\r\n\r\n            if ((flags & DeviceListKind.DefaultPlayback) == DeviceListKind.DefaultPlayback)\r\n            {\r\n                All.Add(new DefaultPlaybackDeviceViewModel());\r\n            }\r\n\r\n            foreach (var device in WindowsAudioFactory.Create(AudioDeviceKind.Playback).Devices.OrderBy(d => d.DisplayName))\r\n            {\r\n                All.Add(new DeviceViewModel(device));\r\n            }\r\n\r\n            if (isRecording)\r\n            {\r\n                foreach (var device in WindowsAudioFactory.Create(AudioDeviceKind.Recording).Devices.OrderBy(d => d.DisplayName))\r\n                {\r\n                    All.Add(new DeviceViewModel(device));\r\n                }\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/DeviceViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.UI.Helpers;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class DeviceViewModel : DeviceViewModelBase, IAppIconSource\r\n    {\r\n        public bool IsDesktopApp => true;\r\n        public string IconPath => _device.IconPath;\r\n        public string DeviceDescription => ((IAudioDeviceWindowsAudio)_device).DeviceDescription;\r\n        public string EnumeratorName => ((IAudioDeviceWindowsAudio)_device).EnumeratorName;\r\n        public string InterfaceName => ((IAudioDeviceWindowsAudio)_device).InterfaceName;\r\n\r\n        private readonly IAudioDevice _device;\r\n\r\n        public DeviceViewModel(IAudioDevice device)\r\n        {\r\n            _device = device;\r\n            Id = _device.Id;\r\n            DisplayName = _device.DisplayName;\r\n            Kind = _device.Parent.Kind;\r\n\r\n            GroupName = _device.Parent.Kind == AudioDeviceKind.Playback.ToString() ?\r\n                Properties.Resources.PlaybackDeviceGroupText :\r\n                Properties.Resources.RecordingDeviceGroupText;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/DeviceViewModelBase.cs",
    "content": "﻿namespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class DeviceViewModelBase : BindableBase\r\n    {\r\n        public string DisplayName { get; set; }\r\n        public string GroupName { get; set; }\r\n        public string Id { get; set; }\r\n        public string Kind { get; set; }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/EarTrumpetActionPageHeaderViewModel.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\nusing System.ComponentModel;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class EarTrumpetActionPageHeaderViewModel : SettingsPageHeaderViewModel\r\n    {\r\n        EarTrumpetActionViewModel _parent;\r\n\r\n        public ToolbarItemViewModel[] Toolbar => _parent.Toolbar;\r\n        public string DisplayName { get => _parent.DisplayName; set => _parent.DisplayName = value; }\r\n        public bool IsEditClicked { get => _parent.IsEditClicked; set => _parent.IsEditClicked = value; }\r\n        public bool IsWorkSaved => _parent.IsWorkSaved;\r\n        public EarTrumpetActionPageHeaderViewModel(EarTrumpetActionViewModel parent) : base(parent)\r\n        {\r\n            _parent = parent;\r\n            ((INotifyPropertyChanged)_parent).PropertyChanged += EarTrumpetActionPageHeaderViewModel_PropertyChanged;\r\n        }\r\n\r\n        private void EarTrumpetActionPageHeaderViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(e.PropertyName);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/EarTrumpetActionViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.DataModel;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class EarTrumpetActionViewModel : SettingsPageViewModel\r\n    {\r\n        public ToolbarItemViewModel[] Toolbar { get; private set; }\r\n        public ICommand Delete => new RelayCommand(() => _parent.Delete(this));\r\n        public Guid Id => _action.Id;\r\n\r\n        public string DisplayName\r\n        {\r\n            get => _action.DisplayName;\r\n            set\r\n            {\r\n                if (DisplayName != value)\r\n                {\r\n                    _action.DisplayName = value;\r\n                    RaisePropertyChanged(nameof(DisplayName));\r\n                    Title = DisplayName;\r\n\r\n                    IsWorkSaved = false;\r\n                    IsPersisted = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        private bool _isEditClicked;\r\n        public bool IsEditClicked\r\n        {\r\n            get => _isEditClicked;\r\n            set\r\n            {\r\n                if (_isEditClicked != value)\r\n                {\r\n                    _isEditClicked = value;\r\n                    RaisePropertyChanged(nameof(IsEditClicked));\r\n\r\n                    // Immediately unset the value so we can go again.\r\n                    _isEditClicked = false;\r\n                    RaisePropertyChanged(nameof(IsEditClicked));\r\n                }\r\n            }\r\n        }\r\n\r\n        private bool _isWorkSaved;\r\n        public bool IsWorkSaved\r\n        {\r\n            get => _isWorkSaved;\r\n            set\r\n            {\r\n                if (_isWorkSaved != value)\r\n                {\r\n                    _isWorkSaved = value;\r\n                    RaisePropertyChanged(nameof(IsWorkSaved));\r\n                }\r\n            }\r\n        }\r\n\r\n        public List<ContextMenuItem> NewTriggers => PartViewModelFactory.Create<BaseTrigger>().Select(t => MakeItem(t)).OrderBy(t => t.DisplayName).ToList();\r\n        public List<ContextMenuItem> NewConditions => PartViewModelFactory.Create<BaseCondition>().Select(t => MakeItem(t)).OrderBy(t => t.DisplayName).ToList();\r\n        public List<ContextMenuItem> NewActions => PartViewModelFactory.Create<BaseAction>().Select(t => MakeItem(t)).OrderBy(t => t.DisplayName).ToList();\r\n\r\n        public ObservableCollection<PartViewModel> Triggers { get; private set; }\r\n        public ObservableCollection<PartViewModel> Conditions { get; private set; }\r\n        public ObservableCollection<PartViewModel> Actions { get; private set; }\r\n        public bool IsPersisted { get; set; } = true;\r\n\r\n        private EarTrumpetAction _action;\r\n        private ActionsCategoryViewModel _parent;\r\n\r\n        public EarTrumpetActionViewModel(ActionsCategoryViewModel parent, EarTrumpetAction action) : base(\"Saved Actions\")\r\n        {\r\n            _parent = parent;\r\n            Reset(action);\r\n            Header = new EarTrumpetActionPageHeaderViewModel(this);\r\n            Toolbar = new ToolbarItemViewModel[]\r\n            {\r\n                new ToolbarItemViewModel\r\n                {\r\n                     Command = new RelayCommand(() =>\r\n                     {\r\n                         IsEditClicked = true;\r\n                     }),\r\n                     DisplayName = Properties.Resources.ToolbarEditText,\r\n                     Glyph = \"\\xE70F\",\r\n                     GlyphFontSize = 15,\r\n                },\r\n                new ToolbarItemViewModel\r\n                {\r\n                     Command = new RelayCommand(() =>\r\n                     {\r\n                         IsPersisted = true;\r\n                         _parent.Save(this);\r\n                     }),\r\n                     DisplayName = Properties.Resources.ToolbarSaveText,\r\n                     Id = \"Save\",\r\n                     Glyph = \"\\xE105\",\r\n                     GlyphFontSize = 15,\r\n                },\r\n            };\r\n\r\n            Glyph = \"\\xE1CE\";\r\n            Title = DisplayName;\r\n        }\r\n\r\n        public void Reset(EarTrumpetAction action)\r\n        {\r\n            _action = action;\r\n\r\n            Title = DisplayName;\r\n            Triggers = new ObservableCollection<PartViewModel>(action.Triggers.Select(t => CreatePartViewModel(t)));\r\n            Conditions = new ObservableCollection<PartViewModel>(action.Conditions.Select(t => CreatePartViewModel(t)));\r\n            Actions = new ObservableCollection<PartViewModel>(action.Actions.Select(t => CreatePartViewModel(t)));\r\n\r\n            Triggers.CollectionChanged += Parts_CollectionChanged;\r\n            Conditions.CollectionChanged += Parts_CollectionChanged;\r\n            Actions.CollectionChanged += Parts_CollectionChanged;\r\n\r\n            Parts_CollectionChanged(Triggers, null);\r\n            Parts_CollectionChanged(Conditions, null);\r\n            Parts_CollectionChanged(Actions, null);\r\n            RaisePropertyChanged(nameof(Triggers));\r\n            RaisePropertyChanged(nameof(Conditions));\r\n            RaisePropertyChanged(nameof(Actions));\r\n            RaisePropertyChanged(nameof(DisplayName));\r\n            IsWorkSaved = true;\r\n        }\r\n\r\n\r\n        public override bool NavigatingFrom(NavigationCookie cookie)\r\n        {\r\n            if (!IsWorkSaved && IsPersisted)\r\n            {\r\n                _parent.ShowDialog(Properties.Resources.LeavingPageDialogTitle, Properties.Resources.LeavingPageDialogText, Properties.Resources.LeavingPageDialogYesText, () =>\r\n                {\r\n                    _parent.CompleteNavigation(cookie);\r\n\r\n                    var existing = EarTrumpetActionsAddon.Current.Actions.FirstOrDefault(a => a.Id == Id);\r\n                    if (existing == null)\r\n                    {\r\n                        _parent.Delete(this, true);\r\n                    }\r\n                    else\r\n                    {\r\n                        Reset(existing);\r\n                    }\r\n                    \r\n                }, Properties.Resources.LeavingPageDialogNoText, () => { });\r\n                return false;\r\n            }\r\n            return base.NavigatingFrom(cookie);\r\n        }\r\n\r\n        public EarTrumpetAction GetAction()\r\n        {\r\n            _action.DisplayName = DisplayName;\r\n            _action.Triggers = new ObservableCollection<BaseTrigger>(Triggers.Select(t => (BaseTrigger)t.Part));\r\n            _action.Conditions = new ObservableCollection<BaseCondition>(Conditions.Select(t => (BaseCondition)t.Part));\r\n            _action.Actions = new ObservableCollection<BaseAction>(Actions.Select(t => (BaseAction)t.Part));\r\n            return _action;\r\n        }\r\n\r\n        private void Parts_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            var col = (ObservableCollection<PartViewModel>)sender;\r\n\r\n            for (var i = 0; i < col.Count; i++)\r\n            {\r\n                col[i].IsShowingAdditionalText = i != 0;\r\n            }\r\n            IsWorkSaved = false;\r\n            IsPersisted = true;\r\n        }\r\n\r\n        private ContextMenuItem MakeItem(PartViewModel part)\r\n        {\r\n            return new ContextMenuItem\r\n            {\r\n                DisplayName = part.AddText,\r\n                Command = new RelayCommand(() =>\r\n                {\r\n                    InitializeViewModel(part);\r\n                    GetListFromPart(part).Add(part);\r\n                }),\r\n            };\r\n        }\r\n\r\n        private PartViewModel CreatePartViewModel(Part part)\r\n        {\r\n            var ret = PartViewModelFactory.Create(part);\r\n            InitializeViewModel(ret);\r\n            return ret;\r\n        }\r\n\r\n        private void InitializeViewModel(PartViewModel part)\r\n        {\r\n            part.PropertyChanged += (_, __) => IsWorkSaved = false;\r\n            part.Remove = new RelayCommand(() => GetListFromPart(part).Remove(part));\r\n        }\r\n\r\n        private ObservableCollection<PartViewModel> GetListFromPart(PartViewModel part)\r\n        {\r\n            if (part.Part is BaseTrigger)\r\n            {\r\n                return Triggers;\r\n            }\r\n            else if (part.Part is BaseCondition)\r\n            {\r\n                return Conditions;\r\n            }\r\n            else if (part.Part is BaseAction)\r\n            {\r\n                return Actions;\r\n            }\r\n            else\r\n            {\r\n                throw new NotImplementedException();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/EveryAppViewModel.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class EveryAppViewModel : SettingsAppItemViewModel\r\n    {\r\n        public EveryAppViewModel()\r\n        {\r\n            DisplayName = Properties.Resources.EveryAppText;\r\n            Id = AppRef.EveryAppId;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/ForegroundAppViewModel.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class ForegroundAppViewModel : SettingsAppItemViewModel\r\n    {\r\n        public ForegroundAppViewModel()\r\n        {\r\n            Id = AppRef.ForegroundAppId;\r\n            DisplayName = Properties.Resources.ForegroundAppText;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/HotkeyViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class HotkeyViewModel : BindableBase\r\n    {\r\n        public EarTrumpet.UI.ViewModels.HotkeyViewModel Hotkey { get; }\r\n\r\n        private HotkeyTrigger _trigger;\r\n\r\n        public HotkeyViewModel(HotkeyTrigger trigger)\r\n        {\r\n            _trigger = trigger;\r\n            Hotkey = new EarTrumpet.UI.ViewModels.HotkeyViewModel(_trigger.Option, (newHotkey) =>\r\n            {\r\n                _trigger.Option = newHotkey;\r\n                RaisePropertyChanged(nameof(Hotkey));\r\n            });\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            if (_trigger.Option.IsEmpty)\r\n            {\r\n                return ResolveResource(\"EmptyText\");\r\n            }\r\n            else\r\n            {\r\n                return _trigger.Option.ToString();\r\n            }\r\n        }\r\n\r\n        private string ResolveResource(string suffix)\r\n        {\r\n            var res = $\"{_trigger.GetType().Name}_{suffix}\";\r\n            var ret = Properties.Resources.ResourceManager.GetString(res);\r\n            if (string.IsNullOrWhiteSpace(ret))\r\n            {\r\n                throw new NotImplementedException($\"Missing resource: {res}\");\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/IOptionViewModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    interface IOptionViewModel\r\n    {\r\n        ObservableCollection<Option> All { get; }\r\n        Option Selected { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/ImportExportPageViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class ImportExportPageViewModel : SettingsPageViewModel\r\n    {\r\n        public ICommand Import { get; }\r\n        public ICommand Export { get; }\r\n\r\n        ActionsCategoryViewModel _parent;\r\n\r\n        public ImportExportPageViewModel(ActionsCategoryViewModel parent) : base(DefaultManagementGroupName)\r\n        {\r\n            _parent = parent;\r\n            Title = Properties.Resources.ImportAndExportTitle;\r\n            Glyph = \"\\xE148\";\r\n\r\n            Import = new RelayCommand(OnImport);\r\n            Export = new RelayCommand(OnExport);\r\n        }\r\n\r\n        void OnImport()\r\n        {\r\n            var dlg = new Microsoft.Win32.OpenFileDialog();\r\n            dlg.FileName = \".eta-xml\";\r\n            dlg.DefaultExt = \".eta-xml\";\r\n            dlg.Filter = $\"{Properties.Resources.EtaXmlFileText}|*.eta-xml\";\r\n\r\n            if (dlg.ShowDialog() == true)\r\n            {\r\n                try\r\n                {\r\n                    EarTrumpetActionsAddon.Current.Import(dlg.FileName);\r\n                    _parent.ReloadSavedPages();\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine(ex);\r\n                }\r\n            }\r\n        }\r\n\r\n        void OnExport()\r\n        {\r\n            var dlg = new Microsoft.Win32.SaveFileDialog();\r\n            dlg.FileName = \".eta-xml\";\r\n            dlg.DefaultExt = \".eta-xml\";\r\n            dlg.Filter = $\"{Properties.Resources.EtaXmlFileText}|*.eta-xml\";\r\n\r\n            if (dlg.ShowDialog() == true)\r\n            {\r\n                try\r\n                {\r\n                    File.WriteAllText(dlg.FileName, EarTrumpetActionsAddon.Current.Export(), Encoding.Unicode);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine(ex);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Option.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class Option : IEquatable<Option>\r\n    {\r\n        public string DisplayName { get; set; }\r\n        public object Value { get; set; }\r\n\r\n        public Option(string displayName, object value)\r\n        {\r\n            DisplayName = displayName;\r\n            Value = value;\r\n        }\r\n\r\n        public bool Equals(Option other)\r\n        {\r\n            return other.DisplayName.Equals(DisplayName);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/OptionViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class OptionViewModel : BindableBase, IOptionViewModel\r\n    {\r\n        public ObservableCollection<Option> All { get; }\r\n\r\n        public Option Selected\r\n        {\r\n            get\r\n            {\r\n                var value = (int)_target.GetType().GetProperty(_property).GetValue(_target);\r\n                return All.First(o => o.Value.Equals(value));\r\n            }\r\n            set\r\n            {\r\n                if (Selected != value)\r\n                {\r\n                    _target.GetType().GetProperty(_property).SetValue(_target, value.Value);\r\n                    RaisePropertyChanged(nameof(Selected));\r\n                }\r\n            }\r\n        }\r\n\r\n        private readonly object _target;\r\n        private readonly string _property;\r\n\r\n        public OptionViewModel(object target, string property)\r\n        {\r\n            _target = target;\r\n            _property = property;\r\n\r\n            var propType = target.GetType().GetProperty(property).PropertyType;\r\n            All = new ObservableCollection<Option>(Enum.GetValues(propType).Cast<int>().Select(v => \r\n            new Option(GetLocalizedString(Enum.GetName(propType, v)), v)));\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return Selected?.DisplayName;\r\n        }\r\n\r\n        private string GetLocalizedString(string name)\r\n        {\r\n            var propType = _target.GetType().GetProperty(_property).PropertyType;\r\n            var resourceName = $\"{propType.Name}_{name}\";\r\n            var ret = Properties.Resources.ResourceManager.GetString(resourceName);\r\n            if (string.IsNullOrWhiteSpace(ret))\r\n            {\r\n                throw new NotImplementedException(resourceName);\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/PartViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel;\r\nusing EarTrumpet.Actions.DataModel.Serialization;\r\nusing System;\r\nusing System.ComponentModel;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class PartViewModel : BindableBase\r\n    {\r\n        public Part Part { get; }\r\n        public string AddText => ResolveResource(\"AddText\");\r\n        public virtual string LinkText => ResolveResource(\"LinkText\");\r\n\r\n        private string _additionalText;\r\n        public string AdditionalText\r\n        {\r\n            get => _additionalText;\r\n            set\r\n            {\r\n                _additionalText = value;\r\n                RaisePropertyChanged(nameof(AdditionalText));\r\n            }\r\n        }\r\n\r\n        public bool IsShowingAdditionalText\r\n        {\r\n            get => !string.IsNullOrWhiteSpace(_additionalText);\r\n            set\r\n            {\r\n                if (value)\r\n                {\r\n                    if (Part is BaseTrigger)\r\n                    {\r\n                        AdditionalText = Properties.Resources.TriggerAdditionalText;\r\n                    }\r\n                    else if (Part is BaseCondition)\r\n                    {\r\n                        AdditionalText = Properties.Resources.ConditionAdditionalText;\r\n                    }\r\n                    else\r\n                    {\r\n                        AdditionalText = Properties.Resources.ActionAdditionalText;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    AdditionalText = null;\r\n                }\r\n            }\r\n        }\r\n\r\n        public ICommand Remove { get; set; }\r\n\r\n        public PartViewModel(Part part)\r\n        {\r\n            Part = part;\r\n        }\r\n\r\n        protected void Attach(INotifyPropertyChanged obj)\r\n        {\r\n            obj.PropertyChanged += (s, e) =>\r\n            {\r\n                RaisePropertyChanged(e.PropertyName);\r\n                RaisePropertyChanged(nameof(LinkText));\r\n            };\r\n        }\r\n\r\n        private string ResolveResource(string suffix)\r\n        {\r\n            var res = $\"{Part.GetType().Name}_{suffix}\";\r\n            var ret = Properties.Resources.ResourceManager.GetString(res);\r\n            if (string.IsNullOrWhiteSpace(ret))\r\n            {\r\n                throw new NotImplementedException($\"Missing resource: {res}\");\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/PartViewModelFactory.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class PartViewModelFactory\r\n    {\r\n        class TypeInfo\r\n        {\r\n            public Type Type { get; set; }\r\n            public Type ConstructorType { get; set; }\r\n        }\r\n\r\n        private static List<TypeInfo> s_partViewModelClasses;\r\n\r\n        public static PartViewModel Create(Part part)\r\n        {\r\n            PopulateCache();\r\n\r\n            var type = (s_partViewModelClasses.First(t => t.ConstructorType == part.GetType()));\r\n            return (PartViewModel)Activator.CreateInstance(type.Type, part);\r\n        }\r\n\r\n        public static IEnumerable<PartViewModel> Create<T>() where T : Part\r\n        {\r\n            PopulateCache();\r\n\r\n            return s_partViewModelClasses.Where(info =>\r\n                (typeof(T).IsAssignableFrom(info.ConstructorType))).Select(p => Create(p));\r\n        }\r\n\r\n        private static PartViewModel Create(TypeInfo info)\r\n        {\r\n            return (PartViewModel)Activator.CreateInstance(info.Type, args: (Activator.CreateInstance(info.ConstructorType)));\r\n        }\r\n\r\n        private static void PopulateCache()\r\n        {\r\n            if (s_partViewModelClasses == null)\r\n            {\r\n                s_partViewModelClasses = typeof(PartViewModel).Assembly.GetTypes().Where(t =>\r\n                    typeof(PartViewModel).IsAssignableFrom(t)).Select(t =>\r\n                        new TypeInfo\r\n                        {\r\n                            Type = t,\r\n                            ConstructorType = t.GetConstructors()[0].GetParameters()[0].ParameterType,\r\n                        }).ToList();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/TextViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    class TextViewModel : BindableBase\r\n    {\r\n        public string PromptText => ResolveResource(\"PromptText\");\r\n\r\n        public string Text\r\n        {\r\n            get => _part.Text;\r\n            set\r\n            {\r\n                _part.Text = value;\r\n                RaisePropertyChanged(nameof(Text));\r\n            }\r\n        }\r\n\r\n        private IPartWithText _part;\r\n\r\n        public TextViewModel(IPartWithText part)\r\n        {\r\n            _part = part;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            if (string.IsNullOrWhiteSpace(_part.Text))\r\n            {\r\n                return ResolveResource(\"EmptyText\");\r\n            }\r\n            else\r\n            { \r\n                return _part.Text;\r\n            }\r\n        }\r\n\r\n        private string ResolveResource(string suffix)\r\n        {\r\n            var res = $\"{_part.GetType().Name}_{suffix}\";\r\n            var ret = Properties.Resources.ResourceManager.GetString(res);\r\n            if (string.IsNullOrWhiteSpace(ret))\r\n            {\r\n                throw new NotImplementedException($\"Missing resource: {res}\");\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/AppEventTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class AppEventTriggerViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n\r\n        public DeviceListViewModel Device { get; }\r\n\r\n        public AppListViewModel App { get; }\r\n\r\n        public AppEventTriggerViewModel(AppEventTrigger trigger) : base(trigger)\r\n        {\r\n            Option = new OptionViewModel(trigger, nameof(trigger.Option));\r\n            Device = new DeviceListViewModel(trigger, DeviceListViewModel.DeviceListKind.DefaultPlayback);\r\n            App = new AppListViewModel(trigger, AppListViewModel.AppKind.Default);\r\n\r\n            Attach(Option);\r\n            Attach(Device);\r\n            Attach(App);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/ContextMenuTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class ContextMenuTriggerViewModel : PartViewModel\r\n    {\r\n        public ContextMenuTriggerViewModel(ContextMenuTrigger trigger) : base(trigger) { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/DeviceEventTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class DeviceEventTriggerViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n\r\n        public DeviceListViewModel Device { get; }\r\n\r\n        public DeviceEventTriggerViewModel(DeviceEventTrigger trigger) : base(trigger)\r\n        {\r\n            Option = new OptionViewModel(trigger, nameof(trigger.Option));\r\n            Device = new DeviceListViewModel(trigger, DeviceListViewModel.DeviceListKind.DefaultPlayback | DeviceListViewModel.DeviceListKind.Recording);\r\n\r\n            Attach(Option);\r\n            Attach(Device);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/EventTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class EventTriggerViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n\r\n        public EventTriggerViewModel(EventTrigger trigger) : base(trigger)\r\n        {\r\n            Option = new OptionViewModel(trigger, nameof(trigger.Option));\r\n            Attach(Option);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/HotkeyTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class HotkeyTriggerViewModel : PartViewModel\r\n    {\r\n        public HotkeyViewModel Hotkey { get; }\r\n\r\n        private HotkeyTrigger _trigger;\r\n\r\n        public HotkeyTriggerViewModel(HotkeyTrigger trigger) : base(trigger)\r\n        {\r\n            _trigger = trigger;\r\n\r\n            Hotkey = new HotkeyViewModel(trigger);\r\n            Attach(Hotkey);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/Triggers/ProcessTriggerViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel.Serialization;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel.Triggers\r\n{\r\n    class ProcessTriggerViewModel : PartViewModel\r\n    {\r\n        public OptionViewModel Option { get; }\r\n        public TextViewModel Text { get; }\r\n\r\n        public ProcessTriggerViewModel(ProcessTrigger trigger) : base(trigger)\r\n        {\r\n            Option = new OptionViewModel(trigger, nameof(trigger.Option));\r\n            Text = new TextViewModel(trigger);\r\n\r\n            Attach(Option);\r\n            Attach(Text);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Addons/EarTrumpet.Actions/ViewModel/VolumeViewModel.cs",
    "content": "﻿using EarTrumpet.Actions.DataModel;\r\n\r\nnamespace EarTrumpet.Actions.ViewModel\r\n{\r\n    public class VolumeViewModel : BindableBase\r\n    {\r\n        public int Volume\r\n        {\r\n            get => (int)_part.Volume;\r\n            set\r\n            {\r\n                _part.Volume = value;\r\n                RaisePropertyChanged(nameof(Volume));\r\n            }\r\n        }\r\n\r\n        private IPartWithVolume _part;\r\n        public VolumeViewModel(IPartWithVolume part)\r\n        {\r\n            _part = part;\r\n        }\r\n\r\n        public override string ToString()\r\n        {\r\n            return $\"{Volume}%\";\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n    <configSections>\r\n\t\t<section name=\"bugsnag\" type=\"Bugsnag.ConfigurationSection.Configuration, Bugsnag.ConfigurationSection\" />\r\n    </configSections>\r\n    <bugsnag apiKey=\"{bugsnag.apikey}\" />\r\n    <startup>\r\n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.2\" />\r\n    </startup>\r\n    <runtime>\r\n        <AppContextSwitchOverrides value=\"Switch.System.Windows.DoNotScaleForDpiChanges=false\" />\r\n        <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\r\n            <dependentAssembly>\r\n                <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\r\n                <bindingRedirect oldVersion=\"0.0.0.0-12.0.0.0\" newVersion=\"12.0.0.0\" />\r\n            </dependentAssembly>\r\n        </assemblyBinding>\r\n    </runtime>\r\n</configuration>\r\n"
  },
  {
    "path": "EarTrumpet/App.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\r\n    <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\r\n        <application>\r\n            <!-- Windows 10 -->\r\n            <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/>\r\n        </application>\r\n    </compatibility>\r\n    <dependency>\r\n        <dependentAssembly>\r\n            <assemblyIdentity\r\n                type=\"win32\"\r\n                name=\"Microsoft.Windows.Common-Controls\"\r\n                version=\"6.0.0.0\"\r\n                processorArchitecture=\"*\"\r\n                publicKeyToken=\"6595b64144ccf1df\"\r\n                language=\"*\" />\r\n        </dependentAssembly>\r\n    </dependency>\r\n    <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\r\n        <windowsSettings>\r\n          <!-- The combination of below two tags have the following effect : \r\n          1) Per-Monitor for >= Windows 10 Anniversary Update\r\n          2) System < Windows 10 Anniversary Update -->\r\n            <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">PerMonitor</dpiAwareness>\r\n            <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\r\n        </windowsSettings>\r\n    </application>\r\n</assembly>\r\n"
  },
  {
    "path": "EarTrumpet/App.xaml",
    "content": "﻿<Application x:Class=\"EarTrumpet.App\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n             xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n             xmlns:b=\"clr-namespace:EarTrumpet.UI.Behaviors\"\r\n             xmlns:bcl=\"clr-namespace:System;assembly=mscorlib\"\r\n             xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n             xmlns:gif=\"https://github.com/XamlAnimatedGif/XamlAnimatedGif\"\r\n             xmlns:local=\"clr-namespace:EarTrumpet\"\r\n             xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n             xmlns:views=\"clr-namespace:EarTrumpet.UI.Views\"\r\n             xmlns:vm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n             xmlns:win=\"clr-namespace:System.Windows;assembly=PresentationFramework\"\r\n             Startup=\"OnAppStartup\">\r\n    <Application.Resources>\r\n        <ResourceDictionary>\r\n            <ResourceDictionary.MergedDictionaries>\r\n                <ResourceDictionary Source=\"UI\\Mutable.xaml\" />\r\n            </ResourceDictionary.MergedDictionaries>\r\n\r\n            <Theme:Manager x:Key=\"ThemeManager\">\r\n                <Theme:Manager.References>\r\n                    <Theme:Ref Key=\"Text\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=WindowText\" />\r\n                    <Theme:Ref Key=\"GrayText\" Value=\"Light=LightSecondaryText, Dark=LightDisabledText\" />\r\n                    <Theme:Ref Key=\"Background\" Value=\"Light=ApplicationBackgroundLightTheme, Dark=#FF151515, HighContrast=Window\" />\r\n                    <Theme:Ref Key=\"SearchClearGlyph\" Value=\"#FF4F4F4F\" />\r\n                    <Theme:Ref Key=\"AcrylicBackgroundFallback\" Value=\"Light=LightAcrylicWindowBackdropFallback, Dark=#FF1F1F1F\" />\r\n                    <Theme:Ref Key=\"PopupBackground\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"UseAccentColor\" Value=\":=Background, Flyout:=SystemAccentDark1\" />\r\n                            <Theme:Rule Value=\"Background\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                    <Theme:Ref Key=\"FlyoutThemeTrackRightBackground\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"UseAccentColor\" Value=\"ControlLightBackgroundRest/0.5\" />\r\n                            <Theme:Rule On=\"LightTheme\" Value=\"#39000000\" />\r\n                            <Theme:Rule Value=\"#39FFFFFF\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                    <Theme:Ref Key=\"AcrylicColor_Flyout\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"UseAccentColor\" Value=\"SystemAccentDark1/0.8\" />\r\n                            <Theme:Rule On=\"LightTheme\" Value=\"LightChromeMedium/0.8\" />\r\n                            <Theme:Rule Value=\"ApplicationBackgroundDarkTheme/0.7\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                    <Theme:Ref Key=\"AcrylicColor_Settings\" Value=\"Light=LightChromeWhite/0.6, Dark=ApplicationBackgroundDarkTheme/0.7\" />\r\n                    <Theme:Ref Key=\"AcrylicBackground\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"LightTheme\">\r\n                                <Theme:Rule.Rules>\r\n                                    <Theme:Rule On=\"Transparency\">\r\n                                        <Theme:Rule.Rules>\r\n                                            <Theme:Rule On=\"AccentPolicySupportsTintColor\" Value=\"#01000000\" />\r\n                                            <Theme:Rule Value=\"LightAcrylicWindowBackdropFallback/0.8\" />\r\n                                        </Theme:Rule.Rules>\r\n                                    </Theme:Rule>\r\n                                    <Theme:Rule Value=\"LightAcrylicWindowBackdropFallback/1\" />\r\n                                </Theme:Rule.Rules>\r\n                            </Theme:Rule>\r\n                            <Theme:Rule On=\"Transparency\">\r\n                                <Theme:Rule.Rules>\r\n                                    <Theme:Rule On=\"AccentPolicySupportsTintColor\" Value=\"#01000000\" />\r\n                                    <Theme:Rule Value=\"DarkAcrylicWindowBackdropFallback/0.8\" />\r\n                                </Theme:Rule.Rules>\r\n                            </Theme:Rule>\r\n                            <Theme:Rule Value=\"DarkAcrylicWindowBackdropFallback/1\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                    <Theme:Ref Key=\"FlyoutBackground\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"HighContrast\" Value=\"Window\" />\r\n                            <Theme:Rule On=\"UseAccentColor\">\r\n                                <Theme:Rule.Rules>\r\n                                    <Theme:Rule On=\"Transparency\">\r\n                                        <Theme:Rule.Rules>\r\n                                            <Theme:Rule On=\"AccentPolicySupportsTintColor\" Value=\"#01000000\" />\r\n                                            <Theme:Rule Value=\"Theme=SystemAccent{Theme}1/0.8\" />\r\n                                        </Theme:Rule.Rules>\r\n                                    </Theme:Rule>\r\n                                    <Theme:Rule Value=\"Theme=SystemAccent{Theme}1\" />\r\n                                </Theme:Rule.Rules>\r\n                            </Theme:Rule>\r\n                            <Theme:Rule On=\"Transparency\">\r\n                                <Theme:Rule.Rules>\r\n                                    <Theme:Rule On=\"AccentPolicySupportsTintColor\" Value=\"#01000000\" />\r\n                                    <Theme:Rule Value=\"Theme={Theme}ChromeLow/0.8\" />\r\n                                </Theme:Rule.Rules>\r\n                            </Theme:Rule>\r\n                            <Theme:Rule Value=\"Theme={Theme}ChromeLow\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                    <Theme:Ref Key=\"ActiveWindowBorder\">\r\n                        <Theme:Ref.Rules>\r\n                            <Theme:Rule On=\"UseAccentColorOnWindowBorders\" Value=\"SystemAccent\" />\r\n                            <Theme:Rule Value=\"Theme={Theme}ChromeDisabledLow\" />\r\n                        </Theme:Ref.Rules>\r\n                    </Theme:Ref>\r\n                </Theme:Manager.References>\r\n            </Theme:Manager>\r\n\r\n            <ctl:MenuItemTemplateSelector x:Key=\"MenuSelector\" />\r\n\r\n            <Thickness x:Key=\"PopupBorderThickness\">1</Thickness>\r\n            <bcl:Double x:Key=\"WindowBlurRadius\">10</bcl:Double>\r\n            <bcl:Double x:Key=\"WindowAndItemSize\">360</bcl:Double>\r\n            <Thickness x:Key=\"WindowMargin\">12,0,12,0</Thickness>\r\n            <Thickness x:Key=\"VolumeAppListMargin\">0,6,0,6</Thickness>\r\n            <Thickness x:Key=\"DeviceOrAppIconMargin\">5,0,0,0</Thickness>\r\n            <Thickness x:Key=\"VolumeTextMargin\">-1,0,0,0</Thickness>\r\n            <Thickness x:Key=\"NoItemsPaneMargin\">24</Thickness>\r\n            <bcl:Double x:Key=\"MutedOpacity\">0.4</bcl:Double>\r\n\r\n            <bcl:String x:Key=\"EarTrumpetIconLight\">pack://application:,,,/EarTrumpet;component/Assets/Icon-Light.ico</bcl:String>\r\n            <bcl:String x:Key=\"EarTrumpetIconDark\">pack://application:,,,/EarTrumpet;component/Assets/Icon-Dark.ico</bcl:String>\r\n\r\n            <Style x:Key=\"Windows10FocusVisualStyle\">\r\n                <Setter Property=\"Control.Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate>\r\n                            <Grid>\r\n                                <Rectangle Theme:Brush.Stroke=\"Theme=ApplicationBackground{Theme}Theme, HighContrast=Window\" StrokeThickness=\"3\" />\r\n                                <Rectangle Theme:Brush.Stroke=\"Text\" StrokeThickness=\"2\" />\r\n                            </Grid>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"LargeWindows10FocusVisualStyle\">\r\n                <Setter Property=\"Control.Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate>\r\n                            <Grid Margin=\"-3\" SnapsToDevicePixels=\"True\">\r\n                                <Rectangle Theme:Brush.Stroke=\"Theme=ApplicationBackground{Theme}Theme, HighContrast=Window\" StrokeThickness=\"3\" />\r\n                                <Rectangle Theme:Brush.Stroke=\"Text\" StrokeThickness=\"2\" />\r\n                            </Grid>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ContentControl}\" TargetType=\"ContentControl\">\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ItemsControl}\" TargetType=\"ItemsControl\">\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Focusable\" Value=\"False\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ListView}\" TargetType=\"ListView\">\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Focusable\" Value=\"False\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"ListView\">\r\n                            <Border Background=\"{TemplateBinding Background}\">\r\n                                <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ListViewItem}\" TargetType=\"ListViewItem\">\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"ListBoxItem\">\r\n                            <ContentPresenter Content=\"{TemplateBinding ContentControl.Content}\" ContentTemplate=\"{TemplateBinding ContentControl.ContentTemplate}\" />\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"HoverListItemStyle\"\r\n                   BasedOn=\"{StaticResource {x:Type ListViewItem}}\"\r\n                   TargetType=\"{x:Type ListViewItem}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type ListViewItem}\">\r\n                            <Border x:Name=\"Bd\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderThickness=\"1\"\r\n                                    SnapsToDevicePixels=\"true\">\r\n                                <ContentPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <MultiTrigger>\r\n                                    <MultiTrigger.Conditions>\r\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                                    </MultiTrigger.Conditions>\r\n                                    <Setter TargetName=\"Bd\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                                </MultiTrigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style TargetType=\"{x:Type GroupItem}\">\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type GroupItem}\">\r\n                            <StackPanel>\r\n                                <ContentPresenter Content=\"{TemplateBinding ContentControl.Content}\"\r\n                                                  ContentStringFormat=\"{TemplateBinding ContentControl.ContentStringFormat}\"\r\n                                                  ContentTemplate=\"{TemplateBinding ContentControl.ContentTemplate}\" />\r\n                                <ItemsPresenter Margin=\"0,0,0,0\" />\r\n                            </StackPanel>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ToolTip}\" TargetType=\"ToolTip\">\r\n                <Setter Property=\"Padding\" Value=\"4\" />\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ChromeMediumLow, HighContrast=Window\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=WindowText\" />\r\n                <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Theme={Theme}ChromeDisabledLow, HighContrast=WindowFrame\" />\r\n            </Style>\r\n            <Style x:Key=\"CaptionButtonStyle\" TargetType=\"Button\">\r\n                <Setter Property=\"WindowChrome.IsHitTestVisibleInChrome\" Value=\"True\" />\r\n                <Setter Property=\"FontFamily\" Value=\"Segoe MDL2 Assets\" />\r\n                <Setter Property=\"FontSize\" Value=\"10\" />\r\n                <Setter Property=\"FontWeight\" Value=\"ExtraLight\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"Width\" Value=\"46\" />\r\n                <Setter Property=\"Height\" Value=\"31\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"BorderBrush\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"Button\">\r\n                            <Border x:Name=\"border\"\r\n                                    Margin=\"0,-1,0,0\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentPresenter Margin=\"2\"\r\n                                                  HorizontalAlignment=\"Center\"\r\n                                                  VerticalAlignment=\"Center\"\r\n                                                  RecognizesAccessKey=\"True\" />\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                    </Trigger>\r\n                    <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListMedium, HighContrast=Highlight\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"CloseButtonStyle\"\r\n                   BasedOn=\"{StaticResource CaptionButtonStyle}\"\r\n                   TargetType=\"Button\">\r\n                <Setter Property=\"Margin\" Value=\"0,1,0,0\" />\r\n                <Setter Property=\"b:ButtonEx.ClickAction\" Value=\"Close\" />\r\n                <Setter Property=\"Content\" Value=\"&#xE8BB;\" />\r\n                <Style.Triggers>\r\n                    <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                        <Setter Property=\"Content\" Value=\"&#xEF2C;\" />\r\n                    </DataTrigger>\r\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextDarkTheme, HighContrast=HighlightText\" />\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=#FFE81123, HighContrast=Highlight\" />\r\n                    </Trigger>\r\n                    <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Light=Text, Dark=ApplicationTextLightTheme, HighContrast=HighlightText\" />\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=#F1707A, HighContrast=Highlight\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"MinimizeButton\"\r\n                   BasedOn=\"{StaticResource CaptionButtonStyle}\"\r\n                   TargetType=\"Button\">\r\n                <Setter Property=\"Content\" Value=\"&#xE921;\" />\r\n                <Setter Property=\"b:ButtonEx.ClickAction\" Value=\"Minimize\" />\r\n                <Style.Triggers>\r\n                    <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                        <Setter Property=\"Content\" Value=\"&#xEF2D;\" />\r\n                    </DataTrigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"MaximizeButton\"\r\n                   BasedOn=\"{StaticResource CaptionButtonStyle}\"\r\n                   TargetType=\"Button\">\r\n                <Setter Property=\"Content\" Value=\"&#xE922;\" />\r\n                <Setter Property=\"b:ButtonEx.ClickAction\" Value=\"Maximize\" />\r\n                <Style.Triggers>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding WindowState, Mode=OneWay, RelativeSource={RelativeSource AncestorType=Window}}\" Value=\"Normal\" />\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <MultiDataTrigger.Setters>\r\n                            <Setter Property=\"Content\" Value=\"&#xEF2E;\" />\r\n                        </MultiDataTrigger.Setters>\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding WindowState, Mode=OneWay, RelativeSource={RelativeSource AncestorType=Window}}\" Value=\"Maximized\" />\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <MultiDataTrigger.Setters>\r\n                            <Setter Property=\"Content\" Value=\"&#xEF2F;\" />\r\n                        </MultiDataTrigger.Setters>\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding WindowState, Mode=OneWay, RelativeSource={RelativeSource AncestorType=Window}}\" Value=\"Maximized\" />\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <MultiDataTrigger.Setters>\r\n                            <Setter Property=\"Content\" Value=\"&#xE923;\" />\r\n                        </MultiDataTrigger.Setters>\r\n                    </MultiDataTrigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"SliderButtonStyle\" TargetType=\"{x:Type RepeatButton}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Focusable\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\r\n                            <Border Background=\"Transparent\">\r\n                                <Border Height=\"2\" Background=\"{TemplateBinding Foreground}\" />\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"SliderThumbStyle\" TargetType=\"{x:Type Thumb}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Height\" Value=\"{DynamicResource Mutable_SliderThumbHeight}\" />\r\n                <Setter Property=\"Width\" Value=\"{DynamicResource Mutable_SliderThumbWidth}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\r\n                            <Border Name=\"Thumb\"\r\n                                    Background=\"{TemplateBinding Foreground}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"0\"\r\n                                    CornerRadius=\"5\" />\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type Slider}\" TargetType=\"{x:Type Slider}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Minimum\" Value=\"0\" />\r\n                <Setter Property=\"Maximum\" Value=\"100\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Interval\" Value=\"1\" />\r\n                <Setter Property=\"Height\" Value=\"32\" />\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"SmallChange\" Value=\"1\" />\r\n                <Setter Property=\"LargeChange\" Value=\"10\" />\r\n                <Setter Property=\"IsManipulationEnabled\" Value=\"True\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Slider}\">\r\n                            <Grid>\r\n                                <Border Name=\"TrackBackground\" Height=\"2\" />\r\n                                <Track Name=\"PART_Track\">\r\n                                    <Track.DecreaseRepeatButton>\r\n                                        <RepeatButton Name=\"SliderLeft\"\r\n                                                      Theme:Brush.Foreground=\"SystemAccent\"\r\n                                                      Command=\"Slider.DecreaseLarge\"\r\n                                                      Style=\"{StaticResource SliderButtonStyle}\" />\r\n                                    </Track.DecreaseRepeatButton>\r\n                                    <Track.Thumb>\r\n                                        <Thumb Name=\"SliderThumb\">\r\n                                            <Thumb.Style>\r\n                                                <Style BasedOn=\"{StaticResource SliderThumbStyle}\" TargetType=\"{x:Type Thumb}\">\r\n                                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\":Theme=Control{Theme}SliderTrackFillRest, Flyout:Theme=SystemAccent, :HighContrast=ControlText, Flyout:HighContrast=ControlText\" />\r\n                                                    <Style.Triggers>\r\n                                                        <DataTrigger Binding=\"{Binding Path=IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}\" Value=\"True\">\r\n                                                            <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Control{Theme}SliderThumbHover, HighContrast=Highlight\" />\r\n                                                        </DataTrigger>\r\n                                                    </Style.Triggers>\r\n                                                </Style>\r\n                                            </Thumb.Style>\r\n                                        </Thumb>\r\n                                    </Track.Thumb>\r\n                                    <Track.IncreaseRepeatButton>\r\n                                        <RepeatButton Name=\"SliderRight\"\r\n                                                      Theme:Brush.Foreground=\":Theme=Control{Theme}SliderTrackFillDisabled, :HighContrast=ControlText, Flyout:Theme=FlyoutThemeTrackRightBackground, Flyout:HighContrast=ControlText\"\r\n                                                      Command=\"Slider.IncreaseLarge\"\r\n                                                      Style=\"{StaticResource SliderButtonStyle}\" />\r\n                                    </Track.IncreaseRepeatButton>\r\n                                </Track>\r\n\r\n                                <Border Name=\"PeakMeter1\"\r\n                                        Height=\"2\"\r\n                                        Margin=\"0,-2,0,0\"\r\n                                        HorizontalAlignment=\"Left\"\r\n                                        Theme:Brush.Background=\"Theme=ApplicationText{Theme}Theme, HighContrast=HotTrack\" />\r\n\r\n                                <Border Name=\"PeakMeter2\"\r\n                                        Height=\"2\"\r\n                                        Margin=\"0,1,0,0\"\r\n                                        HorizontalAlignment=\"Left\"\r\n                                        Theme:Brush.Background=\"Theme=ApplicationText{Theme}Theme, HighContrast=HotTrack\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\r\n                                    <Setter Property=\"Opacity\" Value=\"0.5\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"GlyphTextBlockStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"FontFamily\" Value=\"Segoe MDL2 Assets\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Light=ApplicationTextLightTheme, Dark=ApplicationTextDarkTheme\" />\r\n            </Style>\r\n            <Style x:Key=\"TextBlockStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n            </Style>\r\n            <Style x:Key=\"{x:Type TextBlock}\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"TextTrimming\" Value=\"CharacterEllipsis\" />\r\n            </Style>\r\n            <Style x:Key=\"DeviceVolumeTextStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"Margin\" Value=\"{StaticResource VolumeTextMargin}\" />\r\n                <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"FontSize\" Value=\"{DynamicResource Mutable_DeviceVolumeTextFontSize}\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n            </Style>\r\n            <Style x:Key=\"AppVolumeTextStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"Margin\" Value=\"{StaticResource VolumeTextMargin}\" />\r\n                <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"FontSize\" Value=\"{DynamicResource Mutable_AppVolumeTextFontSize}\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n            </Style>\r\n            <Style x:Key=\"DeviceTitleTextStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"FontSize\" Value=\"{DynamicResource Mutable_LargeWindowTextFontSize}\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=ControlText\" />\r\n            </Style>\r\n            <Style x:Key=\"VirtualTitleBarTextStyle\" TargetType=\"{x:Type TextBlock}\">\r\n                <Setter Property=\"Margin\" Value=\"{StaticResource WindowMargin}\" />\r\n                <Setter Property=\"FontSize\" Value=\"{DynamicResource Mutable_LargeWindowTextFontSize}\" />\r\n                <Setter Property=\"TextTrimming\" Value=\"CharacterEllipsis\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n            </Style>\r\n            <Style x:Key=\"DialogWindowStyle\" TargetType=\"{x:Type Window}\">\r\n                <Setter Property=\"AllowsTransparency\" Value=\"True\" />\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"1\" />\r\n                <Setter Property=\"Icon\" Value=\"{Binding Source={StaticResource EarTrumpetIconLight}}\" />\r\n                <Setter Property=\"ShowInTaskbar\" Value=\"True\" />\r\n                <Setter Property=\"WindowStyle\" Value=\"None\" />\r\n                <Setter Property=\"WindowChrome.WindowChrome\">\r\n                    <Setter.Value>\r\n                        <WindowChrome CaptionHeight=\"31\" ResizeBorderThickness=\"{x:Static win:SystemParameters.WindowResizeBorderThickness}\" />\r\n                    </Setter.Value>\r\n                </Setter>\r\n                <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"ActiveWindowBorder\" />\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"IsActive\" Value=\"False\">\r\n                        <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Transparent\" />\r\n                    </Trigger>\r\n                    <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                        <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                    </DataTrigger>\r\n                    <Trigger Property=\"WindowState\" Value=\"Maximized\">\r\n                        <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                    </Trigger>\r\n                    <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsSystemLightTheme}\" Value=\"False\">\r\n                        <Setter Property=\"Icon\" Value=\"{Binding Source={StaticResource EarTrumpetIconDark}}\" />\r\n                    </DataTrigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n\r\n            <Style x:Key=\"BaseOverlayButton\" TargetType=\"{x:Type Button}\">\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Margin\" Value=\"0\" />\r\n                <Setter Property=\"Padding\" Value=\"0\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"Width\" Value=\"28\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Button}\">\r\n                            <Border x:Name=\"border\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Margin=\"{TemplateBinding Padding}\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Content=\"{TemplateBinding Content}\"\r\n                                                  Focusable=\"False\"\r\n                                                  RecognizesAccessKey=\"True\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n\r\n            <Style x:Key=\"MuteButton\" TargetType=\"{x:Type Button}\">\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Margin\" Value=\"0\" />\r\n                <Setter Property=\"Padding\" Value=\"0\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                <Setter Property=\"Opacity\" Value=\"0\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme/0.9, HighContrast=WindowText\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Button}\">\r\n                            <Border x:Name=\"border\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Margin=\"{TemplateBinding Padding}\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Content=\"{TemplateBinding Content}\"\r\n                                                  Focusable=\"False\"\r\n                                                  RecognizesAccessKey=\"True\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme/0.95, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme/1, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n\r\n            <Style x:Key=\"AppPopup\" TargetType=\"{x:Type Popup}\">\r\n                <Setter Property=\"AllowsTransparency\" Value=\"True\" />\r\n                <Setter Property=\"StaysOpen\" Value=\"False\" />\r\n                <Setter Property=\"PopupAnimation\" Value=\"Fade\" />\r\n            </Style>\r\n\r\n            <!--  ContextMenu styles & templates  -->\r\n            <Style TargetType=\"{x:Type ContextMenu}\">\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"TextOptions.TextFormattingMode\" Value=\"Display\" />\r\n                <Setter Property=\"UseLayoutRounding\" Value=\"True\" />\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"UsesItemContainerTemplate\" Value=\"True\" />\r\n                <Setter Property=\"ItemContainerTemplateSelector\" Value=\"{StaticResource MenuSelector}\" />\r\n                <Setter Property=\"Placement\" Value=\"Mouse\" />\r\n                <Setter Property=\"Grid.IsSharedSizeScope\" Value=\"True\" />\r\n                <Setter Property=\"MinWidth\" Value=\"311\" />\r\n                <Setter Property=\"HasDropShadow\" Value=\"True\" />\r\n                <Setter Property=\"FontSize\" Value=\"12\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseHigh, HighContrast=MenuText\" />\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ChromeMediumLow, HighContrast=Menu\" />\r\n                <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightChromeHigh, Dark=ControlDarkAppButtonTextDisabled/0.9, HighContrast=ControlText\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type ContextMenu}\">\r\n                            <Border x:Name=\"Border\">\r\n                                <Border Padding=\"2,8\"\r\n                                        Background=\"{TemplateBinding Background}\"\r\n                                        BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                        BorderThickness=\"1\">\r\n                                    <ScrollViewer HorizontalScrollBarVisibility=\"Hidden\" VerticalScrollBarVisibility=\"Auto\">\r\n                                        <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\" />\r\n                                    </ScrollViewer>\r\n                                </Border>\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"HasDropShadow\" Value=\"True\">\r\n                                    <Setter TargetName=\"Border\" Property=\"CornerRadius\" Value=\"0\" />\r\n                                    <Setter TargetName=\"Border\" Property=\"Background\" Value=\"Transparent\" />\r\n                                    <Setter TargetName=\"Border\" Property=\"Padding\" Value=\"0,0,5,5\" />\r\n                                    <Setter TargetName=\"Border\" Property=\"Effect\">\r\n                                        <Setter.Value>\r\n                                            <DropShadowEffect BlurRadius=\"4\"\r\n                                                              Opacity=\"0.8\"\r\n                                                              ShadowDepth=\"2\" />\r\n                                        </Setter.Value>\r\n                                    </Setter>\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style TargetType=\"{x:Type Separator}\">\r\n                <Setter Property=\"Margin\" Value=\"8,2,8,2\" />\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMediumLow, HighContrast=ControlText\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Separator}\">\r\n                            <Rectangle Height=\"1\"\r\n                                       Margin=\"{TemplateBinding Margin}\"\r\n                                       HorizontalAlignment=\"Stretch\"\r\n                                       Fill=\"{TemplateBinding Foreground}\" />\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type MenuItem}\" TargetType=\"{x:Type MenuItem}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=ControlText\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type MenuItem}\">\r\n                            <Border x:Name=\"Border\"\r\n                                    Height=\"32\"\r\n                                    Background=\"Transparent\"\r\n                                    BorderThickness=\"0\">\r\n                                <Grid Margin=\"0,-1,0,0\">\r\n                                    <Grid.ColumnDefinitions>\r\n                                        <ColumnDefinition Width=\"32\" SharedSizeGroup=\"Icon\" />\r\n                                        <ColumnDefinition Width=\"*\" />\r\n                                        <ColumnDefinition Width=\"Auto\" />\r\n                                    </Grid.ColumnDefinitions>\r\n                                    <Border x:Name=\"Check\"\r\n                                            Width=\"14\"\r\n                                            Height=\"14\"\r\n                                            BorderThickness=\"1\">\r\n                                        <TextBlock x:Name=\"CheckMark\"\r\n                                                   Theme:Brush.Foreground=\"Theme={Theme}BaseMedium, HighContrast=ControlText\"\r\n                                                   FontFamily=\"Segoe MDL2 Assets\"\r\n                                                   SnapsToDevicePixels=\"False\"\r\n                                                   Text=\"{TemplateBinding Tag}\"\r\n                                                   Visibility=\"Hidden\" />\r\n                                    </Border>\r\n                                    <ContentPresenter x:Name=\"HeaderHost\"\r\n                                                      Grid.Column=\"1\"\r\n                                                      Margin=\"0,0,8,0\"\r\n                                                      ContentSource=\"Header\"\r\n                                                      RecognizesAccessKey=\"False\" />\r\n\r\n                                    <Border x:Name=\"OpenGlyph\"\r\n                                            Grid.Column=\"2\"\r\n                                            Width=\"20\"\r\n                                            Height=\"14\"\r\n                                            BorderThickness=\"1\"\r\n                                            Visibility=\"Collapsed\">\r\n                                        <TextBlock x:Name=\"GlyphText\"\r\n                                                   Theme:Brush.Foreground=\"Theme={Theme}BaseMedium, HighContrast=ControlText\"\r\n                                                   FontFamily=\"Segoe MDL2 Assets\"\r\n                                                   SnapsToDevicePixels=\"False\"\r\n                                                   Text=\"&#xE0E3;\" />\r\n                                    </Border>\r\n\r\n                                    <Popup x:Name=\"Popup\"\r\n                                           MinWidth=\"200\"\r\n                                           AllowsTransparency=\"True\"\r\n                                           Focusable=\"False\"\r\n                                           HorizontalOffset=\"0\"\r\n                                           IsOpen=\"{TemplateBinding IsSubmenuOpen}\"\r\n                                           Placement=\"Right\"\r\n                                           PopupAnimation=\"Fade\">\r\n\r\n                                        <Border x:Name=\"SubmenuBorder\"\r\n                                                Theme:Brush.Background=\"Theme={Theme}ChromeMediumLow, HighContrast=Menu\"\r\n                                                Theme:Brush.BorderBrush=\"Theme={Theme}ChromeHigh, HighContrast=ControlText\"\r\n                                                BorderThickness=\"1\"\r\n                                                SnapsToDevicePixels=\"True\">\r\n                                            <Border Padding=\"2,6\"\r\n                                                    Background=\"{TemplateBinding Background}\"\r\n                                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                                    BorderThickness=\"1\">\r\n                                                <ScrollViewer VerticalScrollBarVisibility=\"Auto\">\r\n                                                    <StackPanel IsItemsHost=\"True\" KeyboardNavigation.DirectionalNavigation=\"Cycle\" />\r\n                                                </ScrollViewer>\r\n                                            </Border>\r\n                                        </Border>\r\n                                    </Popup>\r\n                                </Grid>\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"ButtonBase.Command\" Value=\"{x:Null}\" />\r\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\r\n                                    <Setter TargetName=\"CheckMark\" Property=\"Visibility\" Value=\"Visible\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsHighlighted\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseHigh, HighContrast=HighlightText\" />\r\n                                    <Setter TargetName=\"Border\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                                    <Setter TargetName=\"CheckMark\" Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMedium, HighContrast=HighlightText\" />\r\n                                    <Setter TargetName=\"GlyphText\" Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMedium, HighContrast=HighlightText\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsEnabled\" Value=\"False\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMediumLow, HighContrast=GrayText\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"Role\" Value=\"SubmenuHeader\">\r\n                                    <Setter TargetName=\"OpenGlyph\" Property=\"Visibility\" Value=\"Visible\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <DataTemplate x:Key=\"ContextMenuItemTemplate\">\r\n                <MenuItem Command=\"{Binding Command}\"\r\n                          Header=\"{Binding DisplayName}\"\r\n                          IsCheckable=\"{Binding IsChecked}\"\r\n                          IsChecked=\"{Binding IsChecked}\"\r\n                          IsEnabled=\"{Binding IsEnabled}\"\r\n                          Tag=\"{Binding Glyph}\" />\r\n            </DataTemplate>\r\n            <HierarchicalDataTemplate x:Key=\"ContextMenuSubItemTemplate\" ItemsSource=\"{Binding Children}\">\r\n                <MenuItem Command=\"{Binding Command}\"\r\n                          Header=\"{Binding DisplayName}\"\r\n                          ItemContainerTemplateSelector=\"{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=ItemContainerTemplateSelector}\"\r\n                          ItemsSource=\"{Binding Children}\"\r\n                          UsesItemContainerTemplate=\"True\" />\r\n            </HierarchicalDataTemplate>\r\n            <DataTemplate x:Key=\"ContextMenuSeparatorTemplate\">\r\n                <Separator />\r\n            </DataTemplate>\r\n\r\n            <!--  SettingsUX styles & templates  -->\r\n            <Style x:Key=\"HeadingText\" TargetType=\"TextBlock\">\r\n                <Setter Property=\"FontSize\" Value=\"20\" />\r\n                <Setter Property=\"Margin\" Value=\"12,24,12,12\" />\r\n            </Style>\r\n            <Style x:Key=\"BodyText\" TargetType=\"TextBlock\">\r\n                <Setter Property=\"FontSize\" Value=\"16\" />\r\n                <Setter Property=\"Margin\" Value=\"12,6\" />\r\n                <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n            </Style>\r\n            <Style x:Key=\"BodySubText\" TargetType=\"TextBlock\">\r\n                <Setter Property=\"FontSize\" Value=\"16\" />\r\n                <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\r\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"Margin\" Value=\"12,6\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"GrayText\" />\r\n            </Style>\r\n            <Style TargetType=\"Button\">\r\n                <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"2\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Padding\" Value=\"14,0\" />\r\n                <Setter Property=\"Margin\" Value=\"12\" />\r\n                <Setter Property=\"Height\" Value=\"32\" />\r\n                <Setter Property=\"MinWidth\" Value=\"90\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource LargeWindows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseHigh, HighContrast=ControlText\" />\r\n                <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Theme=Transparent, HighContrast=ControlText\" />\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}BaseLow\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"Button\">\r\n                            <Border Background=\"{TemplateBinding Background}\" BorderThickness=\"0\">\r\n                                <Border Padding=\"{TemplateBinding Padding}\"\r\n                                        Theme:Brush.BorderBrush=\"{TemplateBinding Theme:Brush.BorderBrush}\"\r\n                                        BorderThickness=\"{TemplateBinding BorderThickness}\">\r\n                                    <TextBlock HorizontalAlignment=\"Center\"\r\n                                               VerticalAlignment=\"Center\"\r\n                                               FontFamily=\"{TemplateBinding FontFamily}\"\r\n                                               Foreground=\"{TemplateBinding Foreground}\"\r\n                                               Text=\"{TemplateBinding Content}\" />\r\n                                </Border>\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Theme={Theme}BaseMediumLow, HighContrast=Highlight\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseHigh, HighContrast=Highlight\" />\r\n                    </Trigger>\r\n                    <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}BaseMediumLow\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseHigh\" />\r\n                        <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Theme=Transparent, HighContrast=ControlText\" />\r\n                    </Trigger>\r\n                    <Trigger Property=\"IsEnabled\" Value=\"False\">\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMediumLow\" />\r\n                        <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Theme=Transparent, HighContrast=ControlText\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style TargetType=\"{x:Type CheckBox}\">\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Padding\" Value=\"8,0,0,0\" />\r\n                <Setter Property=\"Margin\" Value=\"12\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource LargeWindows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type CheckBox}\">\r\n                            <Grid x:Name=\"templateRoot\"\r\n                                  Background=\"Transparent\"\r\n                                  SnapsToDevicePixels=\"True\">\r\n                                <Grid.RowDefinitions>\r\n                                    <RowDefinition Height=\"Auto\" />\r\n                                    <RowDefinition Height=\"Auto\" />\r\n                                </Grid.RowDefinitions>\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                </Grid.ColumnDefinitions>\r\n                                <TextBlock Name=\"ContentTextBlock\"\r\n                                           Grid.ColumnSpan=\"2\"\r\n                                           Margin=\"0\"\r\n                                           Style=\"{StaticResource BodyText}\"\r\n                                           Text=\"{TemplateBinding Content}\" />\r\n                                <Grid Grid.Row=\"1\">\r\n                                    <Grid x:Name=\"checkBoxBorder\"\r\n                                          Width=\"44\"\r\n                                          Height=\"20\"\r\n                                          HorizontalAlignment=\"Left\"\r\n                                          VerticalAlignment=\"Center\">\r\n                                        <Rectangle x:Name=\"OuterBorder\"\r\n                                                   Width=\"44\"\r\n                                                   Height=\"20\"\r\n                                                   Theme:Brush.Fill=\"Theme=Background\"\r\n                                                   Theme:Brush.Stroke=\"Text\"\r\n                                                   RadiusX=\"10\"\r\n                                                   RadiusY=\"10\"\r\n                                                   StrokeThickness=\"2\" />\r\n                                        <Grid x:Name=\"SwitchKnob\"\r\n                                              Width=\"20\"\r\n                                              Height=\"20\"\r\n                                              HorizontalAlignment=\"Left\">\r\n                                            <Ellipse x:Name=\"SwitchKnobEllipse\"\r\n                                                     Width=\"10\"\r\n                                                     Height=\"10\"\r\n                                                     Theme:Brush.Fill=\"Text\" />\r\n                                        </Grid>\r\n                                    </Grid>\r\n                                </Grid>\r\n                                <Border Grid.Row=\"1\" Grid.Column=\"1\">\r\n                                    <TextBlock x:Name=\"OnOffText\"\r\n                                               Margin=\"12\"\r\n                                               HorizontalAlignment=\"Left\"\r\n                                               VerticalAlignment=\"Center\"\r\n                                               Style=\"{DynamicResource BodyText}\"\r\n                                               Text=\"{x:Static resx:Resources.ToggleSwitchOffText}\" />\r\n                                </Border>\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\r\n                                    <Setter TargetName=\"SwitchKnob\" Property=\"HorizontalAlignment\" Value=\"Right\" />\r\n                                    <Setter TargetName=\"SwitchKnobEllipse\" Property=\"Theme:Brush.Fill\" Value=\"Dark=Text, Light=Background\" />\r\n                                    <Setter TargetName=\"OuterBorder\" Property=\"Theme:Brush.Fill\" Value=\"SystemAccent\" />\r\n                                    <Setter TargetName=\"OuterBorder\" Property=\"Theme:Brush.Stroke\" Value=\"SystemAccent\" />\r\n                                    <Setter TargetName=\"OnOffText\" Property=\"Text\" Value=\"{x:Static resx:Resources.ToggleSwitchOnText}\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"Content\" Value=\"{x:Null}\">\r\n                                    <Setter TargetName=\"ContentTextBlock\" Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"LegacyCheckbox\" TargetType=\"{x:Type CheckBox}\">\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Padding\" Value=\"8,0,0,0\" />\r\n                <Setter Property=\"Margin\" Value=\"12\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource LargeWindows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type CheckBox}\">\r\n                            <Grid x:Name=\"templateRoot\"\r\n                                  Background=\"Transparent\"\r\n                                  SnapsToDevicePixels=\"True\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                </Grid.ColumnDefinitions>\r\n                                <Border x:Name=\"checkBoxBorder\"\r\n                                        Width=\"20\"\r\n                                        Height=\"20\"\r\n                                        Margin=\"1\"\r\n                                        HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                        VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                        Theme:Brush.Background=\"Transparent\"\r\n                                        Theme:Brush.BorderBrush=\"Theme={Theme}BaseMediumHigh, HighContrast=Highlight\"\r\n                                        BorderThickness=\"2\">\r\n                                    <TextBlock x:Name=\"optionMark\"\r\n                                               FontFamily=\"Segoe MDL2 Assets\"\r\n                                               FontSize=\"16\"\r\n                                               Foreground=\"White\"\r\n                                               Opacity=\"0\"\r\n                                               SnapsToDevicePixels=\"False\"\r\n                                               Text=\"&#xE0E7;\" />\r\n                                </Border>\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Grid.Column=\"1\"\r\n                                                  Margin=\"{TemplateBinding Padding}\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Content=\"{TemplateBinding Content}\"\r\n                                                  ContentStringFormat=\"{TemplateBinding ContentStringFormat}\"\r\n                                                  ContentTemplate=\"{TemplateBinding ContentTemplate}\"\r\n                                                  Focusable=\"False\"\r\n                                                  RecognizesAccessKey=\"True\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.Background\" Value=\"Transparent\" />\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.BorderBrush\" Value=\"Theme={Theme}BaseHigh, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.Background\" Value=\"Light=LightBaseMediumHigh, Dark=DarkBaseMedium\" />\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightBaseMediumHigh, Dark=DarkBaseMedium, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsChecked\" Value=\"True\">\r\n                                    <Setter TargetName=\"optionMark\" Property=\"Opacity\" Value=\"1\" />\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                                    <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                                </Trigger>\r\n                                <MultiTrigger>\r\n                                    <MultiTrigger.Conditions>\r\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                                        <Condition Property=\"IsChecked\" Value=\"True\" />\r\n                                    </MultiTrigger.Conditions>\r\n                                    <MultiTrigger.Setters>\r\n                                        <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                                        <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightBaseHigh, Dark=DarkBaseHigh, HighContrast=Highlight\" />\r\n                                    </MultiTrigger.Setters>\r\n                                </MultiTrigger>\r\n                                <MultiTrigger>\r\n                                    <MultiTrigger.Conditions>\r\n                                        <Condition Property=\"IsPressed\" Value=\"True\" />\r\n                                        <Condition Property=\"IsChecked\" Value=\"True\" />\r\n                                    </MultiTrigger.Conditions>\r\n                                    <MultiTrigger.Setters>\r\n                                        <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                                        <Setter TargetName=\"checkBoxBorder\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightBaseHigh, Dark=DarkBaseHigh, HighContrast=Highlight\" />\r\n                                    </MultiTrigger.Setters>\r\n                                </MultiTrigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n\r\n            <Style TargetType=\"{x:Type RadioButton}\">\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource LargeWindows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type RadioButton}\">\r\n                            <Grid x:Name=\"templateRoot\"\r\n                                  Margin=\"0,6\"\r\n                                  Background=\"Transparent\"\r\n                                  SnapsToDevicePixels=\"True\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"20\" />\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                </Grid.ColumnDefinitions>\r\n                                <Grid Margin=\"0,6\" VerticalAlignment=\"Top\">\r\n                                    <Ellipse x:Name=\"radioButtonBorder\"\r\n                                             Width=\"20\"\r\n                                             Height=\"20\"\r\n                                             Theme:Brush.Stroke=\"Text\"\r\n                                             Fill=\"Transparent\"\r\n                                             StrokeThickness=\"2\"\r\n                                             UseLayoutRounding=\"False\" />\r\n                                    <Ellipse x:Name=\"optionMark\"\r\n                                             Width=\"10\"\r\n                                             Height=\"10\"\r\n                                             Theme:Brush.Fill=\"Text\"\r\n                                             Opacity=\"0\"\r\n                                             UseLayoutRounding=\"False\" />\r\n                                </Grid>\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Grid.Column=\"1\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Focusable=\"False\"\r\n                                                  RecognizesAccessKey=\"True\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"true\">\r\n                                    <Setter TargetName=\"optionMark\" Property=\"Theme:Brush.Fill\" Value=\"Theme={Theme}BaseHigh, HighContrast=Highlight\" />\r\n                                    <Setter TargetName=\"radioButtonBorder\" Property=\"Theme:Brush.Stroke\" Value=\"Theme={Theme}BaseHigh, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"true\">\r\n                                    <Setter TargetName=\"optionMark\" Property=\"Theme:Brush.Fill\" Value=\"Light=LightBaseMediumHigh, Dark=DarkBaseMedium, HighContrast=Highlight\" />\r\n                                    <Setter TargetName=\"radioButtonBorder\" Property=\"Theme:Brush.Stroke\" Value=\"Light=LightBaseMediumHigh, Dark=DarkBaseMedium, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsChecked\" Value=\"true\">\r\n                                    <Setter TargetName=\"optionMark\" Property=\"Opacity\" Value=\"1\" />\r\n                                    <Setter TargetName=\"radioButtonBorder\" Property=\"Theme:Brush.Stroke\" Value=\"SystemAccent\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"HyperlinkBlock\" TargetType=\"TextBlock\">\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\r\n                <Setter Property=\"Margin\" Value=\"12,12,12,6\" />\r\n            </Style>\r\n            <Style TargetType=\"{x:Type Hyperlink}\">\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme={Theme}BaseMedium, HighContrast=Text\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent, HighContrast=HotTrack\" />\r\n                <Setter Property=\"TextBlock.TextDecorations\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource LargeWindows10FocusVisualStyle}\" />\r\n            </Style>\r\n            <Style TargetType=\"{x:Type TextBox}\">\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Light=LightChromeWhite/0.4, Dark=DarkChromeBlackMediumLow\" />\r\n                <Setter Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightChromeBlackMediumLow, Dark=DarkChromeHigh, HighContrast=ControlText\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Light=Text, Dark=Text\" />\r\n                <Setter Property=\"Theme:Brush.SelectionBrush\" Value=\"SystemAccent\" />\r\n                <Setter Property=\"Theme:Brush.CaretBrush\" Value=\"ApplicationTextLightTheme\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"2\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Padding\" Value=\"4\" />\r\n                <Setter Property=\"MinWidth\" Value=\"140\" />\r\n                <Setter Property=\"MinHeight\" Value=\"32\" />\r\n                <Setter Property=\"Margin\" Value=\"12\" />\r\n                <Setter Property=\"KeyboardNavigation.TabNavigation\" Value=\"None\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"AllowDrop\" Value=\"True\" />\r\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"VerticalFirst\" />\r\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type TextBox}\">\r\n                            <Border x:Name=\"border\"\r\n                                    Theme:Brush.Background=\"{TemplateBinding Theme:Brush.Background}\"\r\n                                    Theme:Brush.BorderBrush=\"{TemplateBinding Theme:Brush.BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <Grid>\r\n                                    <Grid.ColumnDefinitions>\r\n                                        <ColumnDefinition Width=\"*\" />\r\n                                        <ColumnDefinition Width=\"Auto\" />\r\n                                    </Grid.ColumnDefinitions>\r\n                                    <ScrollViewer x:Name=\"PART_ContentHost\"\r\n                                                  Margin=\"4,0,0,0\"\r\n                                                  VerticalContentAlignment=\"Center\"\r\n                                                  Theme:Brush.Foreground=\"{TemplateBinding Theme:Brush.Foreground}\"\r\n                                                  Focusable=\"False\"\r\n                                                  HorizontalScrollBarVisibility=\"Hidden\"\r\n                                                  VerticalScrollBarVisibility=\"Hidden\" />\r\n                                    <Grid x:Name=\"ClearButtonGrid\"\r\n                                          Grid.Column=\"1\"\r\n                                          Visibility=\"Collapsed\">\r\n                                        <Button x:Name=\"ClearButton\"\r\n                                                Opacity=\"1\"\r\n                                                Style=\"{StaticResource BaseOverlayButton}\">\r\n                                            <TextBlock x:Name=\"ClearButtonTextBlock\"\r\n                                                       Margin=\"8\"\r\n                                                       HorizontalAlignment=\"Center\"\r\n                                                       VerticalAlignment=\"Center\"\r\n                                                       Theme:Brush.Foreground=\"Theme=SearchClearGlyph, HighContrast=GrayText\"\r\n                                                       FontSize=\"10\"\r\n                                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                                       Text=\"&#xE8BB;\" />\r\n                                        </Button>\r\n                                    </Grid>\r\n                                </Grid>\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"Text\" Value=\"{x:Static bcl:String.Empty}\">\r\n                                    <Setter TargetName=\"ClearButton\" Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightChromeBlackMedium, Dark=ControlDarkSelectBorderRest, HighContrast=ControlText\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"ClearButton\" Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent\" />\r\n                                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=LightChromeWhite\" />\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                                    <Setter Property=\"b:TextBoxEx.ClearText\" Value=\"False\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"False\">\r\n                                    <Setter Property=\"b:TextBoxEx.ClearText\" Value=\"True\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                                    <Trigger.EnterActions>\r\n                                        <BeginStoryboard>\r\n                                            <Storyboard>\r\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ClearButtonGrid\" Storyboard.TargetProperty=\"Visibility\">\r\n                                                    <DiscreteObjectKeyFrame KeyTime=\"00:00:00.1\">\r\n                                                        <DiscreteObjectKeyFrame.Value>\r\n                                                            <Visibility>Visible</Visibility>\r\n                                                        </DiscreteObjectKeyFrame.Value>\r\n                                                    </DiscreteObjectKeyFrame>\r\n                                                </ObjectAnimationUsingKeyFrames>\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.EnterActions>\r\n                                    <Trigger.ExitActions>\r\n                                        <BeginStoryboard>\r\n                                            <Storyboard>\r\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ClearButtonGrid\" Storyboard.TargetProperty=\"Visibility\">\r\n                                                    <DiscreteObjectKeyFrame KeyTime=\"00:00:00.1\">\r\n                                                        <DiscreteObjectKeyFrame.Value>\r\n                                                            <Visibility>Collapsed</Visibility>\r\n                                                        </DiscreteObjectKeyFrame.Value>\r\n                                                    </DiscreteObjectKeyFrame>\r\n                                                </ObjectAnimationUsingKeyFrames>\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.ExitActions>\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"SearchTextBoxStyle\"\r\n                   BasedOn=\"{StaticResource {x:Type TextBox}}\"\r\n                   TargetType=\"{x:Type TextBox}\">\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"TextBox\">\r\n                            <Border x:Name=\"border\"\r\n                                    Theme:Brush.Background=\"{TemplateBinding Theme:Brush.Background}\"\r\n                                    Theme:Brush.BorderBrush=\"{TemplateBinding Theme:Brush.BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <Grid>\r\n                                    <TextBlock Name=\"PromptText\"\r\n                                               Margin=\"9,4\"\r\n                                               Theme:Brush.Foreground=\"GrayText\"\r\n                                               FontSize=\"14\"\r\n                                               FontWeight=\"SemiBold\"\r\n                                               Text=\"{x:Static resx:Resources.FindASettingText}\"\r\n                                               Visibility=\"Collapsed\" />\r\n                                    <Grid>\r\n                                        <Grid.ColumnDefinitions>\r\n                                            <ColumnDefinition Width=\"*\" />\r\n                                            <ColumnDefinition Width=\"Auto\" />\r\n                                        </Grid.ColumnDefinitions>\r\n                                        <ScrollViewer x:Name=\"PART_ContentHost\"\r\n                                                      Margin=\"4,0\"\r\n                                                      Focusable=\"false\"\r\n                                                      HorizontalScrollBarVisibility=\"Hidden\"\r\n                                                      VerticalScrollBarVisibility=\"Hidden\" />\r\n                                        <TextBlock Name=\"SearchGlyph\"\r\n                                                   Grid.Column=\"1\"\r\n                                                   Margin=\"6,0\"\r\n                                                   HorizontalAlignment=\"Right\"\r\n                                                   Theme:Brush.Foreground=\"GrayText\"\r\n                                                   FontSize=\"12\"\r\n                                                   FontWeight=\"SemiBold\"\r\n                                                   Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                                   Text=\"&#xE721;\"\r\n                                                   Visibility=\"Collapsed\" />\r\n                                        <Button x:Name=\"ClearButton\"\r\n                                                Grid.Column=\"1\"\r\n                                                Style=\"{StaticResource BaseOverlayButton}\">\r\n                                            <TextBlock x:Name=\"ClearButtonTextBlock\"\r\n                                                       Margin=\"8\"\r\n                                                       HorizontalAlignment=\"Center\"\r\n                                                       VerticalAlignment=\"Center\"\r\n                                                       Theme:Brush.Foreground=\"Theme=SearchClearGlyph, HighContrast=GrayText\"\r\n                                                       FontSize=\"10\"\r\n                                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                                       Text=\"&#xE8BB;\" />\r\n                                        </Button>\r\n                                    </Grid>\r\n                                </Grid>\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"Text\" Value=\"{x:Static bcl:String.Empty}\">\r\n                                    <Setter TargetName=\"ClearButton\" Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                    <Setter TargetName=\"SearchGlyph\" Property=\"Visibility\" Value=\"Visible\" />\r\n                                    <Setter TargetName=\"PromptText\" Property=\"Visibility\" Value=\"Visible\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"ClearButton\" Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent\" />\r\n                                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=LightChromeWhite\" />\r\n                                    <Setter Property=\"b:TextBoxEx.ClearText\" Value=\"False\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"False\">\r\n                                    <Setter Property=\"b:TextBoxEx.ClearText\" Value=\"True\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightChromeBlackMedium, Dark=ControlDarkSelectBorderRest, HighContrast=ControlText\" />\r\n                                </Trigger>\r\n                                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style TargetType=\"{x:Type ComboBox}\">\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"1\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"false\" />\r\n                <Setter Property=\"IsEditable\" Value=\"true\" />\r\n                <Setter Property=\"StaysOpenOnEdit\" Value=\"true\" />\r\n                <Setter Property=\"IsTextSearchEnabled\" Value=\"false\" />\r\n                <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Auto\" />\r\n                <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\" />\r\n                <Setter Property=\"Padding\" Value=\"0\" />\r\n                <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"true\" />\r\n                <Setter Property=\"ScrollViewer.PanningMode\" Value=\"Both\" />\r\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type ComboBox}\">\r\n                            <Grid x:Name=\"templateRoot\" SnapsToDevicePixels=\"true\">\r\n                                <Popup x:Name=\"PART_Popup\"\r\n                                       Width=\"{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                       AllowsTransparency=\"true\"\r\n                                       IsOpen=\"{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                       Placement=\"Bottom\"\r\n                                       PopupAnimation=\"{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}\">\r\n                                    <Border x:Name=\"SubmenuBorder\"\r\n                                            Theme:Brush.Background=\"Theme={Theme}ChromeLow, HighContrast=Window\"\r\n                                            Theme:Brush.BorderBrush=\"Light=LightChromeHigh, Dark=ControlDarkAppButtonTextDisabled/0.9, HighContrast=ControlText\"\r\n                                            BorderThickness=\"1\"\r\n                                            SnapsToDevicePixels=\"True\">\r\n                                        <Grid>\r\n                                            <ItemsPresenter x:Name=\"ItemsPresenter\"\r\n                                                            KeyboardNavigation.DirectionalNavigation=\"Contained\"\r\n                                                            SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                                        </Grid>\r\n                                    </Border>\r\n                                </Popup>\r\n                                <TextBox x:Name=\"PART_EditableTextBox\"\r\n                                         Margin=\"{TemplateBinding Padding}\"\r\n                                         HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                         VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                         IsReadOnly=\"{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                         Style=\"{StaticResource SearchTextBoxStyle}\" />\r\n                            </Grid>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style TargetType=\"{x:Type ComboBoxItem}\">\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"Padding\" Value=\"0\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"BorderBrush\" Value=\"Transparent\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=ControlText\" />\r\n                <Setter Property=\"b:ComboBoxEx.ItemClickEnabled\" Value=\"True\" />\r\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type ComboBoxItem}\">\r\n                            <Border x:Name=\"Bd\"\r\n                                    Padding=\"{TemplateBinding Padding}\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    SnapsToDevicePixels=\"true\">\r\n                                <ContentPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsSelected\" Value=\"True\">\r\n                                    <Setter TargetName=\"Bd\" Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent{Theme}2/0.8, HighContrast=Highlight\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"Bd\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                </Trigger>\r\n                                <MultiTrigger>\r\n                                    <MultiTrigger.Conditions>\r\n                                        <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                                        <Condition Property=\"IsSelected\" Value=\"True\" />\r\n                                    </MultiTrigger.Conditions>\r\n                                    <Setter TargetName=\"Bd\" Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent{Theme}1/0.8, HighContrast=Highlight\" />\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                </MultiTrigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"AddButtonStyle\" TargetType=\"{x:Type Button}\">\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Top\" />\r\n                <Setter Property=\"FontSize\" Value=\"15\" />\r\n                <Setter Property=\"Padding\" Value=\"0,12,12,12\" />\r\n                <Setter Property=\"Margin\" Value=\"0,0,24,0\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Button}\">\r\n                            <Grid Name=\"root\" Background=\"{TemplateBinding Background}\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                </Grid.ColumnDefinitions>\r\n\r\n                                <Grid>\r\n                                    <Border Width=\"40\"\r\n                                            Height=\"40\"\r\n                                            Margin=\"12\"\r\n                                            Theme:Brush.Background=\"Light=LightBaseLow, Dark=Transparent\"\r\n                                            Theme:Brush.BorderBrush=\"Light=Transparent, Dark=Text\"\r\n                                            BorderThickness=\"2\">\r\n                                        <TextBlock HorizontalAlignment=\"Center\"\r\n                                                   VerticalAlignment=\"Center\"\r\n                                                   Theme:Brush.Foreground=\"Light=Text, Dark=ControlDarkButtonTextDisabled\"\r\n                                                   FontSize=\"15\"\r\n                                                   FontWeight=\"SemiBold\"\r\n                                                   Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                                   Text=\"&#xE109;\" />\r\n                                    </Border>\r\n\r\n                                </Grid>\r\n\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Grid.Column=\"1\"\r\n                                                  Margin=\"{TemplateBinding Padding}\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Focusable=\"False\"\r\n                                                  RecognizesAccessKey=\"True\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"root\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"root\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListMedium, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"InvisibleButtonStyle\" TargetType=\"Button\">\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                <Setter Property=\"BorderBrush\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"Button\">\r\n                            <Border x:Name=\"border\"\r\n                                    Margin=\"0,-1,0,0\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentPresenter />\r\n                            </Border>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                    </Trigger>\r\n                    <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListMedium, HighContrast=Highlight\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"ToolbarButtonStyle\"\r\n                   BasedOn=\"{StaticResource InvisibleButtonStyle}\"\r\n                   TargetType=\"Button\">\r\n                <Setter Property=\"Width\" Value=\"48\" />\r\n                <Setter Property=\"Height\" Value=\"48\" />\r\n            </Style>\r\n            <!--  ScrollBar styles & templates  -->\r\n            <Style x:Key=\"ScrollBarButton\" TargetType=\"{x:Type RepeatButton}\">\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\r\n                <Setter Property=\"Focusable\" Value=\"False\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\r\n                            <Border x:Name=\"border\"\r\n                                    Theme:Brush.Background=\"Theme={Theme}ChromeMedium\"\r\n                                    BorderThickness=\"0\"\r\n                                    SnapsToDevicePixels=\"True\">\r\n                                <ContentPresenter x:Name=\"contentPresenter\"\r\n                                                  Margin=\"{TemplateBinding Padding}\"\r\n                                                  HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                  Focusable=\"False\"\r\n                                                  SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </Border>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ChromeHigh, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ChromeDisabledLow, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"RepeatButtonTransparent\" TargetType=\"{x:Type RepeatButton}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                <Setter Property=\"Focusable\" Value=\"False\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type RepeatButton}\">\r\n                            <Rectangle Width=\"{TemplateBinding Width}\"\r\n                                       Height=\"{TemplateBinding Height}\"\r\n                                       Fill=\"{TemplateBinding Background}\" />\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <Style x:Key=\"ScrollBarThumbVertical\" TargetType=\"{x:Type Thumb}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\r\n                            <Grid>\r\n                                <Rectangle x:Name=\"rectangle\"\r\n                                           Width=\"2\"\r\n                                           HorizontalAlignment=\"Right\"\r\n                                           Theme:Brush.Fill=\"Theme={Theme}BaseMediumLow, HighContrast=WindowText\"\r\n                                           SnapsToDevicePixels=\"True\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"rectangle\" Property=\"Theme:Brush.Fill\" Value=\"Theme={Theme}ChromeHigh, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\r\n                                    <Setter TargetName=\"rectangle\" Property=\"Theme:Brush.Fill\" Value=\"Theme={Theme}ChromeDisabledLow, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"Tag\" Value=\"True\">\r\n                                    <Trigger.EnterActions>\r\n                                        <StopStoryboard BeginStoryboardName=\"Collapse\" />\r\n                                        <BeginStoryboard Name=\"Expand\">\r\n                                            <Storyboard>\r\n                                                <DoubleAnimation Storyboard.TargetName=\"rectangle\"\r\n                                                                 Storyboard.TargetProperty=\"Width\"\r\n                                                                 To=\"16\"\r\n                                                                 Duration=\"0:0:0.1\" />\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.EnterActions>\r\n                                    <Trigger.ExitActions>\r\n                                        <StopStoryboard BeginStoryboardName=\"Expand\" />\r\n                                        <BeginStoryboard Name=\"Collapse\">\r\n                                            <Storyboard>\r\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"rectangle\" Storyboard.TargetProperty=\"Width\">\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"16\" />\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"16\" />\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"2\" />\r\n                                                </DoubleAnimationUsingKeyFrames>\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.ExitActions>\r\n                                    <Setter TargetName=\"rectangle\" Property=\"HorizontalAlignment\" Value=\"Stretch\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <ControlTemplate x:Key=\"ScrollBar_Vertical\" TargetType=\"{x:Type ScrollBar}\">\r\n                <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"True\">\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\" />\r\n                        <RowDefinition Height=\"0.00001*\" />\r\n                        <RowDefinition MaxHeight=\"{DynamicResource {x:Static SystemParameters.VerticalScrollBarButtonHeightKey}}\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Border x:Name=\"Background\"\r\n                            Grid.Row=\"1\"\r\n                            Theme:Brush.Background=\"{TemplateBinding Theme:Brush.Background}\"\r\n                            BorderThickness=\"0\"\r\n                            Opacity=\"0\" />\r\n                    <RepeatButton x:Name=\"PART_LineUpButton\"\r\n                                  Command=\"{x:Static ScrollBar.LineUpCommand}\"\r\n                                  IsEnabled=\"{TemplateBinding IsMouseOver}\"\r\n                                  Opacity=\"0\"\r\n                                  Style=\"{StaticResource ScrollBarButton}\">\r\n                        <Border HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                            <TextBlock x:Name=\"ArrowTop\"\r\n                                       Theme:Brush.Foreground=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\"\r\n                                       FontSize=\"7\"\r\n                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                       Text=\"&#xE96D;\" />\r\n                        </Border>\r\n                    </RepeatButton>\r\n                    <Track x:Name=\"PART_Track\"\r\n                           Grid.Row=\"1\"\r\n                           IsDirectionReversed=\"True\"\r\n                           IsEnabled=\"{TemplateBinding IsMouseOver}\">\r\n                        <Track.DecreaseRepeatButton>\r\n                            <RepeatButton Command=\"{x:Static ScrollBar.PageUpCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\" />\r\n                        </Track.DecreaseRepeatButton>\r\n                        <Track.IncreaseRepeatButton>\r\n                            <RepeatButton Command=\"{x:Static ScrollBar.PageDownCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\" />\r\n                        </Track.IncreaseRepeatButton>\r\n                        <Track.Thumb>\r\n                            <Thumb x:Name=\"Thumb\" Style=\"{StaticResource ScrollBarThumbVertical}\" />\r\n                        </Track.Thumb>\r\n                    </Track>\r\n                    <RepeatButton x:Name=\"PART_LineDownButton\"\r\n                                  Grid.Row=\"2\"\r\n                                  Command=\"{x:Static ScrollBar.LineDownCommand}\"\r\n                                  IsEnabled=\"{TemplateBinding IsMouseOver}\"\r\n                                  Opacity=\"0\"\r\n                                  Style=\"{StaticResource ScrollBarButton}\">\r\n                        <Border HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                            <TextBlock x:Name=\"ArrowBottom\"\r\n                                       Theme:Brush.Foreground=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\"\r\n                                       FontSize=\"7\"\r\n                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                       Text=\"&#xE96E;\" />\r\n                        </Border>\r\n                    </RepeatButton>\r\n                </Grid>\r\n                <ControlTemplate.Triggers>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=UseDynamicScrollbars}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"Thumb\" Property=\"Tag\" Value=\"True\" />\r\n                        <Setter TargetName=\"PART_LineUpButton\" Property=\"Opacity\" Value=\"1\" />\r\n                        <Setter TargetName=\"PART_LineDownButton\" Property=\"Opacity\" Value=\"1\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=UseDynamicScrollbars}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"Thumb\" Property=\"Tag\" Value=\"True\" />\r\n                        <MultiDataTrigger.EnterActions>\r\n                            <StopStoryboard BeginStoryboardName=\"ShowScrollBar\" />\r\n                            <BeginStoryboard Name=\"HideScrollBar\">\r\n                                <Storyboard>\r\n                                    <DoubleAnimation Storyboard.TargetName=\"PART_LineUpButton\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                    <DoubleAnimation Storyboard.TargetName=\"PART_LineDownButton\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                    <DoubleAnimation Storyboard.TargetName=\"Background\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                </Storyboard>\r\n                            </BeginStoryboard>\r\n                        </MultiDataTrigger.EnterActions>\r\n                        <MultiDataTrigger.ExitActions>\r\n                            <StopStoryboard BeginStoryboardName=\"HideScrollBar\" />\r\n                            <BeginStoryboard Name=\"ShowScrollBar\">\r\n                                <Storyboard>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"PART_LineUpButton\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"PART_LineDownButton\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"Background\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                </Storyboard>\r\n                            </BeginStoryboard>\r\n                        </MultiDataTrigger.ExitActions>\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineDownButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineDownButton}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowBottom\" Property=\"Theme:Brush.Foreground\" Value=\"Dark=ApplicationTextLightTheme, Light=ApplicationTextDarkTheme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineUpButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineUpButton}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowTop\" Property=\"Theme:Brush.Foreground\" Value=\"Dark=ApplicationTextLightTheme, Light=ApplicationTextDarkTheme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineDownButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineDownButton}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowBottom\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineUpButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineUpButton}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowTop\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                </ControlTemplate.Triggers>\r\n            </ControlTemplate>\r\n            <Style x:Key=\"ScrollBarThumbHorizontal\" TargetType=\"{x:Type Thumb}\">\r\n                <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type Thumb}\">\r\n                            <Grid>\r\n                                <Rectangle x:Name=\"rectangle\"\r\n                                           Height=\"2\"\r\n                                           VerticalAlignment=\"Bottom\"\r\n                                           Theme:Brush.Fill=\"Theme={Theme}BaseMediumLow, HighContrast=WindowText\"\r\n                                           SnapsToDevicePixels=\"True\" />\r\n                            </Grid>\r\n                            <ControlTemplate.Triggers>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter TargetName=\"rectangle\" Property=\"Theme:Brush.Fill\" Value=\"Theme={Theme}ChromeHigh, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsDragging\" Value=\"True\">\r\n                                    <Setter TargetName=\"rectangle\" Property=\"Theme:Brush.Fill\" Value=\"Theme={Theme}ChromeDisabledLow, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"Tag\" Value=\"True\">\r\n\r\n                                    <Trigger.EnterActions>\r\n                                        <StopStoryboard BeginStoryboardName=\"Collapse\" />\r\n                                        <BeginStoryboard Name=\"Expand\">\r\n                                            <Storyboard>\r\n                                                <DoubleAnimation Storyboard.TargetName=\"rectangle\"\r\n                                                                 Storyboard.TargetProperty=\"Height\"\r\n                                                                 To=\"16\"\r\n                                                                 Duration=\"0:0:0.1\" />\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.EnterActions>\r\n                                    <Trigger.ExitActions>\r\n                                        <StopStoryboard BeginStoryboardName=\"Expand\" />\r\n                                        <BeginStoryboard Name=\"Collapse\">\r\n                                            <Storyboard>\r\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"rectangle\" Storyboard.TargetProperty=\"Height\">\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"16\" />\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"16\" />\r\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"2\" />\r\n                                                </DoubleAnimationUsingKeyFrames>\r\n                                            </Storyboard>\r\n                                        </BeginStoryboard>\r\n                                    </Trigger.ExitActions>\r\n                                    <Setter TargetName=\"rectangle\" Property=\"VerticalAlignment\" Value=\"Stretch\" />\r\n                                </Trigger>\r\n                            </ControlTemplate.Triggers>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n            <ControlTemplate x:Key=\"ScrollBar_Horizontal\" TargetType=\"{x:Type ScrollBar}\">\r\n                <Grid x:Name=\"Bg\" SnapsToDevicePixels=\"True\">\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\" />\r\n                        <ColumnDefinition Width=\"0.00001*\" />\r\n                        <ColumnDefinition MaxWidth=\"{DynamicResource {x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}}\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <Border x:Name=\"Background\"\r\n                            Grid.Column=\"1\"\r\n                            Theme:Brush.Background=\"{TemplateBinding Theme:Brush.Background}\"\r\n                            BorderThickness=\"0\"\r\n                            Opacity=\"0\" />\r\n                    <RepeatButton x:Name=\"PART_LineLeftButton\"\r\n                                  Command=\"{x:Static ScrollBar.LineLeftCommand}\"\r\n                                  IsEnabled=\"{TemplateBinding IsMouseOver}\"\r\n                                  Opacity=\"0\"\r\n                                  Style=\"{StaticResource ScrollBarButton}\">\r\n                        <Border HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                            <TextBlock x:Name=\"ArrowTop\"\r\n                                       Theme:Brush.Foreground=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\"\r\n                                       FontSize=\"7\"\r\n                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                       Text=\"&#xE96F;\" />\r\n                        </Border>\r\n                    </RepeatButton>\r\n                    <Track x:Name=\"PART_Track\"\r\n                           Grid.Column=\"1\"\r\n                           IsDirectionReversed=\"False\"\r\n                           IsEnabled=\"{TemplateBinding IsMouseOver}\">\r\n                        <Track.DecreaseRepeatButton>\r\n                            <RepeatButton Command=\"{x:Static ScrollBar.PageLeftCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\" />\r\n                        </Track.DecreaseRepeatButton>\r\n                        <Track.IncreaseRepeatButton>\r\n                            <RepeatButton Command=\"{x:Static ScrollBar.PageRightCommand}\" Style=\"{StaticResource RepeatButtonTransparent}\" />\r\n                        </Track.IncreaseRepeatButton>\r\n                        <Track.Thumb>\r\n                            <Thumb x:Name=\"Thumb\" Style=\"{StaticResource ScrollBarThumbHorizontal}\" />\r\n                        </Track.Thumb>\r\n                    </Track>\r\n                    <RepeatButton x:Name=\"PART_LineRightButton\"\r\n                                  Grid.Column=\"2\"\r\n                                  Command=\"{x:Static ScrollBar.LineRightCommand}\"\r\n                                  IsEnabled=\"{TemplateBinding IsMouseOver}\"\r\n                                  Opacity=\"0\"\r\n                                  Style=\"{StaticResource ScrollBarButton}\">\r\n                        <Border HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\r\n                            <TextBlock x:Name=\"ArrowBottom\"\r\n                                       Theme:Brush.Foreground=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\"\r\n                                       FontSize=\"7\"\r\n                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                       Text=\"&#xE970;\" />\r\n                        </Border>\r\n                    </RepeatButton>\r\n                </Grid>\r\n                <ControlTemplate.Triggers>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=UseDynamicScrollbars}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"Thumb\" Property=\"Tag\" Value=\"True\" />\r\n                        <Setter TargetName=\"PART_LineLeftButton\" Property=\"Opacity\" Value=\"1\" />\r\n                        <Setter TargetName=\"PART_LineRightButton\" Property=\"Opacity\" Value=\"1\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=UseDynamicScrollbars}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsMouseOver, RelativeSource={RelativeSource Self}}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"Thumb\" Property=\"Tag\" Value=\"True\" />\r\n                        <MultiDataTrigger.EnterActions>\r\n                            <StopStoryboard BeginStoryboardName=\"ShowScrollBar\" />\r\n                            <BeginStoryboard Name=\"HideScrollBar\">\r\n                                <Storyboard>\r\n                                    <DoubleAnimation Storyboard.TargetName=\"PART_LineLeftButton\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                    <DoubleAnimation Storyboard.TargetName=\"PART_LineRightButton\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                    <DoubleAnimation Storyboard.TargetName=\"Background\"\r\n                                                     Storyboard.TargetProperty=\"Opacity\"\r\n                                                     To=\"1\"\r\n                                                     Duration=\"0:0:0.1\" />\r\n                                </Storyboard>\r\n                            </BeginStoryboard>\r\n                        </MultiDataTrigger.EnterActions>\r\n                        <MultiDataTrigger.ExitActions>\r\n                            <StopStoryboard BeginStoryboardName=\"HideScrollBar\" />\r\n                            <BeginStoryboard Name=\"ShowScrollBar\">\r\n                                <Storyboard>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"PART_LineLeftButton\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"PART_LineRightButton\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"Background\" Storyboard.TargetProperty=\"Opacity\">\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4\" Value=\"1\" />\r\n                                        <EasingDoubleKeyFrame KeyTime=\"0:0:4.1\" Value=\"0\" />\r\n                                    </DoubleAnimationUsingKeyFrames>\r\n                                </Storyboard>\r\n                            </BeginStoryboard>\r\n                        </MultiDataTrigger.ExitActions>\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=UseDynamicScrollbars}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=Bg}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineRightButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineRightButton}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowBottom\" Property=\"Theme:Brush.Foreground\" Value=\"Dark=ApplicationTextLightTheme, Light=ApplicationTextDarkTheme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineLeftButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineLeftButton}\" Value=\"True\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowTop\" Property=\"Theme:Brush.Foreground\" Value=\"Dark=ApplicationTextLightTheme, Light=ApplicationTextDarkTheme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineRightButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineRightButton}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowBottom\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                    <MultiDataTrigger>\r\n                        <MultiDataTrigger.Conditions>\r\n                            <Condition Binding=\"{Binding IsMouseOver, ElementName=PART_LineLeftButton}\" Value=\"True\" />\r\n                            <Condition Binding=\"{Binding IsPressed, ElementName=PART_LineLeftButton}\" Value=\"False\" />\r\n                        </MultiDataTrigger.Conditions>\r\n                        <Setter TargetName=\"ArrowTop\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=ControlText\" />\r\n                    </MultiDataTrigger>\r\n                </ControlTemplate.Triggers>\r\n            </ControlTemplate>\r\n            <Style x:Key=\"{x:Type ScrollBar}\" TargetType=\"{x:Type ScrollBar}\">\r\n                <Setter Property=\"Stylus.IsPressAndHoldEnabled\" Value=\"False\" />\r\n                <Setter Property=\"Stylus.IsFlicksEnabled\" Value=\"False\" />\r\n                <Setter Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ChromeMedium, HighContrast=Window\" />\r\n                <Setter Property=\"Margin\" Value=\"0\" />\r\n                <Setter Property=\"Width\" Value=\"16\" />\r\n                <Setter Property=\"MinWidth\" Value=\"16\" />\r\n                <Setter Property=\"Template\" Value=\"{StaticResource ScrollBar_Vertical}\" />\r\n                <Style.Triggers>\r\n                    <Trigger Property=\"Orientation\" Value=\"Horizontal\">\r\n                        <Setter Property=\"Width\" Value=\"Auto\" />\r\n                        <Setter Property=\"MinWidth\" Value=\"0\" />\r\n                        <Setter Property=\"Height\" Value=\"16\" />\r\n                        <Setter Property=\"MinHeight\" Value=\"16\" />\r\n                        <Setter Property=\"Template\" Value=\"{StaticResource ScrollBar_Horizontal}\" />\r\n                    </Trigger>\r\n                </Style.Triggers>\r\n            </Style>\r\n            <Style x:Key=\"{x:Type ScrollViewer}\" TargetType=\"{x:Type ScrollViewer}\">\r\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n                <Setter Property=\"FocusVisualStyle\" Value=\"{x:Null}\" />\r\n                <Setter Property=\"Template\">\r\n                    <Setter.Value>\r\n                        <ControlTemplate TargetType=\"{x:Type ScrollViewer}\">\r\n                            <Grid x:Name=\"Grid\" Background=\"{TemplateBinding Background}\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                </Grid.ColumnDefinitions>\r\n                                <Grid.RowDefinitions>\r\n                                    <RowDefinition Height=\"*\" />\r\n                                    <RowDefinition Height=\"Auto\" />\r\n                                </Grid.RowDefinitions>\r\n\r\n                                <ScrollContentPresenter x:Name=\"PART_ScrollContentPresenter\"\r\n                                                        Grid.RowSpan=\"2\"\r\n                                                        Grid.ColumnSpan=\"2\"\r\n                                                        Margin=\"0\"\r\n                                                        HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                        VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                        CanContentScroll=\"{TemplateBinding CanContentScroll}\"\r\n                                                        CanHorizontallyScroll=\"False\"\r\n                                                        CanVerticallyScroll=\"False\"\r\n                                                        Content=\"{TemplateBinding Content}\"\r\n                                                        ContentTemplate=\"{TemplateBinding ContentTemplate}\" />\r\n                                <ScrollBar x:Name=\"PART_HorizontalScrollBar\"\r\n                                           Grid.Row=\"1\"\r\n                                           AutomationProperties.AutomationId=\"HorizontalScrollBar\"\r\n                                           Cursor=\"Arrow\"\r\n                                           Maximum=\"{TemplateBinding ScrollableWidth}\"\r\n                                           Minimum=\"0\"\r\n                                           Orientation=\"Horizontal\"\r\n                                           ViewportSize=\"{TemplateBinding ViewportWidth}\"\r\n                                           Visibility=\"{TemplateBinding ComputedHorizontalScrollBarVisibility}\"\r\n                                           Value=\"{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" />\r\n                                <ScrollBar x:Name=\"PART_VerticalScrollBar\"\r\n                                           Grid.Column=\"1\"\r\n                                           AutomationProperties.AutomationId=\"VerticalScrollBar\"\r\n                                           Cursor=\"Arrow\"\r\n                                           Maximum=\"{TemplateBinding ScrollableHeight}\"\r\n                                           Minimum=\"0\"\r\n                                           ViewportSize=\"{TemplateBinding ViewportHeight}\"\r\n                                           Visibility=\"{TemplateBinding ComputedVerticalScrollBarVisibility}\"\r\n                                           Value=\"{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}\" />\r\n                            </Grid>\r\n                        </ControlTemplate>\r\n                    </Setter.Value>\r\n                </Setter>\r\n            </Style>\r\n\r\n            <ControlTemplate x:Key=\"DialogChrome\" TargetType=\"{x:Type ContentControl}\">\r\n                <Border Theme:Brush.Background=\"PopupBackground\"\r\n                        Theme:Brush.BorderBrush=\"SystemAccent\"\r\n                        BorderThickness=\"{StaticResource PopupBorderThickness}\">\r\n                    <Grid>\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"*\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                        </Grid.ColumnDefinitions>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                        </Grid.RowDefinitions>\r\n                        <Border Grid.ColumnSpan=\"3\"\r\n                                Height=\"{DynamicResource Mutable_DeviceTitleCellHeight}\"\r\n                                Theme:Brush.Background=\":Light=LightListLow, :Dark=DarkChromeMediumLow, :HighContrast=Window, Flyout:Theme=SystemAccent/0.3/0.5, Flyout:HighContrast=Window\"\r\n                                Theme:Brush.BorderBrush=\"Theme=Transparent, HighContrast=Text\">\r\n                            <Border.Style>\r\n                                <Style TargetType=\"Border\">\r\n                                    <Style.Triggers>\r\n                                        <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                                            <Setter Property=\"BorderThickness\" Value=\"0,0,0,1\" />\r\n                                        </DataTrigger>\r\n                                    </Style.Triggers>\r\n                                </Style>\r\n                            </Border.Style>\r\n                        </Border>\r\n                        <TextBlock Style=\"{StaticResource VirtualTitleBarTextStyle}\" Text=\"{Binding DisplayName}\" />\r\n                        <ItemsControl Grid.Column=\"1\" ItemsSource=\"{Binding Toolbar}\">\r\n                            <ItemsControl.ItemsPanel>\r\n                                <ItemsPanelTemplate>\r\n                                    <StackPanel Orientation=\"Horizontal\" />\r\n                                </ItemsPanelTemplate>\r\n                            </ItemsControl.ItemsPanel>\r\n                            <ItemsControl.ItemTemplate>\r\n                                <DataTemplate DataType=\"{x:Type vm:ToolbarItemViewModel}\">\r\n                                    <Button b:ButtonEx.IsToolBarButton=\"True\"\r\n                                            AutomationProperties.Name=\"{Binding DisplayName}\"\r\n                                            Command=\"{Binding Command}\">\r\n                                        <Button.Template>\r\n                                            <ControlTemplate TargetType=\"{x:Type Button}\">\r\n                                                <Border Background=\"{TemplateBinding Background}\">\r\n                                                    <TextBlock HorizontalAlignment=\"Center\"\r\n                                                               VerticalAlignment=\"Center\"\r\n                                                               FontFamily=\"Segoe MDL2 Assets\"\r\n                                                               FontSize=\"{Binding GlyphFontSize}\"\r\n                                                               Foreground=\"{TemplateBinding Foreground}\"\r\n                                                               Text=\"{Binding Glyph}\" />\r\n                                                </Border>\r\n                                            </ControlTemplate>\r\n                                        </Button.Template>\r\n                                        <Button.ContextMenu>\r\n                                            <ContextMenu Theme:Options.Source=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Theme:Options.Source)}\"\r\n                                                         ItemContainerTemplateSelector=\"{StaticResource MenuSelector}\"\r\n                                                         ItemsSource=\"{Binding Menu}\"\r\n                                                         UsesItemContainerTemplate=\"True\" />\r\n                                        </Button.ContextMenu>\r\n                                        <Button.Style>\r\n                                            <Style TargetType=\"{x:Type Button}\">\r\n                                                <Setter Property=\"Width\" Value=\"{DynamicResource Mutable_DeviceTitleCellHeight}\" />\r\n                                                <Setter Property=\"Height\" Value=\"{DynamicResource Mutable_DeviceTitleCellHeight}\" />\r\n                                                <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n                                                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                                                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\r\n                                                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                                                <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n                                                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                                                <Style.Triggers>\r\n                                                    <Trigger Property=\"IsMouseOver\" Value=\"true\">\r\n                                                        <Setter Property=\"Theme:Brush.Background\" Value=\"Light=LightBaseMediumLow/0.12, Dark=DarkBaseMediumLow/0.12, HighContrast=Highlight\" />\r\n                                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                                                    </Trigger>\r\n                                                    <Trigger Property=\"IsPressed\" Value=\"true\">\r\n                                                        <Setter Property=\"Theme:Brush.Background\" Value=\"Light=LightBaseMediumLow/0.2, Dark=DarkBaseMediumLow/0.2, HighContrast=Highlight\" />\r\n                                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                                                    </Trigger>\r\n                                                </Style.Triggers>\r\n                                            </Style>\r\n                                        </Button.Style>\r\n                                    </Button>\r\n                                </DataTemplate>\r\n                            </ItemsControl.ItemTemplate>\r\n                        </ItemsControl>\r\n                        <ContentPresenter Grid.Row=\"1\"\r\n                                          Grid.ColumnSpan=\"3\"\r\n                                          Content=\"{TemplateBinding Content}\" />\r\n                    </Grid>\r\n                </Border>\r\n            </ControlTemplate>\r\n\r\n            <!--  ViewModel templates  -->\r\n            <DataTemplate DataType=\"{x:Type vm:AppItemViewModel}\">\r\n                <views:AppItemView />\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:TemporaryAppItemViewModel}\">\r\n                <views:AppItemView />\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:SettingsAppItemViewModel}\">\r\n                <Grid Margin=\"6\">\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"*\" />\r\n                    </Grid.ColumnDefinitions>\r\n\r\n                    <Border Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                            Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                            HorizontalAlignment=\"Center\">\r\n                        <Border.Style>\r\n                            <Style TargetType=\"Border\">\r\n                                <Setter Property=\"Background\">\r\n                                    <Setter.Value>\r\n                                        <SolidColorBrush Color=\"{Binding Background, Mode=OneTime}\" />\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding Source, ElementName=AppIcon}\" Value=\"{x:Null}\">\r\n                                        <Setter Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </Border.Style>\r\n                        <Grid>\r\n                            <ctl:ImageEx x:Name=\"AppIcon\"\r\n                                         Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                         Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                         SourceEx=\"{Binding}\"\r\n                                         Stretch=\"Fill\" />\r\n                            <Border>\r\n                                <Border.Style>\r\n                                    <Style TargetType=\"{x:Type Border}\">\r\n                                        <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                        <Style.Triggers>\r\n                                            <DataTrigger Binding=\"{Binding Source, ElementName=AppIcon}\" Value=\"{x:Null}\">\r\n                                                <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                                            </DataTrigger>\r\n                                        </Style.Triggers>\r\n                                    </Style>\r\n                                </Border.Style>\r\n\r\n                                <TextBlock Margin=\"0,-1,0,0\"\r\n                                           HorizontalAlignment=\"Center\"\r\n                                           VerticalAlignment=\"Center\"\r\n                                           Theme:Brush.Foreground=\"Text\"\r\n                                           FontSize=\"16\"\r\n                                           FontWeight=\"SemiBold\"\r\n                                           Text=\"{Binding IconText}\"\r\n                                           TextAlignment=\"Center\" />\r\n                            </Border>\r\n                        </Grid>\r\n                    </Border>\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               Margin=\"12,2\"\r\n                               HorizontalAlignment=\"Left\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Text=\"{Binding DisplayName}\" />\r\n                </Grid>\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:FocusedAppItemViewModel}\">\r\n                <ContentControl Template=\"{StaticResource DialogChrome}\">\r\n                    <Grid>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                        </Grid.RowDefinitions>\r\n\r\n                        <ListView Margin=\"{StaticResource VolumeAppListMargin}\"\r\n                                  VerticalAlignment=\"Center\"\r\n                                  FocusVisualStyle=\"{x:Null}\"\r\n                                  ItemsSource=\"{Binding App.ChildApps, Mode=OneWay}\"\r\n                                  ScrollViewer.CanContentScroll=\"True\"\r\n                                  ScrollViewer.VerticalScrollBarVisibility=\"Auto\" />\r\n\r\n                        <ItemsControl Grid.Row=\"1\" ItemsSource=\"{Binding Addons}\">\r\n                            <ItemsControl.ItemsPanel>\r\n                                <ItemsPanelTemplate>\r\n                                    <StackPanel Orientation=\"Vertical\" />\r\n                                </ItemsPanelTemplate>\r\n                            </ItemsControl.ItemsPanel>\r\n                        </ItemsControl>\r\n                    </Grid>\r\n                </ContentControl>\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:FocusedDeviceViewModel}\">\r\n                <ContentControl Template=\"{StaticResource DialogChrome}\">\r\n                    <ItemsControl ItemsSource=\"{Binding Addons}\">\r\n                        <ItemsControl.ItemsPanel>\r\n                            <ItemsPanelTemplate>\r\n                                <StackPanel Orientation=\"Vertical\" />\r\n                            </ItemsPanelTemplate>\r\n                        </ItemsControl.ItemsPanel>\r\n                    </ItemsControl>\r\n                </ContentControl>\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:HotkeyViewModel}\">\r\n                <TextBox GotKeyboardFocus=\"{Event:Binding OnGotFocus}\"\r\n                         LostKeyboardFocus=\"{Event:Binding OnLostFocus}\"\r\n                         PreviewKeyDown=\"{Event:Binding OnPreviewKeyDown}\"\r\n                         Text=\"{Binding HotkeyText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" />\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:WelcomeViewModel}\">\r\n                <Grid>\r\n                    <Grid MaxWidth=\"420\"\r\n                          Margin=\"20,6,20,20\"\r\n                          HorizontalAlignment=\"Center\"\r\n                          VerticalAlignment=\"Center\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"*\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                        </Grid.RowDefinitions>\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                        </Grid.ColumnDefinitions>\r\n                        <StackPanel Grid.Row=\"0\"\r\n                                    Grid.ColumnSpan=\"2\"\r\n                                    Orientation=\"Horizontal\">\r\n                            <Path Width=\"32\"\r\n                                  Height=\"32\"\r\n                                  Margin=\"0\"\r\n                                  Theme:Brush.Fill=\"Text\"\r\n                                  Data=\"M64.1,24.9c-0.8,6.8-5.5,21.5-10.2,26.1c1.2-2.3,1.8-4.9,1.7-7.7c-0.3-7.9-6.8-14.5-14.8-14.8  c-8.8-0.4-16,6.7-16,15.4c0,3.3,1.1,6.4,2.9,9C17.8,48.3,10,41.2,9.3,40.7c-1.2-0.4-3.2,2.9-2.5,4.1c53,45,74.7-10.4,75.4-12  C75.2,31.4,74.8,25.5,64.1,24.9z M38.7,31.9c7.9-1,14.6,5.7,13.6,13.6c-0.7,5.4-5,9.8-10.4,10.4c-7.9,1-14.6-5.7-13.6-13.6  C28.9,37,33.3,32.6,38.7,31.9z\"\r\n                                  Stretch=\"Uniform\" />\r\n                            <TextBlock x:Name=\"Welcome\"\r\n                                       Margin=\"20,20,0,20\"\r\n                                       Theme:Brush.Foreground=\"Text\"\r\n                                       FontSize=\"18\"\r\n                                       Text=\"{x:Static resx:Resources.WelcomeDialogHeaderText}\" />\r\n                        </StackPanel>\r\n                        <StackPanel Grid.Row=\"1\"\r\n                                    Grid.ColumnSpan=\"2\"\r\n                                    Orientation=\"Vertical\">\r\n                            <Image Height=\"275\"\r\n                                   HorizontalAlignment=\"Left\"\r\n                                   gif:AnimationBehavior.SourceUri=\"pack://application:,,,/EarTrumpet;component/Assets/Welcome.gif\"\r\n                                   gif:AnimationBehavior.RepeatBehavior=\"Forever\" />\r\n                            <CheckBox Margin=\"0,20,12,-6\"\r\n                                        HorizontalAlignment=\"Left\"\r\n                                        Content=\"{x:Static resx:Resources.PrivacyCheckboxText}\"\r\n                                        IsChecked=\"{Binding IsTelemetryEnabled, Mode=TwoWay}\" />\r\n                            <TextBlock Margin=\"0,12,12,6\" Style=\"{StaticResource HyperlinkBlock}\">\r\n                                <Hyperlink Command=\"{Binding OpenPrivacy}\">\r\n                                    <Run Text=\"{x:Static resx:Resources.PrivacyPolicyText}\" />\r\n                                </Hyperlink>\r\n                            </TextBlock>\r\n                            <TextBlock Margin=\"0,12,12,0\" Style=\"{StaticResource HyperlinkBlock}\">\r\n                                <Hyperlink Command=\"{Binding LearnMore}\">\r\n                                    <Run Text=\"{x:Static resx:Resources.WebsiteText}\" />\r\n                                </Hyperlink>\r\n                            </TextBlock>\r\n                        </StackPanel>\r\n                        <Button Grid.Row=\"2\"\r\n                                Grid.Column=\"1\"\r\n                                MinWidth=\"160\"\r\n                                Margin=\"0,20,0,0\"\r\n                                HorizontalAlignment=\"Right\"\r\n                                VerticalAlignment=\"Bottom\"\r\n                                b:ButtonEx.ClickAction=\"Close\"\r\n                                Content=\"{x:Static resx:Resources.CloseButtonText}\" />\r\n                    </Grid>\r\n                </Grid>\r\n            </DataTemplate>\r\n            <DataTemplate DataType=\"{x:Type vm:SettingsSearchItemViewModel}\">\r\n                <Grid Height=\"44\">\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"32\" />\r\n                        <ColumnDefinition Width=\"*\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock FontSize=\"15\" Text=\"{Binding Glyph}\">\r\n                        <TextBlock.Style>\r\n                            <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent, HighContrast=ControlText\" />\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent, HighContrast=HighlightText\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </TextBlock.Style>\r\n                    </TextBlock>\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               FontSize=\"15\"\r\n                               Text=\"{Binding DisplayName}\">\r\n                        <TextBlock.Style>\r\n                            <Style TargetType=\"TextBlock\">\r\n                                <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=ControlText\" />\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </TextBlock.Style>\r\n                    </TextBlock>\r\n                </Grid>\r\n            </DataTemplate>\r\n        </ResourceDictionary>\r\n    </Application.Resources>\r\n</Application>"
  },
  {
    "path": "EarTrumpet/App.xaml.cs",
    "content": "using EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Diagnosis;\r\nusing EarTrumpet.Extensibility;\r\nusing EarTrumpet.Extensibility.Hosting;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing EarTrumpet.UI.Views;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\nusing System.Windows.Interop;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet\r\n{\r\n    public partial class App\r\n    {\r\n        public static bool IsShuttingDown { get; private set; }\r\n        public static bool HasIdentity { get; private set; }\r\n        public static bool HasDevIdentity { get; private set; }\r\n        public static string PackageName { get; private set; }\r\n        public static Version PackageVersion { get; private set; }\r\n        public static TimeSpan Duration => s_appTimer.Elapsed;\r\n\r\n        public FlyoutWindow FlyoutWindow { get; private set; }\r\n        public DeviceCollectionViewModel CollectionViewModel { get; private set; }\r\n\r\n        private static readonly Stopwatch s_appTimer = Stopwatch.StartNew();\r\n        private FlyoutViewModel _flyoutViewModel;\r\n\r\n        private ShellNotifyIcon _trayIcon;\r\n        private WindowHolder _mixerWindow;\r\n        private WindowHolder _settingsWindow;\r\n        private ErrorReporter _errorReporter;\r\n\r\n        public static AppSettings Settings { get; private set; }\r\n\r\n        private void OnAppStartup(object sender, StartupEventArgs e)\r\n        {\r\n            RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;\r\n\r\n            Exit += (_, __) => IsShuttingDown = true;\r\n            HasIdentity = PackageHelper.CheckHasIdentity();\r\n            HasDevIdentity = PackageHelper.HasDevIdentity();\r\n            PackageVersion = PackageHelper.GetVersion(HasIdentity);\r\n            PackageName = PackageHelper.GetFamilyName(HasIdentity);\r\n\r\n            Settings = new AppSettings();\r\n            _errorReporter = new ErrorReporter(Settings);\r\n\r\n            if (SingleInstanceAppMutex.TakeExclusivity())\r\n            {\r\n                Exit += (_, __) => SingleInstanceAppMutex.ReleaseExclusivity();\r\n\r\n                try\r\n                {\r\n                    ContinueStartup();\r\n                }\r\n                catch (Exception ex) when (IsCriticalFontLoadFailure(ex))\r\n                {\r\n                    ErrorReporter.LogWarning(ex);\r\n                    OnCriticalFontLoadFailure();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Shutdown();\r\n            }\r\n        }\r\n\r\n        private void ContinueStartup()\r\n        {\r\n            ((UI.Themes.Manager)Resources[\"ThemeManager\"]).Load();\r\n\r\n            var deviceManager = WindowsAudioFactory.Create(AudioDeviceKind.Playback);\r\n            deviceManager.Loaded += (_, __) => CompleteStartup();\r\n            CollectionViewModel = new DeviceCollectionViewModel(deviceManager, Settings);\r\n\r\n            _trayIcon = new ShellNotifyIcon(new TaskbarIconSource(CollectionViewModel, Settings));\r\n            Exit += (_, __) => _trayIcon.IsVisible = false;\r\n            CollectionViewModel.TrayPropertyChanged += () => _trayIcon.SetTooltip(CollectionViewModel.GetTrayToolTip());\r\n\r\n            _flyoutViewModel = new FlyoutViewModel(CollectionViewModel, () => _trayIcon.SetFocus(), Settings);\r\n            FlyoutWindow = new FlyoutWindow(_flyoutViewModel);\r\n            // Initialize the FlyoutWindow last because its Show/Hide cycle will pump messages, causing UI frames\r\n            // to be executed, breaking the assumption that startup is complete.\r\n            FlyoutWindow.Initialize();\r\n        }\r\n\r\n        private void CompleteStartup()\r\n        {\r\n            AddonManager.Load(shouldLoadInternalAddons: HasDevIdentity);\r\n            Exit += (_, __) => AddonManager.Shutdown();\r\n#if DEBUG\r\n            DebugHelpers.Add();\r\n#endif\r\n            _mixerWindow = new WindowHolder(CreateMixerExperience);\r\n            _settingsWindow = new WindowHolder(CreateSettingsExperience);\r\n\r\n            Settings.FlyoutHotkeyTyped += () => _flyoutViewModel.OpenFlyout(InputType.Keyboard);\r\n            Settings.MixerHotkeyTyped += () => _mixerWindow.OpenOrClose();\r\n            Settings.SettingsHotkeyTyped += () => _settingsWindow.OpenOrBringToFront();\r\n            Settings.AbsoluteVolumeUpHotkeyTyped += AbsoluteVolumeIncrement;\r\n            Settings.AbsoluteVolumeDownHotkeyTyped += AbsoluteVolumeDecrement;\r\n            Settings.RegisterHotkeys();\r\n\r\n            _trayIcon.PrimaryInvoke += (_, type) => _flyoutViewModel.OpenFlyout(type);\r\n            _trayIcon.SecondaryInvoke += (_, args) => _trayIcon.ShowContextMenu(GetTrayContextMenuItems(), args.Point);\r\n            _trayIcon.TertiaryInvoke += (_, __) => CollectionViewModel.Default?.ToggleMute.Execute(null);\r\n            _trayIcon.Scrolled += trayIconScrolled;\r\n            _trayIcon.SetTooltip(CollectionViewModel.GetTrayToolTip());\r\n            _trayIcon.IsVisible = true;\r\n\r\n            DisplayFirstRunExperience();\r\n        }\r\n\r\n        private void trayIconScrolled(object _, int wheelDelta)\r\n        {\r\n            if (Settings.UseScrollWheelInTray && (!Settings.UseGlobalMouseWheelHook || _flyoutViewModel.State == FlyoutViewState.Hidden))\r\n            {\r\n                var hWndTray = WindowsTaskbar.GetTrayToolbarWindowHwnd();\r\n                var hWndTooltip = User32.SendMessage(hWndTray, User32.TB_GETTOOLTIPS, IntPtr.Zero, IntPtr.Zero);\r\n                User32.SendMessage(hWndTooltip, User32.TTM_POPUP, IntPtr.Zero, IntPtr.Zero);\r\n                \r\n                CollectionViewModel.Default?.IncrementVolume(Math.Sign(wheelDelta) * 2);\r\n            }\r\n        }\r\n\r\n        private void DisplayFirstRunExperience()\r\n        {\r\n            if (!Settings.HasShownFirstRun\r\n#if DEBUG\r\n                || Keyboard.IsKeyDown(Key.LeftCtrl)\r\n#endif\r\n                )\r\n            {\r\n                Trace.WriteLine($\"App DisplayFirstRunExperience Showing welcome dialog\");\r\n                Settings.HasShownFirstRun = true;\r\n\r\n                var dialog = new DialogWindow { DataContext = new WelcomeViewModel(Settings) };\r\n                dialog.Show();\r\n                dialog.RaiseWindow();\r\n            }\r\n        }\r\n\r\n        private bool IsCriticalFontLoadFailure(Exception ex)\r\n        {\r\n            return ex.StackTrace.Contains(\"MS.Internal.Text.TextInterface.FontFamily.GetFirstMatchingFont\") ||\r\n                   ex.StackTrace.Contains(\"MS.Internal.Text.Line.Format\");\r\n        }\r\n\r\n        private void OnCriticalFontLoadFailure()\r\n        {\r\n            Trace.WriteLine($\"App OnCriticalFontLoadFailure\");\r\n\r\n            new Thread(() =>\r\n            {\r\n                if (MessageBox.Show(\r\n                    EarTrumpet.Properties.Resources.CriticalFailureFontLookupHelpText,\r\n                    EarTrumpet.Properties.Resources.CriticalFailureDialogHeaderText,\r\n                    MessageBoxButton.OKCancel,\r\n                    MessageBoxImage.Error,\r\n                    MessageBoxResult.OK) == MessageBoxResult.OK)\r\n                {\r\n                    Trace.WriteLine($\"App OnCriticalFontLoadFailure OK\");\r\n                    ProcessHelper.StartNoThrow(\"https://eartrumpet.app/jmp/fixfonts\");\r\n                }\r\n                Environment.Exit(0);\r\n            }).Start();\r\n\r\n            // Stop execution because callbacks to the UI thread will likely cause another cascading font error.\r\n            new AutoResetEvent(false).WaitOne();\r\n        }\r\n\r\n        private IEnumerable<ContextMenuItem> GetTrayContextMenuItems()\r\n        {\r\n            var ret = new List<ContextMenuItem>(CollectionViewModel.AllDevices.OrderBy(x => x.DisplayName).Select(dev => new ContextMenuItem\r\n            {\r\n                DisplayName = dev.DisplayName,\r\n                IsChecked = dev.Id == CollectionViewModel.Default?.Id,\r\n                Command = new RelayCommand(() => dev.MakeDefaultDevice()),\r\n            }));\r\n\r\n            if (!ret.Any())\r\n            {\r\n                ret.Add(new ContextMenuItem\r\n                {\r\n                    DisplayName = EarTrumpet.Properties.Resources.ContextMenuNoDevices,\r\n                    IsEnabled = false,\r\n                });\r\n            }\r\n\r\n            ret.AddRange(new List<ContextMenuItem>\r\n                {\r\n                    new ContextMenuSeparator(),\r\n                    new ContextMenuItem\r\n                    {\r\n                        DisplayName = EarTrumpet.Properties.Resources.WindowsLegacyMenuText,\r\n                        Children = new List<ContextMenuItem>\r\n                        {\r\n                            new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.LegacyVolumeMixerText, Command =  new RelayCommand(LegacyControlPanelHelper.StartLegacyAudioMixer) },\r\n                            new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.PlaybackDevicesText, Command = new RelayCommand(() => LegacyControlPanelHelper.Open(\"playback\")) },\r\n                            new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.RecordingDevicesText, Command = new RelayCommand(() => LegacyControlPanelHelper.Open(\"recording\")) },\r\n                            new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.SoundsControlPanelText, Command = new RelayCommand(() => LegacyControlPanelHelper.Open(\"sounds\")) },\r\n                            new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.OpenSoundSettingsText, Command = new RelayCommand(() => SettingsPageHelper.Open(\"sound\")) },\r\n                            new ContextMenuItem {\r\n                                DisplayName = Environment.OSVersion.IsAtLeast(OSVersions.Windows11) ?\r\n                                    EarTrumpet.Properties.Resources.OpenAppsVolume_Windows11_Text\r\n                                    : EarTrumpet.Properties.Resources.OpenAppsVolume_Windows10_Text, Command = new RelayCommand(() => SettingsPageHelper.Open(\"apps-volume\")) },\r\n                        },\r\n                    },\r\n                    new ContextMenuSeparator(),\r\n                });\r\n\r\n            var addonItems = AddonManager.Host.TrayContextMenuItems?.OrderBy(x => x.NotificationAreaContextMenuItems.FirstOrDefault()?.DisplayName).SelectMany(ext => ext.NotificationAreaContextMenuItems);\r\n            if (addonItems != null && addonItems.Any())\r\n            {\r\n                ret.AddRange(addonItems);\r\n                ret.Add(new ContextMenuSeparator());\r\n            }\r\n\r\n            ret.AddRange(new List<ContextMenuItem>\r\n                {\r\n                    new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.FullWindowTitleText, Command = new RelayCommand(_mixerWindow.OpenOrBringToFront) },\r\n                    new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.SettingsWindowText, Command = new RelayCommand(_settingsWindow.OpenOrBringToFront) },\r\n                    new ContextMenuItem { DisplayName = EarTrumpet.Properties.Resources.ContextMenuExitTitle, Command = new RelayCommand(Shutdown) },\r\n                });\r\n            return ret;\r\n        }\r\n\r\n        private Window CreateSettingsExperience()\r\n        {\r\n            var defaultCategory = new SettingsCategoryViewModel(\r\n                EarTrumpet.Properties.Resources.SettingsCategoryTitle,\r\n                \"\\xE71D\",\r\n                EarTrumpet.Properties.Resources.SettingsDescriptionText,\r\n                null,\r\n                new SettingsPageViewModel[]\r\n                    {\r\n                        new EarTrumpetShortcutsPageViewModel(Settings),\r\n                        new EarTrumpetMouseSettingsPageViewModel(Settings),\r\n                        new EarTrumpetCommunitySettingsPageViewModel(Settings),\r\n                        new EarTrumpetLegacySettingsPageViewModel(Settings),\r\n                        new EarTrumpetAboutPageViewModel(() => _errorReporter.DisplayDiagnosticData(), Settings)\r\n                    });\r\n\r\n            var allCategories = new List<SettingsCategoryViewModel>();\r\n            allCategories.Add(defaultCategory);\r\n\r\n            if (AddonManager.Host.SettingsItems != null)\r\n            {\r\n                allCategories.AddRange(AddonManager.Host.SettingsItems.Select(a => CreateAddonSettingsPage(a)));\r\n            }\r\n\r\n            var viewModel = new SettingsViewModel(EarTrumpet.Properties.Resources.SettingsWindowText, allCategories);\r\n            return new SettingsWindow { DataContext = viewModel };\r\n        }\r\n\r\n        private SettingsCategoryViewModel CreateAddonSettingsPage(IEarTrumpetAddonSettingsPage addonSettingsPage)\r\n        {\r\n            var addon = (EarTrumpetAddon)addonSettingsPage;\r\n            var category = addonSettingsPage.GetSettingsCategory();\r\n\r\n            if (!addon.IsInternal())\r\n            {\r\n                category.Pages.Add(new AddonAboutPageViewModel(addon));\r\n            }\r\n            return category;\r\n        }\r\n\r\n        private Window CreateMixerExperience() => new FullWindow { DataContext = new FullWindowViewModel(CollectionViewModel) };\r\n\r\n        private void AbsoluteVolumeIncrement()\r\n        {\r\n            foreach (var device in CollectionViewModel.AllDevices.Where(d => !d.IsMuted || d.IsAbsMuted))\r\n            {\r\n                // in any case this device is not abs muted anymore\r\n                device.IsAbsMuted = false;\r\n                device.IncrementVolume(2);\r\n            }\r\n        }\r\n\r\n        private void AbsoluteVolumeDecrement()\r\n        {\r\n            foreach (var device in CollectionViewModel.AllDevices.Where(d => !d.IsMuted))\r\n            {\r\n                // if device is not muted but will be muted by \r\n                bool wasMuted = device.IsMuted;\r\n                // device.IncrementVolume(-2);\r\n                device.Volume -= 2;\r\n                // if device is muted by this absolute down\r\n                // .IsMuted is not already updated\r\n                if (!wasMuted == (device.Volume <= 0))\r\n                {\r\n                    device.IsAbsMuted = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/AppSettings.cs",
    "content": "﻿using EarTrumpet.DataModel.Storage;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing static EarTrumpet.Interop.User32;\r\n\r\nnamespace EarTrumpet\r\n{\r\n    public class AppSettings\r\n    {\r\n        public event EventHandler<bool> UseLegacyIconChanged;\r\n        public event Action FlyoutHotkeyTyped;\r\n        public event Action MixerHotkeyTyped;\r\n        public event Action SettingsHotkeyTyped;\r\n        public event Action AbsoluteVolumeUpHotkeyTyped;\r\n        public event Action AbsoluteVolumeDownHotkeyTyped;\r\n\r\n        private ISettingsBag _settings = StorageFactory.GetSettings();\r\n\r\n        public void RegisterHotkeys()\r\n        {\r\n            HotkeyManager.Current.Register(FlyoutHotkey);\r\n            HotkeyManager.Current.Register(MixerHotkey);\r\n            HotkeyManager.Current.Register(SettingsHotkey);\r\n            HotkeyManager.Current.Register(AbsoluteVolumeUpHotkey);\r\n            HotkeyManager.Current.Register(AbsoluteVolumeDownHotkey);\r\n\r\n            HotkeyManager.Current.KeyPressed += (hotkey) =>\r\n            {\r\n                if (hotkey.Equals(FlyoutHotkey))\r\n                {\r\n                    Trace.WriteLine(\"AppSettings FlyoutHotkeyTyped\");\r\n                    FlyoutHotkeyTyped?.Invoke();\r\n                }\r\n                else if (hotkey.Equals(SettingsHotkey))\r\n                {\r\n                    Trace.WriteLine(\"AppSettings SettingsHotkeyTyped\");\r\n                    SettingsHotkeyTyped?.Invoke();\r\n                }\r\n                else if (hotkey.Equals(MixerHotkey))\r\n                {\r\n                    Trace.WriteLine(\"AppSettings MixerHotkeyTyped\");\r\n                    MixerHotkeyTyped?.Invoke();\r\n                }\r\n                else if (hotkey.Equals(AbsoluteVolumeUpHotkey))\r\n                {\r\n                    Trace.WriteLine(\"AppSettings AbsoluteVolumeUpHotkeyTyped\");\r\n                    AbsoluteVolumeUpHotkeyTyped?.Invoke();\r\n                }\r\n                else if (hotkey.Equals(AbsoluteVolumeDownHotkey))\r\n                {\r\n                    Trace.WriteLine(\"AppSettings AbsoluteVolumeDownHotkeyTyped\");\r\n                    AbsoluteVolumeDownHotkeyTyped?.Invoke();\r\n                }\r\n            };\r\n        }\r\n\r\n        public HotkeyData FlyoutHotkey\r\n        {\r\n            get => _settings.Get(\"Hotkey\", new HotkeyData { });\r\n            set\r\n            {\r\n                HotkeyManager.Current.Unregister(FlyoutHotkey);\r\n                _settings.Set(\"Hotkey\", value);\r\n                HotkeyManager.Current.Register(FlyoutHotkey);\r\n            }\r\n        }\r\n\r\n        public HotkeyData MixerHotkey\r\n        {\r\n            get => _settings.Get(\"MixerHotkey\", new HotkeyData { });\r\n            set\r\n            {\r\n                HotkeyManager.Current.Unregister(MixerHotkey);\r\n                _settings.Set(\"MixerHotkey\", value);\r\n                HotkeyManager.Current.Register(MixerHotkey);\r\n            }\r\n        }\r\n\r\n        public HotkeyData SettingsHotkey\r\n        {\r\n            get => _settings.Get(\"SettingsHotkey\", new HotkeyData { });\r\n            set\r\n            {\r\n                HotkeyManager.Current.Unregister(SettingsHotkey);\r\n                _settings.Set(\"SettingsHotkey\", value);\r\n                HotkeyManager.Current.Register(SettingsHotkey);\r\n            }\r\n        }\r\n\r\n        public HotkeyData AbsoluteVolumeUpHotkey\r\n        {\r\n            get => _settings.Get(\"AbsoluteVolumeUpHotkey\", new HotkeyData { });\r\n            set\r\n            {\r\n                HotkeyManager.Current.Unregister(AbsoluteVolumeUpHotkey);\r\n                _settings.Set(\"AbsoluteVolumeUpHotkey\", value);\r\n                HotkeyManager.Current.Register(AbsoluteVolumeUpHotkey);\r\n            }\r\n        }\r\n\r\n        public HotkeyData AbsoluteVolumeDownHotkey\r\n        {\r\n            get => _settings.Get(\"AbsoluteVolumeDownHotkey\", new HotkeyData { });\r\n            set\r\n            {\r\n                HotkeyManager.Current.Unregister(AbsoluteVolumeDownHotkey);\r\n                _settings.Set(\"AbsoluteVolumeDownHotkey\", value);\r\n                HotkeyManager.Current.Register(AbsoluteVolumeDownHotkey);\r\n            }\r\n        }\r\n\r\n        public bool UseLegacyIcon\r\n        {\r\n            get\r\n            {\r\n                // Note: Legacy compat, we used to write string bools.\r\n                var ret = _settings.Get(\"UseLegacyIcon\", \"False\");\r\n                bool.TryParse(ret, out bool isUseLegacyIcon);\r\n                return isUseLegacyIcon;\r\n            }\r\n            set\r\n            {\r\n                _settings.Set(\"UseLegacyIcon\", value.ToString());\r\n                UseLegacyIconChanged?.Invoke(null, UseLegacyIcon);\r\n            }\r\n        }\r\n\r\n        public bool IsExpanded\r\n        {\r\n            get => _settings.Get(\"IsExpanded\", false);\r\n            set => _settings.Set(\"IsExpanded\", value);\r\n        }\r\n\r\n        public bool UseScrollWheelInTray\r\n        {\r\n            get => _settings.Get(\"UseScrollWheelInTray\", true);\r\n            set => _settings.Set(\"UseScrollWheelInTray\", value);\r\n        }\r\n\r\n        public bool UseGlobalMouseWheelHook\r\n        {\r\n            get => _settings.Get(\"UseGlobalMouseWheelHook\", false);\r\n            set => _settings.Set(\"UseGlobalMouseWheelHook\", value);\r\n        }\r\n\r\n        public bool HasShownFirstRun\r\n        {\r\n            get => _settings.HasKey(\"hasShownFirstRun\");\r\n            set => _settings.Set(\"hasShownFirstRun\", value);\r\n        }\r\n\r\n        public bool IsTelemetryEnabled\r\n        {\r\n            get\r\n            {\r\n                return _settings.Get(\"IsTelemetryEnabled\", IsTelemetryEnabledByDefault());\r\n            }\r\n            set => _settings.Set(\"IsTelemetryEnabled\", value);\r\n        }\r\n\r\n        public bool UseLogarithmicVolume\r\n        {\r\n            get => _settings.Get(\"UseLogarithmicVolume\", false);\r\n            set => _settings.Set(\"UseLogarithmicVolume\", value);\r\n        }\r\n\r\n        public WINDOWPLACEMENT? FullMixerWindowPlacement\r\n        {\r\n            get => _settings.Get(\"FullMixerWindowPlacement\", default(WINDOWPLACEMENT?));\r\n            set => _settings.Set(\"FullMixerWindowPlacement\", value);\r\n        }\r\n\r\n        public WINDOWPLACEMENT? SettingsWindowPlacement\r\n        {\r\n            get => _settings.Get(\"SettingsWindowPlacement\", default(WINDOWPLACEMENT?));\r\n            set => _settings.Set(\"SettingsWindowPlacement\", value);\r\n        }\r\n\r\n        private bool IsTelemetryEnabledByDefault()\r\n        {\r\n            // Discussion on what to include:\r\n            // https://gist.github.com/henrik/1688572\r\n            var europeanUnionRegions = new string[]\r\n            {\r\n                // EU 28\r\n                \"AT\", // Austria\r\n                \"BE\", // Belgium\r\n                \"BG\", // Bulgaria\r\n                \"HR\", // Croatia\r\n                \"CY\", // Cyprus\r\n                \"CZ\", // Czech Republic\r\n                \"DK\", // Denmark\r\n                \"EE\", // Estonia\r\n                \"FI\", // Finland\r\n                \"FR\", // France\r\n                \"DE\", // Germany\r\n                \"GR\", // Greece\r\n                \"HU\", // Hungary\r\n                \"IE\", // Ireland, Republic of (EIRE)\r\n                \"IT\", // Italy\r\n                \"LV\", // Latvia\r\n                \"LT\", // Lithuania\r\n                \"LU\", // Luxembourg\r\n                \"MT\", // Malta\r\n                \"NL\", // Netherlands\r\n                \"PL\", // Poland\r\n                \"PT\", // Portugal\r\n                \"RO\", // Romania\r\n                \"SK\", // Slovakia\r\n                \"SI\", // Slovenia\r\n                \"ES\", // Spain\r\n                \"SE\", // Sweden\r\n                \"GB\", // United Kingdom (Great Britain)\r\n\r\n                // Outermost Regions (OMR)\r\n                \"GF\", // French Guiana\r\n                \"GP\", // Guadeloupe\r\n                \"MQ\", // Martinique\r\n                \"ME\", // Montenegro\r\n                \"YT\", // Mayotte\r\n                \"RE\", // Réunion\r\n                \"MF\", // Saint Martin\r\n\r\n                // Special Cases: Part of EU\r\n                \"GI\", // Gibraltar\r\n                \"AX\", // Åland Islands\r\n\r\n                // Overseas Countries and Territories (OCT)\r\n                \"PM\", // Saint Pierre and Miquelon\r\n                \"GL\", // Greenland\r\n                \"BL\", // Saint Bartelemey\r\n                \"SX\", // Sint Maarten\r\n                \"AW\", // Aruba\r\n                \"CW\", // Curacao\r\n                \"WF\", // Wallis and Futuna\r\n                \"PF\", // French Polynesia\r\n                \"NC\", // New Caledonia\r\n                \"TF\", // French Southern Territories\r\n                \"AI\", // Anguilla\r\n                \"BM\", // Bermuda\r\n                \"IO\", // British Indian Ocean Territory\r\n                \"VG\", // Virgin Islands, British\r\n                \"KY\", // Cayman Islands\r\n                \"FK\", // Falkland Islands (Malvinas)\r\n                \"MS\", // Montserrat\r\n                \"PN\", // Pitcairn\r\n                \"SH\", // Saint Helena\r\n                \"GS\", // South Georgia and the South Sandwich Islands\r\n                \"TC\", // Turks and Caicos Islands\r\n\r\n                // Microstates\r\n                \"AD\", // Andorra\r\n                \"LI\", // Liechtenstein\r\n                \"MC\", // Monaco\r\n                \"SM\", // San Marino\r\n                \"VA\", // Vatican City\r\n\r\n                // Other\r\n                \"JE\", // Jersey\r\n                \"GG\", // Guernsey\r\n            };\r\n            var region = new Windows.Globalization.GeographicRegion();\r\n            return !europeanUnionRegions.Contains(region.CodeTwoLetter);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/BindableBase.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace EarTrumpet\r\n{\r\n    public class BindableBase : INotifyPropertyChanged\r\n    {\r\n        public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n        protected void RaisePropertyChanged(string name)\r\n        {\r\n            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/AppInformationFactory.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation\r\n{\r\n    public class AppInformationFactory\r\n    {\r\n        public static IAppInfo CreateForProcess(int processId, bool trackProcess = false)\r\n        {\r\n            if (processId == 0)\r\n            {\r\n                return new Internal.SystemSoundsAppInfo();\r\n            }\r\n\r\n            if (Kernel32Helper.IsPackagedProcess(processId))\r\n            {\r\n                return new Internal.ModernAppInfo(processId, trackProcess);\r\n            }\r\n            else\r\n            {\r\n                return new Internal.DesktopAppInfo(processId, trackProcess);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/IAppInfo.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation\r\n{\r\n    public interface IAppInfo\r\n    {\r\n        event Action<IAppInfo> Stopped;\r\n        string DisplayName { get; }\r\n        string ExeName { get; }\r\n        string PackageInstallPath { get; }\r\n        string SmallLogoPath { get; }\r\n        bool IsDesktopApp { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/Internal/DesktopAppInfo.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation.Internal\r\n{\r\n    class DesktopAppInfo : IAppInfo\r\n    {\r\n        public event Action<IAppInfo> Stopped;\r\n\r\n        public string ExeName { get; }\r\n        public string DisplayName { get; }\r\n        public string PackageInstallPath { get; }\r\n        public string SmallLogoPath { get; }\r\n        public bool IsDesktopApp => true;\r\n\r\n        private int _processId;\r\n\r\n        public DesktopAppInfo(int processId, bool trackProcess)\r\n        {\r\n            _processId = processId;\r\n\r\n            var handle = Kernel32.OpenProcess(Kernel32.ProcessFlags.PROCESS_QUERY_LIMITED_INFORMATION | Kernel32.ProcessFlags.SYNCHRONIZE, false, processId);\r\n            if (handle != IntPtr.Zero)\r\n            {\r\n                try\r\n                {\r\n                    ZombieProcessException.ThrowIfZombie(processId, handle);\r\n\r\n                    var fileNameBuilder = new StringBuilder(260);\r\n                    uint bufferLength = (uint)fileNameBuilder.Capacity;\r\n                    if (Kernel32.QueryFullProcessImageName(handle, 0, fileNameBuilder, ref bufferLength) != 0)\r\n                    {\r\n                        if (fileNameBuilder.Length > 0)\r\n                        {\r\n                            var processFullPath = fileNameBuilder.ToString();\r\n                            ExeName = Path.GetFileNameWithoutExtension(processFullPath);\r\n                            SmallLogoPath = processFullPath;\r\n                            PackageInstallPath = processFullPath;\r\n                        }\r\n                    }\r\n                }\r\n                finally\r\n                {\r\n                    Kernel32.CloseHandle(handle);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                trackProcess = false;\r\n\r\n                if (TryGetExecutableNameViaNtByPid(processId, out var imageName))\r\n                {\r\n                    ExeName = Path.GetFileNameWithoutExtension(imageName);\r\n                    SmallLogoPath = imageName;\r\n                    PackageInstallPath = imageName;\r\n                }\r\n                else\r\n                {\r\n                    throw new ZombieProcessException(processId);\r\n                }\r\n            }\r\n\r\n            // Display Name priority:\r\n            // - AppsFolder\r\n            // - A window caption\r\n            // - Exe Name\r\n\r\n            try\r\n            {\r\n                var appResolver = (IApplicationResolver)new ApplicationResolver();\r\n                appResolver.GetAppIDForProcess((uint)processId, out string appId, out _, out _, out _);\r\n                Marshal.ReleaseComObject(appResolver);\r\n\r\n                var shellItem = Shell32.SHCreateItemInKnownFolder(FolderIds.AppsFolder, Shell32.KF_FLAG_DONT_VERIFY, appId, typeof(IShellItem2).GUID);\r\n                DisplayName = shellItem.GetString(ref PropertyKeys.PKEY_ItemNameDisplay);\r\n            }\r\n            catch (COMException ex)\r\n            {\r\n                Trace.WriteLine($\"DesktopAppInfo DisplayName read failed {ExeName} 0x{((uint)ex.HResult).ToString(\"x\")}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"DesktopAppInfo DisplayName read failed {ExeName} {ex}\");\r\n            }\r\n\r\n            if (string.IsNullOrWhiteSpace(DisplayName))\r\n            {\r\n                try\r\n                {\r\n                    using (var proc = Process.GetProcessById(_processId))\r\n                    {\r\n                        DisplayName = proc.MainWindowTitle;\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine(ex);\r\n                }\r\n            }\r\n\r\n            if (trackProcess)\r\n            {\r\n                ProcessWatcherService.WatchProcess(processId, (pid) => Stopped?.Invoke(this));\r\n            }\r\n        }\r\n\r\n        private static bool TryGetExecutableNameViaNtByPid(int processId, out string executableName)\r\n        {\r\n            bool executableNameRetrieved = false;\r\n            executableName = \"\";\r\n\r\n            var ntstatus = Ntdll.NtQuerySystemInformationInitial(\r\n                Ntdll.SYSTEM_INFORMATION_CLASS.SystemProcessInformation,\r\n                IntPtr.Zero,\r\n                0,\r\n                out int requiredBufferLength);\r\n\r\n            if (ntstatus == Ntdll.NTSTATUS.STATUS_INFO_LENGTH_MISMATCH)\r\n            {\r\n                var buffer = Marshal.AllocHGlobal(requiredBufferLength);\r\n                ntstatus = Ntdll.NtQuerySystemInformation(\r\n                    Ntdll.SYSTEM_INFORMATION_CLASS.SystemProcessInformation,\r\n                    buffer,\r\n                    requiredBufferLength,\r\n                    IntPtr.Zero);\r\n\r\n                if (ntstatus == Ntdll.NTSTATUS.SUCCESS)\r\n                {\r\n                    Ntdll.SYSTEM_PROCESS_INFORMATION processInfo;\r\n                    IntPtr entryPtr = buffer;\r\n                    do\r\n                    {\r\n                        processInfo = Marshal.PtrToStructure<Ntdll.SYSTEM_PROCESS_INFORMATION>(entryPtr);\r\n                        if (processInfo.UniqueProcessId == processId && processInfo.ImageName.Buffer != IntPtr.Zero)\r\n                        {\r\n                            executableName = Marshal.PtrToStringUni(processInfo.ImageName.Buffer, processInfo.ImageName.Length / 2);\r\n                            executableNameRetrieved = true;\r\n                            break;\r\n                        }\r\n                        entryPtr += processInfo.NextEntryOffset;\r\n                    } while (processInfo.NextEntryOffset != 0);\r\n                }\r\n                Marshal.FreeHGlobal(buffer);\r\n            }\r\n            return executableNameRetrieved;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/Internal/ModernAppInfo.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation.Internal\r\n{\r\n    class ModernAppInfo : IAppInfo\r\n    {\r\n        public event Action<IAppInfo> Stopped;\r\n\r\n        public string ExeName { get; }\r\n        public string DisplayName { get; }\r\n        public string PackageInstallPath { get; }\r\n        public string SmallLogoPath { get; }\r\n        public bool IsDesktopApp => false;\r\n\r\n        private int _processId;\r\n\r\n        public ModernAppInfo(int processId, bool trackProcess)\r\n        {\r\n            _processId = processId;\r\n\r\n            var appUserModelId = GetAppUserModelIdByPid(processId);\r\n\r\n            try\r\n            {\r\n                var shellItem = Shell32.SHCreateItemInKnownFolder(FolderIds.AppsFolder, Shell32.KF_FLAG_DONT_VERIFY, appUserModelId, typeof(IShellItem2).GUID);\r\n                PackageInstallPath = shellItem.GetString(ref PropertyKeys.PKEY_AppUserModel_PackageInstallPath);\r\n                DisplayName = shellItem.GetString(ref PropertyKeys.PKEY_ItemNameDisplay);\r\n                ExeName = PackageInstallPath;\r\n                SmallLogoPath = appUserModelId;\r\n            }\r\n            catch (COMException ex)\r\n            {\r\n                Trace.WriteLine($\"ModernAppInfo AppsFolder lookup failed 0x{((uint)ex.HResult).ToString(\"x\")} {appUserModelId}\");\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"ModernAppInfo AppsFolder lookup failed {appUserModelId} {ex}\");\r\n            }\r\n\r\n            if (string.IsNullOrWhiteSpace(DisplayName))\r\n            {\r\n                DisplayName = appUserModelId;\r\n            }\r\n\r\n            if (trackProcess)\r\n            {\r\n                ProcessWatcherService.WatchProcess(processId, (pid) => Stopped?.Invoke(this));\r\n            }\r\n        }\r\n\r\n        private static string GetAppUserModelIdByPid(int processId)\r\n        {\r\n            string appUserModelId = string.Empty;\r\n\r\n            var processHandle = Kernel32.OpenProcess(Kernel32.ProcessFlags.PROCESS_QUERY_LIMITED_INFORMATION | Kernel32.ProcessFlags.SYNCHRONIZE, false, processId);\r\n            if (processHandle != IntPtr.Zero)\r\n            {\r\n                try\r\n                {\r\n                    ZombieProcessException.ThrowIfZombie(processId, processHandle);\r\n\r\n                    int amuidBufferLength = Kernel32.MAX_AUMID_LEN;\r\n                    var amuidBuffer = new StringBuilder(amuidBufferLength);\r\n\r\n                    Kernel32.GetApplicationUserModelId(processHandle, ref amuidBufferLength, amuidBuffer);\r\n                    appUserModelId = amuidBuffer.ToString();\r\n                }\r\n                finally\r\n                {\r\n                    Kernel32.CloseHandle(processHandle);\r\n                }\r\n\r\n                // We may receive an AUMID for an app in a package that doesn't have\r\n                // the metadata we need (e.g. Skype). If the AUMID doesn't resolve to\r\n                // an app, we need to bust open the package, find the main app, and\r\n                // retrieve the metadata we need.\r\n                if (!CanResolveAppByApplicationUserModelId(appUserModelId))\r\n                {\r\n                    int packageFamilyNameLength = Kernel32.PACKAGE_FAMILY_NAME_MAX_LENGTH_INCL_Z;\r\n                    var packageFamilyNameBuilder = new StringBuilder(packageFamilyNameLength);\r\n\r\n                    int packageRelativeApplicationIdLength = Kernel32.PACKAGE_RELATIVE_APPLICATION_ID_MAX_LENGTH_INCL_Z;\r\n                    var packageRelativeApplicationIdBuilder = new StringBuilder(packageRelativeApplicationIdLength);\r\n\r\n                    Kernel32.ParseApplicationUserModelId(\r\n                        appUserModelId,\r\n                        ref packageFamilyNameLength,\r\n                        packageFamilyNameBuilder,\r\n                        ref packageRelativeApplicationIdLength,\r\n                        packageRelativeApplicationIdBuilder);\r\n\r\n                    string packageFamilyName = packageFamilyNameBuilder.ToString();\r\n\r\n                    int packageCount = 0;\r\n                    int packageNamesBufferLength = 0;\r\n                    Kernel32.FindPackagesByPackageFamilyInitial(\r\n                        packageFamilyName,\r\n                        Kernel32.PACKAGE_FILTER_HEAD | Kernel32.PACKAGE_INFORMATION_BASIC,\r\n                        ref packageCount,\r\n                        IntPtr.Zero,\r\n                        ref packageNamesBufferLength,\r\n                        IntPtr.Zero,\r\n                        IntPtr.Zero);\r\n\r\n                    if (packageCount > 0)\r\n                    {\r\n                        var pointers = new IntPtr[packageCount];\r\n                        IntPtr buffer = Marshal.AllocHGlobal(packageNamesBufferLength * Kernel32.SIZEOF_WCHAR);\r\n\r\n                        Kernel32.FindPackagesByPackageFamily(\r\n                            packageFamilyName,\r\n                            Kernel32.PACKAGE_FILTER_HEAD | Kernel32.PACKAGE_INFORMATION_BASIC,\r\n                            ref packageCount,\r\n                            pointers,\r\n                            ref packageNamesBufferLength,\r\n                            buffer,\r\n                            IntPtr.Zero);\r\n\r\n                        var packageFullName = Marshal.PtrToStringUni(pointers[0]);\r\n                        Marshal.FreeHGlobal(buffer);\r\n\r\n                        Kernel32.OpenPackageInfoByFullName(packageFullName, 0, out IntPtr packageInfoReference);\r\n\r\n                        int bufferLength = 0;\r\n                        Kernel32.GetPackageApplicationIds(packageInfoReference, ref bufferLength, IntPtr.Zero, out int appIdCount);\r\n\r\n                        buffer = Marshal.AllocHGlobal(bufferLength);\r\n                        Kernel32.GetPackageApplicationIds(packageInfoReference, ref bufferLength, buffer, out appIdCount);\r\n\r\n                        appUserModelId = Marshal.PtrToStringUni(Marshal.ReadIntPtr(buffer));\r\n                        Marshal.FreeHGlobal(buffer);\r\n\r\n                        Kernel32.ClosePackageInfo(packageInfoReference);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                throw new ZombieProcessException(processId);\r\n            }\r\n\r\n            return appUserModelId;\r\n        }\r\n\r\n        private static bool CanResolveAppByApplicationUserModelId(string aumid)\r\n        {\r\n            try\r\n            {\r\n                Shell32.SHCreateItemInKnownFolder(FolderIds.AppsFolder, Shell32.KF_FLAG_DONT_VERIFY, aumid, typeof(IShellItem2).GUID);\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"{ex}\");\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/Internal/SystemSoundsAppInfo.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation.Internal\r\n{\r\n    class SystemSoundsAppInfo : IAppInfo\r\n    {\r\n        public event Action<IAppInfo> Stopped { add { } remove { } }\r\n        public uint BackgroundColor => 0x000000;\r\n        public string ExeName => \"*SystemSounds\";\r\n        public string DisplayName => null;\r\n        public string PackageInstallPath => \"System.SystemSoundsSession\";\r\n        public bool IsDesktopApp => true;\r\n        public string SmallLogoPath { get; set; }\r\n\r\n        public SystemSoundsAppInfo()\r\n        {\r\n            SmallLogoPath = Environment.ExpandEnvironmentVariables(Is64BitOperatingSystem() ? \r\n                @\"%windir%\\sysnative\\audiosrv.dll,203\" : @\"%windir%\\system32\\audiosrv.dll,203\");\r\n        }\r\n\r\n        private static bool Is64BitOperatingSystem()\r\n        {\r\n            if (Environment.Is64BitOperatingSystem)\r\n            {\r\n                return true; // Shortcut for AMD64 machines\r\n            }\r\n\r\n            bool is64bit = false;\r\n            if (Environment.OSVersion.IsAtLeast(OSVersions.RS3))\r\n            {\r\n                if (Kernel32.IsWow64Process2(Process.GetCurrentProcess().Handle,\r\n                    out Kernel32.IMAGE_FILE_MACHINE processMachine,\r\n                    out Kernel32.IMAGE_FILE_MACHINE nativeMachine))\r\n                {\r\n                    is64bit =\r\n                        nativeMachine == Kernel32.IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_AMD64 ||\r\n                        nativeMachine == Kernel32.IMAGE_FILE_MACHINE.IMAGE_FILE_MACHINE_ARM64;\r\n                }\r\n            }\r\n\r\n            return is64bit;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/AppInformation/Internal/ZombieProcessException.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\n\r\nnamespace EarTrumpet.DataModel.AppInformation.Internal\r\n{\r\n    public class ZombieProcessException : Exception\r\n    {\r\n        public ZombieProcessException(int processId) : base($\"Process is a zombie: {processId}\") { }\r\n\r\n        public static void ThrowIfZombie(int processId, IntPtr handle)\r\n        {\r\n            if (Kernel32.WaitForSingleObject(handle, 0) != Kernel32.WAIT_TIMEOUT)\r\n            {\r\n                throw new ZombieProcessException(processId);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/IAudioDevice.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.DataModel.Audio\r\n{\r\n    public interface IAudioDevice : IStreamWithVolumeControl\r\n    {\r\n        string DisplayName { get; }\r\n        string IconPath { get; }\r\n        IAudioDeviceManager Parent { get; }\r\n        ObservableCollection<IAudioDeviceSession> Groups { get; }\r\n        void AddFilter(Func<ObservableCollection<IAudioDeviceSession>, ObservableCollection<IAudioDeviceSession>> filter);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/IAudioDeviceManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.DataModel.Audio\r\n{\r\n    public interface IAudioDeviceManager\r\n    {\r\n        event EventHandler<IAudioDevice> DefaultChanged;\r\n        event EventHandler Loaded;\r\n        IAudioDevice Default { get; set; }\r\n        ObservableCollection<IAudioDevice> Devices { get; }\r\n        string Kind { get; }\r\n        void UpdatePeakValues();\r\n        void AddFilter(Func<ObservableCollection<IAudioDevice>, ObservableCollection<IAudioDevice>> filter);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/IAudioDeviceSession.cs",
    "content": "﻿using EarTrumpet.DataModel.WindowsAudio;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.DataModel.Audio\r\n{\r\n    public interface IAudioDeviceSession : IStreamWithVolumeControl\r\n    {\r\n        IEnumerable<IAudioDeviceSessionChannel> Channels { get; }\r\n        IAudioDevice Parent { get; }\r\n        string DisplayName { get; }\r\n        string ExeName { get; }\r\n        string IconPath { get; }\r\n        bool IsDesktopApp { get; }\r\n        bool IsSystemSoundsSession { get; }\r\n        int ProcessId { get; }\r\n        string AppId { get; }\r\n        SessionState State { get; }\r\n        ObservableCollection<IAudioDeviceSession> Children { get; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/IAudioDeviceSessionComparer.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.DataModel.Audio\r\n{\r\n    public class IAudioDeviceSessionComparer : IEqualityComparer<IAudioDeviceSession>\r\n    {\r\n        public static readonly IAudioDeviceSessionComparer Instance = new IAudioDeviceSessionComparer();\r\n\r\n        public bool Equals(IAudioDeviceSession x, IAudioDeviceSession y)\r\n        {\r\n            return x.AppId.Equals(y.AppId);\r\n        }\r\n\r\n        public int GetHashCode(IAudioDeviceSession obj)\r\n        {\r\n            return obj.AppId.GetHashCode();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/IStreamWithVolumeControl.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace EarTrumpet.DataModel.Audio\r\n{\r\n    public interface IStreamWithVolumeControl : INotifyPropertyChanged\r\n    {\r\n        string Id { get; }\r\n        bool IsMuted { get; set; }\r\n        float Volume { get; set; }\r\n        float PeakValue1 { get; }\r\n        float PeakValue2 { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/Mocks/AudioDevice.cs",
    "content": "﻿using EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.DataModel.WindowsAudio.Internal;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\n\r\n#if DEBUG\r\nnamespace EarTrumpet.DataModel.Audio.Mocks\r\n{\r\n    class AudioDevice : BindableBase, IAudioDevice, IAudioDeviceInternal, IAudioDeviceWindowsAudio\r\n    {\r\n        public AudioDevice(string id, IAudioDeviceManager parent)\r\n        {\r\n            Parent = parent;\r\n            Id = id;\r\n        }\r\n\r\n        public string DisplayName => Id;\r\n\r\n        public string IconPath => null;\r\n\r\n        public IAudioDeviceManager Parent { get; }\r\n\r\n        public ObservableCollection<IAudioDeviceSession> Groups { get; } = new ObservableCollection<IAudioDeviceSession>();\r\n\r\n        public string Id { get; }\r\n\r\n        private bool _isMuted;\r\n        public bool IsMuted\r\n        {\r\n            get => _isMuted;\r\n            set\r\n            {\r\n                if (_isMuted != value)\r\n                {\r\n                    _isMuted = value;\r\n                    RaisePropertyChanged(nameof(IsMuted));\r\n                }\r\n            }\r\n        }\r\n        private float _volume = 1;\r\n        public float Volume\r\n        {\r\n            get\r\n            {\r\n                return App.Settings.UseLogarithmicVolume ? _volume.ToDisplayVolume() : _volume;\r\n            }\r\n\r\n            set\r\n            {\r\n                if (App.Settings.UseLogarithmicVolume)\r\n                {\r\n                    value = value.ToLogVolume();\r\n                }\r\n\r\n                if (_volume != value)\r\n                {\r\n                    _volume = value;\r\n                    RaisePropertyChanged(nameof(Volume));\r\n                }\r\n            }\r\n        }\r\n\r\n        public float PeakValue1 { get; set; }\r\n        public float PeakValue2 { get; set; }\r\n        public IEnumerable<IAudioDeviceChannel> Channels { get; } = new List<IAudioDeviceChannel>();\r\n        public string EnumeratorName => \"Mock Enumerator\";\r\n        public string InterfaceName => \"Mock Interface\";\r\n        public string DeviceDescription => \"Mock Description\";\r\n\r\n        public void AddFilter(Func<ObservableCollection<IAudioDeviceSession>, ObservableCollection<IAudioDeviceSession>> filter)\r\n        {\r\n        }\r\n\r\n        public void UpdatePeakValue()\r\n        {\r\n        }\r\n\r\n        public void MoveHiddenAppsToDevice(string appId, string id)\r\n        {\r\n        }\r\n\r\n        public void UnhideSessionsForProcessId(int processId)\r\n        {\r\n        }\r\n    }\r\n}\r\n#endif"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/Mocks/AudioDeviceSession.cs",
    "content": "﻿using EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.DataModel.WindowsAudio.Internal;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\n\r\n#if DEBUG\r\nnamespace EarTrumpet.DataModel.Audio.Mocks\r\n{\r\n    class AudioDeviceSession : BindableBase, IAudioDeviceSessionInternal\r\n    {\r\n        public IEnumerable<IAudioDeviceSessionChannel> Channels => throw new NotImplementedException();\r\n\r\n        public IAudioDevice Parent { get; }\r\n\r\n        public string DisplayName { get; }\r\n\r\n        public string ExeName => AppId;\r\n\r\n        public uint BackgroundColor { get; }\r\n\r\n        public string IconPath { get; }\r\n\r\n        public bool IsDesktopApp { get; }\r\n\r\n        public bool IsSystemSoundsSession { get; }\r\n\r\n        public int ProcessId { get; }\r\n\r\n        public string AppId { get; }\r\n\r\n        public SessionState State { get; private set; }\r\n\r\n        public ObservableCollection<IAudioDeviceSession> Children { get; } = new ObservableCollection<IAudioDeviceSession>();\r\n        public string Id { get; }\r\n\r\n        private bool _isMuted;\r\n        public bool IsMuted\r\n        {\r\n            get => _isMuted;\r\n            set\r\n            {\r\n                if (_isMuted != value)\r\n                {\r\n                    _isMuted = value;\r\n                    RaisePropertyChanged(nameof(IsMuted));\r\n                }\r\n            }\r\n        }\r\n        private float _volume = 1;\r\n        public float Volume\r\n        {\r\n            get\r\n            {\r\n                return App.Settings.UseLogarithmicVolume ? _volume.ToDisplayVolume() : _volume;\r\n            }\r\n\r\n            set\r\n            {\r\n                if (App.Settings.UseLogarithmicVolume)\r\n                {\r\n                    value = value.ToLogVolume();\r\n                }\r\n\r\n                if (_volume != value)\r\n                {\r\n                    _volume = value;\r\n                    RaisePropertyChanged(nameof(Volume));\r\n                }\r\n            }\r\n        }\r\n\r\n        public float PeakValue1 { get; set; }\r\n\r\n        public float PeakValue2 { get; set; }\r\n\r\n        public Guid GroupingParam => Guid.Empty;\r\n\r\n        public AudioDeviceSession(IAudioDevice parent, string id, string displayName, string appId, string iconPath)\r\n        {\r\n            DisplayName = displayName;\r\n            Id = id;\r\n            AppId = appId;\r\n            IconPath = iconPath;\r\n            Parent = parent;\r\n            IsDesktopApp = true;\r\n        }\r\n\r\n        public void Hide()\r\n        {\r\n \r\n        }\r\n\r\n        public void UnHide()\r\n        {\r\n    \r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hide)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void UpdatePeakValueBackground()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n#endif\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Audio/SessionState.cs",
    "content": "﻿namespace EarTrumpet.DataModel.Audio\r\n{\r\n    public enum SessionState\r\n    {\r\n        Invalid = 0,\r\n        Expired = 1,\r\n        Moved = 2,\r\n        Inactive = 3,\r\n        Active = 4,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/FilteredCollectionChain.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel\r\n{\r\n    public class FilteredCollectionChain<T>\r\n    {\r\n        ObservableCollection<T> _items;\r\n\r\n        public ObservableCollection<T> Items { get; }\r\n\r\n        public FilteredCollectionChain(ObservableCollection<T> items, Dispatcher foregroundDispatcher)\r\n        {\r\n            Items = new ObservableCollection<T>();\r\n\r\n            _items = items;\r\n\r\n            foregroundDispatcher.BeginInvoke((Action)(() => {\r\n                Listen();\r\n                Populate();\r\n            }));\r\n        }\r\n\r\n        void Listen()\r\n        {\r\n            _items.CollectionChanged += Sessions_CollectionChanged;\r\n        }\r\n\r\n        void Free()\r\n        {\r\n            _items.CollectionChanged -= Sessions_CollectionChanged;\r\n        }\r\n\r\n        private void Sessions_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Add:\r\n                    Items.Add((T)e.NewItems[0]);\r\n                    break;\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:\r\n                    Items.Remove((T)e.OldItems[0]);\r\n                    break;\r\n                default: throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        public void AddFilter(Func<ObservableCollection<T>, ObservableCollection<T>> filter)\r\n        {\r\n            Free();\r\n            _items = filter(_items);\r\n            Listen();\r\n            Populate();\r\n        }\r\n\r\n        private void Populate()\r\n        {\r\n            foreach(var s in _items)\r\n            {\r\n                if (!Items.Contains(s))\r\n                {\r\n                    Items.Add(s);\r\n                }\r\n            }\r\n\r\n            var filtered = Items.Where(i => !_items.Contains(i)).ToArray();\r\n            foreach(var item in filtered)\r\n            {\r\n                Items.Remove(item);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/ProcessWatcherService.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading;\r\n\r\nnamespace EarTrumpet.DataModel\r\n{\r\n    // Monitors a list of processes by Process Id.\r\n    // Uses a single background thread to monitor N processes for quit.\r\n    public class ProcessWatcherService\r\n    {\r\n        class ProcessWatcherData\r\n        {\r\n            public int processId;\r\n            public List<Action<int>> quitActions = new List<Action<int>>();\r\n            public IntPtr processHandle;\r\n        }\r\n\r\n        private static readonly object _lock = new object();\r\n\r\n        // Protected by _lock.\r\n        private static readonly Dictionary<int, ProcessWatcherData> s_watchers = new Dictionary<int, ProcessWatcherData>();\r\n        // Protected by _lock.\r\n        private static bool _threadRunning;\r\n\r\n        public static void WatchProcess(int processId, Action<int> processQuit)\r\n        {\r\n            var data = new ProcessWatcherData\r\n            {\r\n                processId = processId,\r\n                processHandle = Kernel32.OpenProcess(Kernel32.ProcessFlags.SYNCHRONIZE, false, processId)\r\n            };\r\n            data.quitActions.Add(processQuit);\r\n\r\n            if (Kernel32.WaitForSingleObject(data.processHandle, 0) != Kernel32.WAIT_TIMEOUT)\r\n            {\r\n                Trace.WriteLine($\"ProcessWatcherService WatchProcess Error: Unwatchable handle: {processId}\");\r\n                Kernel32.CloseHandle(data.processHandle);\r\n                return;\r\n            }\r\n\r\n            lock (_lock)\r\n            {\r\n                if (s_watchers.ContainsKey(processId))\r\n                {\r\n                    // We lost the race, add our callback and clean up.\r\n                    s_watchers[processId].quitActions.Add(processQuit);\r\n                    Kernel32.CloseHandle(data.processHandle);\r\n                }\r\n                else\r\n                {\r\n                    // Transfer ownership\r\n                    s_watchers.Add(processId, data);\r\n                }\r\n            }\r\n\r\n            EnsureWatcherThreadRunning();\r\n        }\r\n\r\n        private static void EnsureWatcherThreadRunning()\r\n        {\r\n            bool needsNewThread;\r\n            lock (_lock)\r\n            {\r\n                needsNewThread = !_threadRunning;\r\n                if (needsNewThread)\r\n                {\r\n                    _threadRunning = true;\r\n                }\r\n            }\r\n\r\n            if (needsNewThread)\r\n            {\r\n                new Thread(() =>\r\n                {\r\n                    Thread.CurrentThread.IsBackground = true;\r\n\r\n                    bool quit = false;\r\n                    while (_threadRunning && !quit)\r\n                    {\r\n                        IntPtr[] handles;\r\n                        lock (_lock)\r\n                        {\r\n                            handles = s_watchers.Select(w => w.Value.processHandle).ToArray();\r\n                        }\r\n\r\n                        var returnValue = Kernel32.WaitForMultipleObjects(handles.Length, handles, false, (int)TimeSpan.FromSeconds(5).TotalMilliseconds);\r\n                        switch(returnValue)\r\n                        {\r\n                            // We never expect to see WAIT_ABANDONED since we are only waiting on process handles.\r\n                            case Kernel32.WAIT_ABANDONED:\r\n                            // We don't expect WAIT_FAILED here since we did a test WaitForSingleObject on each handle before ingestion.\r\n                            case Kernel32.WAIT_FAILED:\r\n                                Debug.Assert(false);\r\n                                // Avoid creating an infintite loop if we end up with a bad handle causing WAIT_FAILED.\r\n                                Thread.Sleep(TimeSpan.FromSeconds(5));\r\n                                break;\r\n                            case Kernel32.WAIT_TIMEOUT:\r\n                                // Go again\r\n                                break;\r\n                            default:\r\n                                ProcessWatcherData data;\r\n                                lock (_lock)\r\n                                {\r\n                                    var handle = handles[returnValue];\r\n                                    data = s_watchers.First(w => w.Value.processHandle == handle).Value;\r\n\r\n                                    s_watchers.Remove(data.processId);\r\n                                    _threadRunning = s_watchers.Count > 0;\r\n                                    quit = !_threadRunning;\r\n                                }\r\n\r\n                                Trace.WriteLine($\"ProcessWatcherService Quit: {data.processId}\");\r\n\r\n                                foreach (var act in data.quitActions)\r\n                                {\r\n                                    act(data.processId);\r\n                                }\r\n\r\n                                Kernel32.CloseHandle(data.processHandle);\r\n                                break;\r\n                        }\r\n                    }\r\n                }).Start();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/ISettingsBag.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.DataModel.Storage\r\n{\r\n    public interface ISettingsBag\r\n    {\r\n        string Namespace { get; }\r\n        bool HasKey(string key);\r\n        T Get<T>(string key, T defaultValue);\r\n        void Set<T>(string key, T value);\r\n\r\n        event EventHandler<string> SettingChanged;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/Internal/NamespacedSettingsBag.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.DataModel.Storage.Internal\r\n{\r\n    class NamespacedSettingsBag : ISettingsBag\r\n    {\r\n        public string Namespace { get; }\r\n\r\n        public event EventHandler<string> SettingChanged;\r\n\r\n        private readonly ISettingsBag _globalBag;\r\n\r\n        public NamespacedSettingsBag(string nameSpace, ISettingsBag bag)\r\n        {\r\n            Namespace = nameSpace + \".\";\r\n            _globalBag = bag;\r\n        }\r\n\r\n\r\n        public T Get<T>(string key, T defaultValue)\r\n        {\r\n            return _globalBag.Get($\"{Namespace}{key}\", defaultValue);\r\n        }\r\n\r\n        public bool HasKey(string key)\r\n        {\r\n            return _globalBag.HasKey($\"{Namespace}{key}\");\r\n        }\r\n\r\n        public void Set<T>(string key, T value)\r\n        {\r\n            _globalBag.Set($\"{Namespace}{key}\", value);\r\n            SettingChanged?.Invoke(this, key);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/Internal/RegistrySettingsBag.cs",
    "content": "﻿using Microsoft.Win32;\r\nusing System;\r\n\r\nnamespace EarTrumpet.DataModel.Storage.Internal\r\n{\r\n    class RegistrySettingsBag : ISettingsBag\r\n    {\r\n        private static readonly string s_earTrumpetKey = @\"Software\\EarTrumpet\";\r\n\r\n        public string Namespace => \"\";\r\n\r\n        public event EventHandler<string> SettingChanged;\r\n\r\n        public bool HasKey(string key)\r\n        {\r\n            using (var regKey = Registry.CurrentUser.CreateSubKey(s_earTrumpetKey, true))\r\n            {\r\n                return regKey.GetValue(key) != null;\r\n            }\r\n        }\r\n\r\n        public T Get<T>(string key, T defaultValue)\r\n        {\r\n            if (defaultValue is string)\r\n            {\r\n                return ReadSetting<T>(key, defaultValue);\r\n            }\r\n\r\n            var data = ReadSetting<string>(key, null);\r\n            if (string.IsNullOrWhiteSpace(data))\r\n            {\r\n                return defaultValue;\r\n            }\r\n\r\n            return Serializer.FromString<T>(data);\r\n        }\r\n\r\n        public void Set<T>(string key, T value)\r\n        {\r\n            if (value is string)\r\n            {\r\n                WriteSetting<T>(key, value);\r\n            }\r\n            else\r\n            {\r\n                WriteSetting(key, Serializer.ToString(key, value));\r\n            }\r\n\r\n            SettingChanged?.Invoke(this, key);\r\n        }\r\n\r\n        static T ReadSetting<T>(string key, T defaultValue)\r\n        {\r\n            using (var regKey = Registry.CurrentUser.CreateSubKey(s_earTrumpetKey, true))\r\n            {\r\n                T ret = defaultValue;\r\n                try\r\n                {\r\n                    ret = (T)regKey.GetValue(key);\r\n                }\r\n                catch (Exception)\r\n                {\r\n                    ret = defaultValue;\r\n                }\r\n                return ret;\r\n            }\r\n        }\r\n\r\n        static void WriteSetting<T>(string key, T value)\r\n        {\r\n            using (var regKey = Registry.CurrentUser.CreateSubKey(s_earTrumpetKey, true))\r\n            {\r\n                regKey.SetValue(key, value);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/Internal/WindowsStorageSettingsBag.cs",
    "content": "﻿using EarTrumpet.Diagnosis;\r\nusing System;\r\nusing Windows.Management.Core;\r\nusing Windows.Storage;\r\n\r\nnamespace EarTrumpet.DataModel.Storage.Internal\r\n{\r\n    class WindowsStorageSettingsBag : ISettingsBag\r\n    {\r\n        private static readonly ApplicationData _appDataManager = ApplicationDataManager.CreateForPackageFamily(App.PackageName);\r\n\r\n        public string Namespace => \"\";\r\n        public event EventHandler<string> SettingChanged;\r\n\r\n        public bool HasKey(string key)\r\n        {\r\n            var ret = false;\r\n            try\r\n            {\r\n                ret = _appDataManager.LocalSettings.Values.ContainsKey(key);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                ErrorReporter.LogWarning(ex);\r\n            }\r\n            return ret;\r\n        }\r\n\r\n        public T Get<T>(string key, T defaultValue)\r\n        {\r\n            if (!HasKey(key))\r\n            {\r\n                return defaultValue;\r\n            }\r\n\r\n            if (defaultValue is bool || defaultValue is string)\r\n            {\r\n                return ReadSetting<T>(key, defaultValue);\r\n            }\r\n\r\n            var data = ReadSetting<string>(key, null);\r\n            if (string.IsNullOrWhiteSpace(data))\r\n            {\r\n                return defaultValue;\r\n            }\r\n\r\n            return Serializer.FromString<T>(data);\r\n        }\r\n\r\n        public void Set<T>(string key, T value)\r\n        {\r\n            if (value is bool || value is string)\r\n            {\r\n                WriteSetting<T>(key, value);\r\n            }\r\n            else\r\n            {\r\n                WriteSetting(key, Serializer.ToString(key, value));\r\n            }\r\n\r\n            SettingChanged?.Invoke(this, key);\r\n        }\r\n\r\n        static T ReadSetting<T>(string key, T defaultValue)\r\n        {\r\n            T ret = defaultValue;\r\n            try\r\n            {\r\n                ret = (T)_appDataManager.LocalSettings.Values[key];\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                ErrorReporter.LogWarning(ex);\r\n            }\r\n            return ret;\r\n        }\r\n\r\n        static void WriteSetting<T>(string key, T value)\r\n        {\r\n            try\r\n            {\r\n                _appDataManager.LocalSettings.Values[key] = value;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                ErrorReporter.LogWarning(ex);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/Serializer.cs",
    "content": "﻿using System.IO;\r\nusing System.Xml;\r\nusing System.Xml.Serialization;\r\n\r\nnamespace EarTrumpet.DataModel.Storage\r\n{\r\n    public class Serializer\r\n    {\r\n        public static T FromString<T>(string data)\r\n        {\r\n            using (var reader = new StringReader(data))\r\n            {\r\n                return (T)new XmlSerializer(typeof(T)).Deserialize(reader);\r\n            }\r\n        }\r\n\r\n        public static string ToString<T>(string key, T value)\r\n        {\r\n            var xmlserializer = new XmlSerializer(typeof(T));\r\n            using (var stringWriter = new StringWriter())\r\n            {\r\n                using (var writer = XmlWriter.Create(stringWriter))\r\n                {\r\n                    xmlserializer.Serialize(writer, value);\r\n                    return stringWriter.ToString();\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/Storage/StorageFactory.cs",
    "content": "﻿namespace EarTrumpet.DataModel.Storage\r\n{\r\n    public class StorageFactory\r\n    {\r\n        private static ISettingsBag s_globalSettings;\r\n\r\n        static StorageFactory()\r\n        {\r\n            s_globalSettings = App.HasIdentity ? (ISettingsBag)new Internal.WindowsStorageSettingsBag() : new Internal.RegistrySettingsBag();\r\n        }\r\n\r\n        public static ISettingsBag GetSettings(string nameSpace = null)\r\n        {\r\n            return (nameSpace == null) ? s_globalSettings :\r\n                new Internal.NamespacedSettingsBag(nameSpace, s_globalSettings);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/SystemSettings.cs",
    "content": "﻿using Microsoft.Win32;\r\nusing System.Globalization;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\n\r\nnamespace EarTrumpet.DataModel\r\n{\r\n    public static class SystemSettings\r\n    {\r\n        static readonly string s_PersonalizeKey = @\"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize\";\r\n\r\n        public static bool IsTransparencyEnabled => ReadDword(s_PersonalizeKey, \"EnableTransparency\");\r\n        public static bool UseAccentColor => ReadDword(s_PersonalizeKey, \"ColorPrevalence\");\r\n        public static bool IsLightTheme => ReadDword(s_PersonalizeKey, \"AppsUseLightTheme\", 1);\r\n        public static bool IsSystemLightTheme => LightThemeShim(ReadDword(s_PersonalizeKey, \"SystemUsesLightTheme\"));\r\n        public static bool UseDynamicScrollbars => ReadDword(@\"Control Panel\\Accessibility\", \"DynamicScrollbars\", 1);\r\n        public static bool UseAccentColorOnWindowBorders => ReadDword(@\"Software\\Microsoft\\Windows\\DWM\", \"ColorPrevalence\");\r\n        public static bool IsRTL => CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;\r\n\r\n        public static string BuildLabel\r\n        {\r\n            get\r\n            {\r\n                using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))\r\n                using (var subKey = baseKey.OpenSubKey(@\"Software\\Microsoft\\Windows NT\\CurrentVersion\"))\r\n                {\r\n                    return (string)subKey.GetValue(\"BuildLabEx\", \"No BuildLabEx set\");\r\n                }\r\n            }\r\n        }\r\n\r\n        private static bool ReadDword(string key, string valueName, int defaultValue = 0)\r\n        {\r\n            using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64))\r\n            using (var subKey = baseKey.OpenSubKey(key))\r\n            {\r\n                return subKey.GetValue<int>(valueName, defaultValue) > 0;\r\n            }\r\n        }\r\n\r\n        private static bool LightThemeShim(bool registryValue)\r\n        {\r\n            if (Environment.OSVersion.IsGreaterThan(OSVersions.RS5_1809))\r\n            {\r\n                return registryValue;\r\n            }\r\n            return false; // No system theme prior to 19H1/RS6.\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/AudioDeviceKind.cs",
    "content": "﻿namespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public enum AudioDeviceKind\r\n    {\r\n        Playback,\r\n        Recording\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/IAudioDeviceChannel.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public interface IAudioDeviceChannel : INotifyPropertyChanged\r\n    {\r\n        float Level { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/IAudioDeviceManagerWindowsAudio.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public interface IAudioDeviceManagerWindowsAudio\r\n    {\r\n        void SetDefaultDevice(IAudioDevice device, ERole role);\r\n        IAudioDevice GetDefaultDevice(ERole role);\r\n        void SetDefaultEndPoint(string id, int pid);\r\n        string GetDefaultEndPoint(int processId);\r\n        void MoveHiddenAppsToDevice(string appId, string deviceId);\r\n        void UnhideSessionsForProcessId(string deviceId, int processId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/IAudioDeviceSessionChannel.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public interface IAudioDeviceSessionChannel : INotifyPropertyChanged\r\n    {\r\n        float Level { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/IAudioDeviceWindowsAudio.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public interface IAudioDeviceWindowsAudio : IAudioDevice\r\n    {\r\n        IEnumerable<IAudioDeviceChannel> Channels { get; }\r\n        string EnumeratorName { get; }\r\n        string InterfaceName { get; }\r\n        string DeviceDescription { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDevice.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    public class AudioDevice : BindableBase, IAudioEndpointVolumeCallback, IAudioDevice, IAudioDeviceInternal, IAudioDeviceWindowsAudio\r\n    {\r\n        private readonly Dispatcher _dispatcher;\r\n        private readonly IAudioEndpointVolume _deviceVolume;\r\n        private readonly AudioDeviceSessionCollection _sessions;\r\n        private readonly FilteredCollectionChain<IAudioDeviceSession> _sessionFilter;\r\n        private readonly IAudioMeterInformation _meter;\r\n        private readonly WeakReference<IAudioDeviceManager> _deviceManager;\r\n        private readonly string _id;\r\n        private readonly AudioDeviceChannelCollection _channels;\r\n        private IMMDevice _device;\r\n        private string _displayName;\r\n        private string _iconPath;\r\n        private string _enumeratorName;\r\n        private string _interfaceName;\r\n        private string _deviceDescription;\r\n        private float _volume;\r\n        private bool _isMuted;\r\n        private bool _isRegistered;\r\n        private uint _speakerConfig;\r\n\r\n        public AudioDevice(IAudioDeviceManager deviceManager, IMMDevice device, Dispatcher foregroundDispatcher)\r\n        {\r\n            _device = device;\r\n            _deviceManager = new WeakReference<IAudioDeviceManager>(deviceManager);\r\n            _dispatcher = foregroundDispatcher;\r\n            _id = device.GetId();\r\n\r\n            Trace.WriteLine($\"AudioDevice Create {_id}\");\r\n\r\n            if (_device.GetState() == DeviceState.ACTIVE)\r\n            {\r\n                _deviceVolume = device.Activate<IAudioEndpointVolume>();\r\n                _deviceVolume.RegisterControlChangeNotify(this);\r\n                _deviceVolume.GetMasterVolumeLevelScalar(out _volume);\r\n                _isMuted = _deviceVolume.GetMute() != 0;\r\n                _isRegistered = true;\r\n                _meter = device.Activate<IAudioMeterInformation>();\r\n                _channels = new AudioDeviceChannelCollection(_deviceVolume, _dispatcher);\r\n                _sessions = new AudioDeviceSessionCollection(this, _device, _dispatcher);\r\n                _sessionFilter = new FilteredCollectionChain<IAudioDeviceSession>(_sessions.Sessions, _dispatcher);\r\n                Groups = _sessionFilter.Items;\r\n            }\r\n            else\r\n            {\r\n                Groups = new ObservableCollection<IAudioDeviceSession>();\r\n            }\r\n\r\n            ReadProperties();\r\n        }\r\n\r\n        ~AudioDevice()\r\n        {\r\n            try\r\n            {\r\n                if (_isRegistered)\r\n                {\r\n                    _deviceVolume.UnregisterControlChangeNotify(this);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AudioDevice .dtor Failed {ex}\");\r\n            }\r\n        }\r\n\r\n        void IAudioEndpointVolumeCallback.OnNotify(IntPtr pNotify)\r\n        {\r\n            var data = Marshal.PtrToStructure<AUDIO_VOLUME_NOTIFICATION_DATA>(pNotify);\r\n            _volume = data.fMasterVolume;\r\n            _isMuted = data.bMuted != 0;\r\n\r\n            _channels.OnNotify(pNotify, data);\r\n\r\n            _dispatcher.Invoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(Volume));\r\n                RaisePropertyChanged(nameof(IsMuted));\r\n            }));\r\n        }\r\n\r\n        public float Volume\r\n        {\r\n            get\r\n            {\r\n                return App.Settings.UseLogarithmicVolume ? _volume.ToDisplayVolume() : _volume;\r\n            }\r\n            set\r\n            {\r\n                value = value.Bound(0, 1f);\r\n\r\n                if (App.Settings.UseLogarithmicVolume)\r\n                {\r\n                    value = value.ToLogVolume();\r\n                }\r\n\r\n                if (_volume != value)\r\n                {\r\n                    try\r\n                    {\r\n                        _volume = value;\r\n                        Guid dummy = Guid.Empty;\r\n                        _deviceVolume.SetMasterVolumeLevelScalar(value, ref dummy);\r\n                    }\r\n                    catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n                    {\r\n                        // Expected in some cases.\r\n                    }\r\n\r\n                    IsMuted = App.Settings.UseLogarithmicVolume ? _volume <= (1 / 100f).ToLogVolume() : _volume.ToVolumeInt() == 0;\r\n                }\r\n            }\r\n        }\r\n\r\n        public float PeakValue1 { get; private set; }\r\n        public float PeakValue2 { get; private set; }\r\n\r\n        public bool IsMuted\r\n        {\r\n            get => _isMuted;\r\n            set\r\n            {\r\n                if (value != _isMuted)\r\n                {\r\n                    try\r\n                    {\r\n                        Guid dummy = Guid.Empty;\r\n                        _deviceVolume.SetMute(value ? 1 : 0, ref dummy);\r\n                    }\r\n                    catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n                    {\r\n                        // Expected in some cases.\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public string Id => _id;\r\n\r\n        public ObservableCollection<IAudioDeviceSession> Groups { get; }\r\n\r\n        public string DisplayName => _displayName;\r\n        public string IconPath => _iconPath;\r\n        public string EnumeratorName => _enumeratorName;\r\n        public string InterfaceName => _interfaceName;\r\n        public string DeviceDescription => _deviceDescription;\r\n\r\n        public IAudioDeviceManager Parent\r\n        {\r\n            get\r\n            {\r\n                if (_deviceManager.TryGetTarget(out var parent))\r\n                {\r\n                    return parent;\r\n                }\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public IEnumerable<IAudioDeviceChannel> Channels => _channels.Channels;\r\n\r\n        public void UpdatePeakValue()\r\n        {\r\n            var newValues = Helpers.ReadPeakValues(_meter);\r\n            PeakValue1 = newValues[0];\r\n            PeakValue2 = newValues[1];\r\n\r\n            foreach(var session in _sessions.Sessions.ToArray())\r\n            {\r\n                ((IAudioDeviceSessionInternal)session).UpdatePeakValueBackground();\r\n            }\r\n        }\r\n\r\n        public void UnhideSessionsForProcessId(int processId)\r\n        {\r\n            _sessions.UnHideSessionsForProcessId(processId);\r\n        }\r\n\r\n        public void MoveHiddenAppsToDevice(string appId, string id)\r\n        {\r\n            _sessions.MoveHiddenAppsToDevice(appId, id);\r\n        }\r\n\r\n        private void ReadProperties()\r\n        {\r\n            try\r\n            {\r\n                var propStore = _device.OpenPropertyStore(STGM.STGM_READ);\r\n                _displayName = propStore.GetValue<string>(PropertyKeys.PKEY_Device_FriendlyName);\r\n                _iconPath = propStore.GetValue<string>(PropertyKeys.DEVPKEY_DeviceClass_IconPath);\r\n                _enumeratorName = propStore.GetValue<string>(PropertyKeys.DEVPKEY_Device_EnumeratorName);\r\n                _interfaceName = propStore.GetValue<string>(PropertyKeys.DEVPKEY_DeviceInterface_FriendlyName);\r\n                _deviceDescription = propStore.GetValue<string>(PropertyKeys.DEVPKEY_Device_DeviceDesc);\r\n            }\r\n            catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n            {\r\n                // Expected in some cases.\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        private void ReadSpeakerConfiguration()\r\n        {\r\n            try\r\n            {\r\n                var propStore = _device.OpenPropertyStore(STGM.STGM_READ);\r\n                var pv = propStore.GetValue(ref PropertyKeys.PKEY_AudioEndpoint_PhysicalSpeakers);\r\n                _speakerConfig = pv.uintVal;\r\n                Ole32.PropVariantClear(ref pv);\r\n            }\r\n            catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n            {\r\n                // Expected in some cases.\r\n            }\r\n        }\r\n\r\n        public void DevicePropertiesChanged(IMMDevice dev)\r\n        {\r\n            Trace.WriteLine($\"AudioDevice DevicePropertiesChanged {_id}\");\r\n\r\n            _device = dev;\r\n            ReadProperties();\r\n\r\n            _dispatcher.Invoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(DisplayName));\r\n            }));\r\n        }\r\n\r\n        public void AddFilter(Func<ObservableCollection<IAudioDeviceSession>, ObservableCollection<IAudioDeviceSession>> filter)\r\n        {\r\n            _sessionFilter.AddFilter(filter);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceChannel.cs",
    "content": "﻿using System;\r\nusing System.ComponentModel;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceChannel : BindableBase, INotifyPropertyChanged, IAudioDeviceChannel\r\n    {\r\n        private float _level;\r\n        private uint _index;\r\n        private IAudioEndpointVolume _deviceVolume;\r\n\r\n        public AudioDeviceChannel(IAudioEndpointVolume deviceVolume, uint index)\r\n        {\r\n            _index = index;\r\n            _deviceVolume = deviceVolume;\r\n            _level = _deviceVolume.GetChannelVolumeLevelScalar(index);\r\n        }\r\n\r\n        public float Level\r\n        {\r\n            get => _level;\r\n            set\r\n            {\r\n                if (_level != value)\r\n                {\r\n                    Guid dummy = Guid.Empty;\r\n                    _deviceVolume.SetChannelVolumeLevelScalar(_index, value, ref dummy);\r\n\r\n                    _level = value;\r\n                    RaisePropertyChanged(nameof(Level));\r\n                }\r\n            }\r\n        }\r\n\r\n        internal void OnNotify(float newLevel)\r\n        {\r\n            if (newLevel != _level)\r\n            {\r\n                _level = newLevel;\r\n                RaisePropertyChanged(nameof(Level));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceChannelCollection.cs",
    "content": "﻿using EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceChannelCollection\r\n    {\r\n        public List<AudioDeviceChannel> Channels { get; }\r\n\r\n        private readonly Dispatcher _dispatcher;\r\n        private readonly int _afChannelVolumesOffset;\r\n\r\n        public AudioDeviceChannelCollection(IAudioEndpointVolume deviceVolume, Dispatcher dispatcher)\r\n        {\r\n            _dispatcher = dispatcher;\r\n\r\n            var ret = new List<AudioDeviceChannel>();\r\n            for (uint i = 0; i < deviceVolume.GetChannelCount(); i++)\r\n            {\r\n                ret.Add(new AudioDeviceChannel(deviceVolume, i));\r\n            }\r\n            Channels = ret;\r\n\r\n            AUDIO_VOLUME_NOTIFICATION_DATA dummy;\r\n            _afChannelVolumesOffset = Marshal.OffsetOf<AUDIO_VOLUME_NOTIFICATION_DATA>(nameof(dummy.afChannelVolumes)).ToInt32();\r\n        }\r\n\r\n        public void OnNotify(IntPtr pNotify, AUDIO_VOLUME_NOTIFICATION_DATA data)\r\n        {\r\n            var channelVolumesValues = new float[data.nChannels];\r\n            Marshal.Copy(IntPtr.Add(pNotify, _afChannelVolumesOffset), channelVolumesValues, 0, (int)data.nChannels);\r\n\r\n            for (var i = 0; i < data.nChannels; i++)\r\n            {\r\n                Channels[i].OnNotify(channelVolumesValues[i]);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceManager.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Diagnosis;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceManager : IMMNotificationClient, IAudioDeviceManager, IAudioDeviceManagerWindowsAudio\r\n    {\r\n        public event EventHandler<IAudioDevice> DefaultChanged;\r\n        public event EventHandler Loaded;\r\n\r\n        public ObservableCollection<IAudioDevice> Devices { get; }\r\n        public string Kind => _kind.ToString();\r\n\r\n        public IAudioDevice Default\r\n        {\r\n            get => _default;\r\n            set\r\n            {\r\n                if (value != _default)\r\n                {\r\n                    SetDefaultDevice(value, ERole.eMultimedia);\r\n                    DefaultChanged?.Invoke(this, Default);\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        private EDataFlow Flow => _kind == AudioDeviceKind.Playback ? EDataFlow.eRender : EDataFlow.eCapture;\r\n\r\n        private static AutoPolicyConfigClientWin7 s_PolicyConfigClient = null;\r\n\r\n        private IMMDeviceEnumerator _enumerator;\r\n        private IAudioDevice _default;\r\n        private readonly Dispatcher _dispatcher;\r\n        private readonly AudioDeviceKind _kind;\r\n        private readonly AudioPolicyConfig _policyConfigService;\r\n        private readonly ConcurrentDictionary<string, IAudioDevice> _deviceMap = new ConcurrentDictionary<string, IAudioDevice>();\r\n        private readonly FilteredCollectionChain<IAudioDevice> _deviceFilter;\r\n        private readonly ObservableCollection<IAudioDevice> _devices = new ObservableCollection<IAudioDevice>();\r\n\r\n        public AudioDeviceManager(AudioDeviceKind kind)\r\n        {\r\n            _kind = kind;\r\n            _dispatcher = Dispatcher.CurrentDispatcher;\r\n            _policyConfigService = new AudioPolicyConfig(Flow);\r\n            _deviceFilter = new FilteredCollectionChain<IAudioDevice>(_devices, _dispatcher);\r\n            Devices = _deviceFilter.Items;\r\n\r\n            TraceLine($\"Create\");\r\n\r\n            Task.Factory.StartNew(() =>\r\n            {\r\n                try\r\n                {\r\n                    _enumerator = (IMMDeviceEnumerator)new MMDeviceEnumerator();\r\n                    _enumerator.RegisterEndpointNotificationCallback(this);\r\n\r\n                    var devices = _enumerator.EnumAudioEndpoints(Flow, DeviceState.ACTIVE);\r\n                    uint deviceCount = devices.GetCount();\r\n                    for (uint i = 0; i < deviceCount; i++)\r\n                    {\r\n                        ((IMMNotificationClient)this).OnDeviceAdded(devices.Item(i).GetId());\r\n                    }\r\n\r\n                    _dispatcher.Invoke((Action)(() =>\r\n                    {\r\n                        QueryDefaultDevice();\r\n                        Loaded?.Invoke(this, null);\r\n                    }));\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // Even through we're going to be broken, show the tray icon so the user can collect debug data.\r\n                    ErrorReporter.LogWarning(ex);\r\n\r\n                    _dispatcher.Invoke((Action)(() =>\r\n                    {\r\n                        Loaded?.Invoke(this, null);\r\n                    }));\r\n                }\r\n            });\r\n\r\n            TraceLine($\"Create Exit\");\r\n        }\r\n\r\n        ~AudioDeviceManager()\r\n        {\r\n            try\r\n            {\r\n                _enumerator.UnregisterEndpointNotificationCallback(this);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                TraceLine($\"{ex}\");\r\n            }\r\n        }\r\n\r\n        private void QueryDefaultDevice()\r\n        {\r\n            TraceLine(\"QueryDefaultDevice\");\r\n            var currentDeviceId = _default?.Id;\r\n            _default = GetDefaultDevice();\r\n            string newDeviceId = _default?.Id;\r\n            if (currentDeviceId != newDeviceId)\r\n            {\r\n                DefaultChanged?.Invoke(this, _default);\r\n            }\r\n        }\r\n\r\n        public void SetDefaultDevice(IAudioDevice device, ERole role = ERole.eMultimedia)\r\n        {\r\n            TraceLine($\"SetDefaultDevice {device.Id}\");\r\n\r\n            if (s_PolicyConfigClient == null)\r\n            {\r\n                s_PolicyConfigClient = new AutoPolicyConfigClientWin7();\r\n            }\r\n\r\n            // Racing with the system, the device may not be valid anymore.\r\n            try\r\n            {\r\n                s_PolicyConfigClient.SetDefaultEndpoint(device.Id, role);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                TraceLine($\"{ex}\");\r\n            }\r\n        }\r\n\r\n        public IAudioDevice GetDefaultDevice(ERole eRole = ERole.eMultimedia)\r\n        {\r\n            try\r\n            {\r\n                var rawDevice = _enumerator.GetDefaultAudioEndpoint(Flow, ERole.eMultimedia);\r\n                TryFind(rawDevice.GetId(), out var device);\r\n                return device;\r\n            }\r\n            catch (Exception ex) when (ex.Is(HRESULT.ERROR_NOT_FOUND))\r\n            {\r\n                // Expected.\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public void MoveHiddenAppsToDevice(string appId, string id)\r\n        {\r\n            foreach (var device in _devices)\r\n            {\r\n                ((IAudioDeviceInternal)device).MoveHiddenAppsToDevice(appId, id);\r\n            }\r\n        }\r\n\r\n        public void UnhideSessionsForProcessId(string deviceId, int processId)\r\n        {\r\n            if (TryFind(deviceId, out var device))\r\n            {\r\n                ((IAudioDeviceInternal)device).UnhideSessionsForProcessId(processId);\r\n            }\r\n        }\r\n\r\n        public void UpdatePeakValues()\r\n        {\r\n            foreach (var device in _devices.ToArray())\r\n            {\r\n                ((IAudioDeviceInternal)device).UpdatePeakValue();\r\n            }\r\n        }\r\n\r\n        void IMMNotificationClient.OnDeviceAdded(string pwstrDeviceId)\r\n        {\r\n            TraceLine($\"OnDeviceAdded {pwstrDeviceId}\");\r\n\r\n            if (!TryFind(pwstrDeviceId, out IAudioDevice unused))\r\n            {\r\n                try\r\n                {\r\n                    var device = _enumerator.GetDevice(pwstrDeviceId);\r\n                    if (((IMMEndpoint)device).GetDataFlow() == Flow &&\r\n                        device.GetState() == DeviceState.ACTIVE)\r\n                    {\r\n                        var newDevice = new AudioDevice(this, device, _dispatcher);\r\n\r\n                        _dispatcher.Invoke((Action)(() =>\r\n                        {\r\n                            // We must check again on the UI thread to avoid adding a duplicate device.\r\n                            if (!TryFind(pwstrDeviceId, out IAudioDevice unused1))\r\n                            {\r\n                                Add(newDevice);\r\n                            }\r\n                        }));\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // We catch Exception here because IMMDevice::Activate can return E_POINTER/NullReferenceException, as well as other expcetions listed here:\r\n                    // https://docs.microsoft.com/en-us/dotnet/framework/interop/how-to-map-hresults-and-exceptions\r\n                    TraceLine($\"{ex}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        void IMMNotificationClient.OnDeviceRemoved(string pwstrDeviceId)\r\n        {\r\n            TraceLine($\"OnDeviceRemoved {pwstrDeviceId}\");\r\n\r\n            _dispatcher.Invoke((Action)(() =>\r\n            {\r\n                if (TryFind(pwstrDeviceId, out IAudioDevice dev))\r\n                {\r\n                    Remove(dev);\r\n                }\r\n            }));\r\n        }\r\n\r\n        void IMMNotificationClient.OnDefaultDeviceChanged(EDataFlow flow, ERole role, string pwstrDefaultDeviceId)\r\n        {\r\n            if (flow == Flow)\r\n            {\r\n                TraceLine($\"OnDefaultDeviceChanged {pwstrDefaultDeviceId}\");\r\n\r\n                _dispatcher.Invoke((Action)(() =>\r\n                {\r\n                    QueryDefaultDevice();\r\n                }));\r\n            }\r\n        }\r\n\r\n        void IMMNotificationClient.OnDeviceStateChanged(string pwstrDeviceId, DeviceState dwNewState)\r\n        {\r\n            TraceLine($\"OnDeviceStateChanged {pwstrDeviceId} {dwNewState}\");\r\n            switch (dwNewState)\r\n            {\r\n                case DeviceState.ACTIVE:\r\n                    ((IMMNotificationClient)this).OnDeviceAdded(pwstrDeviceId);\r\n                    break;\r\n                case DeviceState.DISABLED:\r\n                case DeviceState.NOTPRESENT:\r\n                case DeviceState.UNPLUGGED:\r\n                    ((IMMNotificationClient)this).OnDeviceRemoved(pwstrDeviceId);\r\n                    break;\r\n                default:\r\n                    TraceLine($\"Unknown DEVICE_STATE: {dwNewState}\");\r\n                    break;\r\n            }\r\n        }\r\n\r\n        void IMMNotificationClient.OnPropertyValueChanged(string pwstrDeviceId, PROPERTYKEY key)\r\n        {\r\n            TraceLine($\"OnPropertyValueChanged {pwstrDeviceId} {key.fmtid},{key.pid}\");\r\n            if (TryFind(pwstrDeviceId, out IAudioDevice dev))\r\n            {\r\n                if (PropertyKeys.PKEY_AudioEndPoint_Interface.Equals(key))\r\n                {\r\n                    // We're racing with the system, the device may not be resolvable anymore.\r\n                    try\r\n                    {\r\n                        ((AudioDevice)dev).DevicePropertiesChanged(_enumerator.GetDevice(dev.Id));\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        TraceLine($\"{ex}\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public void SetDefaultEndPoint(string id, int pid)\r\n        {\r\n            // Note: We found it unexpected that SetDefaultEndPoint\r\n            // would accept an id for an 'invalid' device and then \r\n            // no audio will be heard from any device for the given pid.\r\n            if (id == null || TryFind(id, out _))\r\n            {\r\n                _policyConfigService.SetDefaultEndPoint(id, pid);\r\n            }\r\n        }\r\n\r\n        public string GetDefaultEndPoint(int processId)\r\n        {\r\n            if (Environment.OSVersion.IsAtLeast(OSVersions.RS4))\r\n            {\r\n                return _policyConfigService.GetDefaultEndPoint(processId);\r\n            }\r\n            return null;\r\n        }\r\n\r\n        public void AddFilter(Func<ObservableCollection<IAudioDevice>, ObservableCollection<IAudioDevice>> filter)\r\n        {\r\n            _deviceFilter.AddFilter(filter);\r\n        }\r\n\r\n        private void Add(IAudioDevice device)\r\n        {\r\n            if (_deviceMap.TryAdd(device.Id, device))\r\n            {\r\n                _devices.Add(device);\r\n            }\r\n        }\r\n\r\n        private void Remove(IAudioDevice device)\r\n        {\r\n            if (_deviceMap.TryRemove(device.Id, out var foundDevice))\r\n            {\r\n                _devices.Remove(device);\r\n            }\r\n        }\r\n\r\n        private bool TryFind(string deviceId, out IAudioDevice found)\r\n        {\r\n            if (deviceId == null)\r\n            {\r\n                found = null;\r\n                return false;\r\n            }\r\n\r\n            return _deviceMap.TryGetValue(deviceId, out found);\r\n        }\r\n\r\n        private void TraceLine(string message)\r\n        {\r\n            System.Diagnostics.Trace.WriteLine($\"AudioDeviceManager-({_kind}) {message}\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSession.cs",
    "content": "﻿using EarTrumpet.DataModel.AppInformation;\r\nusing EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSession : BindableBase, IAudioSessionEvents, IAudioDeviceSession, IAudioDeviceSessionInternal\r\n    {\r\n        public IAudioDevice Parent\r\n        {\r\n            get\r\n            {\r\n                if (_parent.TryGetTarget(out var parent))\r\n                {\r\n                    return parent;\r\n                }\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public float Volume\r\n        {\r\n            get\r\n            {\r\n                return App.Settings.UseLogarithmicVolume ? _volume.ToDisplayVolume() : _volume;\r\n            }\r\n            set\r\n            {\r\n                value = value.Bound(0, 1f);\r\n\r\n                if (App.Settings.UseLogarithmicVolume)\r\n                {\r\n                    value = value.ToLogVolume();\r\n                }\r\n\r\n                if (_volume != value)\r\n                {\r\n                    try\r\n                    {\r\n                        _volume = value;\r\n                        Guid dummy = Guid.Empty;\r\n                        _simpleVolume.SetMasterVolume(value, ref dummy);\r\n                    }\r\n                    catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n                    {\r\n                        // Expected in some cases.\r\n                    }\r\n\r\n                    IsMuted = App.Settings.UseLogarithmicVolume ? _volume <= (1 / 100f).ToLogVolume() : _volume.ToVolumeInt() == 0;\r\n                }\r\n            }\r\n        }\r\n\r\n        public bool IsMuted\r\n        {\r\n            get => _isMuted;\r\n            set\r\n            {\r\n                if (value != _isMuted)\r\n                {\r\n                    try\r\n                    {\r\n                        Guid dummy = Guid.Empty;\r\n                        _simpleVolume.SetMute(value ? 1 : 0, ref dummy);\r\n                    }\r\n                    catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n                    {\r\n                        // Expected in some cases.\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public string DisplayName { get; private set; }\r\n        public string ExeName => _appInfo.ExeName;\r\n        public string IconPath { get; private set; }\r\n        public Guid GroupingParam { get; private set; }\r\n        public float PeakValue1 { get; private set; }\r\n        public float PeakValue2 { get; private set; }\r\n        public bool IsDesktopApp => _appInfo.IsDesktopApp;\r\n        public string AppId => _appInfo.PackageInstallPath;\r\n\r\n        public SessionState State\r\n        {\r\n            get\r\n            {\r\n                if (_isDisconnected)\r\n                {\r\n                    return SessionState.Expired;\r\n                }\r\n                else if (_isMoved)\r\n                {\r\n                    return SessionState.Moved;\r\n                }\r\n\r\n                switch (_state)\r\n                {\r\n                    case AudioSessionState.Active:\r\n                        return SessionState.Active;\r\n                    case AudioSessionState.Inactive:\r\n                        return SessionState.Inactive;\r\n                    case AudioSessionState.Expired:\r\n                        return SessionState.Expired;\r\n                    default:\r\n                        throw new NotImplementedException();\r\n                }\r\n            }\r\n        }\r\n\r\n        public int ProcessId { get; }\r\n\r\n        public string Id => _id;\r\n\r\n        public bool IsSystemSoundsSession { get; }\r\n\r\n        public ObservableCollection<IAudioDeviceSession> Children { get; private set; }\r\n        public IEnumerable<IAudioDeviceSessionChannel> Channels => _channels.Channels;\r\n\r\n        private readonly string _id;\r\n        private readonly IAudioSessionControl _session;\r\n        private readonly ISimpleAudioVolume _simpleVolume;\r\n        private readonly IAudioMeterInformation _meter;\r\n        private readonly Dispatcher _dispatcher;\r\n        private readonly IAppInfo _appInfo;\r\n        private readonly AudioDeviceSessionChannelCollection _channels;\r\n        private float _volume;\r\n        private AudioSessionState _state;\r\n        private bool _isMuted;\r\n        private bool _isDisconnected;\r\n        private bool _isMoved;\r\n        private bool _moveOnInactive;\r\n        private bool _isRegistered;\r\n        private WeakReference<IAudioDevice> _parent;\r\n\r\n        public AudioDeviceSession(IAudioDevice parent, IAudioSessionControl session, Dispatcher foregroundDispatcher)\r\n        {\r\n            _dispatcher = foregroundDispatcher;\r\n            _session = session;\r\n            _meter = (IAudioMeterInformation)_session;\r\n            _simpleVolume = (ISimpleAudioVolume)session;\r\n            _channels = new AudioDeviceSessionChannelCollection((IChannelAudioVolume)session, _dispatcher);\r\n            _state = _session.GetState();\r\n            GroupingParam = _session.GetGroupingParam();\r\n            _simpleVolume.GetMasterVolume(out _volume);\r\n            _isMuted = _simpleVolume.GetMute() != 0;\r\n            IsSystemSoundsSession = ((IAudioSessionControl2)_session).IsSystemSoundsSession() == HRESULT.S_OK;\r\n            ProcessId = ReadProcessId();\r\n            _parent = new WeakReference<IAudioDevice>(parent);\r\n\r\n            _appInfo = AppInformationFactory.CreateForProcess(ProcessId, trackProcess: true);\r\n            _appInfo.Stopped += _ => DisconnectSession();\r\n\r\n            // NOTE: Ensure that the callbacks won't touch state that isn't initialized yet (i.e. _appInfo must be valid before the first callback)\r\n            _session.RegisterAudioSessionNotification(this);\r\n            _isRegistered = true;\r\n            ((IAudioSessionControl2)_session).GetSessionInstanceIdentifier(out _id);\r\n\r\n            Trace.WriteLine($\"AudioDeviceSession Create {ExeName} {_id}\");\r\n\r\n            ChooseIconPath(session.GetIconPath());\r\n            ChooseDisplayName(ReadSessionDisplayName());\r\n\r\n            if (parent.Parent != null)\r\n            {\r\n                if (parent.Parent.Kind == AudioDeviceKind.Recording.ToString())\r\n                {\r\n                    _isDisconnected = IsSystemSoundsSession;\r\n                }\r\n                else\r\n                {\r\n                    SyncPersistedEndpoint(parent);\r\n                }\r\n            }\r\n        }\r\n\r\n        ~AudioDeviceSession()\r\n        {\r\n            try\r\n            {\r\n                if (_isRegistered)\r\n                {\r\n                    _session.UnregisterAudioSessionNotification(this);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AudioDeviceSession dtor Failed: {ex}\");\r\n            }\r\n        }\r\n\r\n        public void Hide()\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSession MoveFromDevice {ExeName} {Id}\");\r\n\r\n            if (_state == AudioSessionState.Active)\r\n            {\r\n                _moveOnInactive = true;\r\n            }\r\n            else\r\n            {\r\n                _isMoved = true;\r\n                RaisePropertyChanged(nameof(State));\r\n            }\r\n        }\r\n\r\n        public void UnHide()\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSession UnHide {ExeName} {Id}\");\r\n\r\n            _isMoved = false;\r\n            _moveOnInactive = false;\r\n\r\n            RaisePropertyChanged(nameof(State));\r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hide)\r\n        {\r\n            if (_parent.TryGetTarget(out var parent))\r\n            {\r\n                ((IAudioDeviceManagerWindowsAudio)parent.Parent).SetDefaultEndPoint(id, ProcessId);\r\n            }\r\n        }\r\n\r\n        public void UpdatePeakValueBackground()\r\n        {\r\n            var newValues = Helpers.ReadPeakValues(_meter);\r\n            PeakValue1 = newValues[0];\r\n            PeakValue2 = newValues[1];\r\n        }\r\n\r\n        private void ChooseDisplayName(string displayNameFromSession)\r\n        {\r\n            if (!string.IsNullOrWhiteSpace(displayNameFromSession))\r\n            {\r\n                DisplayName = displayNameFromSession;\r\n            }\r\n            else if (!string.IsNullOrWhiteSpace(_appInfo.DisplayName))\r\n            {\r\n                DisplayName = _appInfo.DisplayName;\r\n            }\r\n            else\r\n            {\r\n                DisplayName = _appInfo.ExeName;\r\n            }\r\n        }\r\n\r\n        private void ChooseIconPath(string iconPathFromSession)\r\n        {\r\n            if (!string.IsNullOrWhiteSpace(iconPathFromSession) && !IsSystemSoundsSession)\r\n            {\r\n                IconPath = iconPathFromSession;\r\n            }\r\n            else if (!string.IsNullOrWhiteSpace(_appInfo.SmallLogoPath))\r\n            {\r\n                IconPath = _appInfo.SmallLogoPath;\r\n            }\r\n            else\r\n            {\r\n                IconPath = null;\r\n            }\r\n        }\r\n\r\n        private int ReadProcessId()\r\n        {\r\n            var hr = ((IAudioSessionControl2)_session).GetProcessId(out uint pid);\r\n\r\n            if (hr == (int)HRESULT.AUDCLNT_S_NO_SINGLE_PROCESS ||\r\n                hr == (int)HRESULT.S_OK)\r\n            {\r\n                // NOTE: This is a workaround for what seems to be a Windows 10 OS bug.\r\n                // Sometimes the session (which is IsSystemSoundsSession) has a nonzero PID.\r\n                // The PID refers to taskhostw.exe.  In these cases the session is correctly\r\n                // wired up and does reflect the system sounds.  If we restart the app the system\r\n                // will give us a session which has IsSystemSounds=true/pid=0, so this seems to be a bug\r\n                // in letting system sounds played through taskhostw.exe bleed through.\r\n                return IsSystemSoundsSession ? 0 : (int)pid;\r\n            }\r\n\r\n            throw Marshal.GetExceptionForHR(hr);\r\n        }\r\n\r\n        private void SyncPersistedEndpoint(IAudioDevice parent)\r\n        {\r\n            // NOTE: This is to work around what we believe to be a Windows 10 OS bug!\r\n            // The audio session redirection feature became available in 1803 and this bug appears\r\n            // to impact some or all UWP applications.\r\n            //\r\n            // Repro:\r\n            // - Using a UWP app like Minesweeper\r\n            // - Open the app on default device A and play a sound (observe sound plays on A)\r\n            // - Move the app to device B\r\n            // - Play a sound (observe the sound plays on B)\r\n            // - Close app\r\n            // - Open app again and play a sound\r\n            // EXPECTED: App plays on device B since it is configured and available\r\n            // ACTUAL: App plays on device A which is incorrect.\r\n            //\r\n            // We work around this by attempting to move the session to the specified persisted endpoint.\r\n            // If we fail for any reason (including that device no longer being available at all), we expect\r\n            // to continue without issue using the current parent device.\r\n            var persistedDeviceId = ((IAudioDeviceManagerWindowsAudio)Parent.Parent).GetDefaultEndPoint(ProcessId);\r\n            if (!string.IsNullOrWhiteSpace(persistedDeviceId))\r\n            {\r\n                if (parent.Id != persistedDeviceId)\r\n                {\r\n                    Trace.WriteLine($\"FORCE-MOVE: {_state} {parent.Id} -> {persistedDeviceId}\");\r\n\r\n                    MoveToDevice(persistedDeviceId, false);\r\n\r\n                    // There is an inherence race condition in the system when calling the API to move the session to\r\n                    // another endpoint.  The system will very quickly make the session Active and then Inactive.  This\r\n                    // event causes us to lose the _isMoved/_moveOnInactive state, which means the session becomes visible again.\r\n                    // In order to work around this, we add a short delay so the system will have issued the events and either the\r\n                    // session is still playing (in which case the user will see it) or it is back to Inactive and we can hide it.\r\n                    var delay = Task.Delay(TimeSpan.FromMilliseconds(200));\r\n                    delay.ContinueWith((_) =>\r\n                    {\r\n                        _dispatcher.BeginInvoke((Action)(() =>\r\n                        {\r\n                            if (_state == AudioSessionState.Active)\r\n                            {\r\n                                _moveOnInactive = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                _isMoved = true;\r\n                            }\r\n\r\n                            RaisePropertyChanged(nameof(State));\r\n                        }));\r\n                    });\r\n                }\r\n            }\r\n        }\r\n\r\n        private string ReadSessionDisplayName()\r\n        {\r\n            try\r\n            {\r\n                var displayName = _session.GetDisplayName();\r\n                if (displayName.StartsWith(\"@\"))\r\n                {\r\n                    StringBuilder sb = new StringBuilder(512);\r\n                    if (Shlwapi.SHLoadIndirectString(displayName, sb, sb.Capacity, IntPtr.Zero) == 0)\r\n                    {\r\n                        displayName = sb.ToString();\r\n                    }\r\n                }\r\n\r\n                return displayName;\r\n            }\r\n            catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n            {\r\n                // Expected in some cases.\r\n            }\r\n            return null;\r\n        }\r\n\r\n        private void DisconnectSession()\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSession DisconnectSession {ExeName} {Id}\");\r\n\r\n            _isDisconnected = true;\r\n            _dispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(State));\r\n            }));\r\n        }\r\n\r\n        void IAudioSessionEvents.OnSimpleVolumeChanged(float NewVolume, int NewMute, ref Guid EventContext)\r\n        {\r\n            _volume = NewVolume;\r\n            _isMuted = NewMute != 0;\r\n\r\n            _dispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(Volume));\r\n                RaisePropertyChanged(nameof(IsMuted));\r\n            }));\r\n        }\r\n\r\n        void IAudioSessionEvents.OnGroupingParamChanged(ref Guid NewGroupingParam, ref Guid EventContext)\r\n        {\r\n            GroupingParam = NewGroupingParam;\r\n            Trace.WriteLine($\"AudioDeviceSession OnGroupingParamChanged {ExeName} {Id}\");\r\n            _dispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(GroupingParam));\r\n            }));\r\n        }\r\n\r\n        void IAudioSessionEvents.OnStateChanged(AudioSessionState NewState)\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSession OnStateChanged {NewState} {ExeName} {Id}\");\r\n\r\n            _state = NewState;\r\n\r\n            if (_isMoved && NewState == AudioSessionState.Active)\r\n            {\r\n                _isMoved = false;\r\n            }\r\n            else if (_moveOnInactive && NewState == AudioSessionState.Inactive)\r\n            {\r\n                _isMoved = true;\r\n                _moveOnInactive = false;\r\n            }\r\n\r\n            _dispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(State));\r\n            }));\r\n        }\r\n\r\n        void IAudioSessionEvents.OnDisplayNameChanged(string NewDisplayName, ref Guid EventContext)\r\n        {\r\n            ChooseDisplayName(NewDisplayName);\r\n\r\n            _dispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(DisplayName));\r\n            }));\r\n        }\r\n\r\n        void IAudioSessionEvents.OnSessionDisconnected(AudioSessionDisconnectReason DisconnectReason) => DisconnectSession();\r\n\r\n        void IAudioSessionEvents.OnChannelVolumeChanged(uint ChannelCount, IntPtr afNewChannelVolume, uint ChangedChannel, ref Guid EventContext)\r\n        {\r\n            var channelVolumesValues = new float[ChannelCount];\r\n            Marshal.Copy(afNewChannelVolume, channelVolumesValues, 0, (int)ChannelCount);\r\n\r\n            for (var i = 0; i < ChannelCount; i++)\r\n            {\r\n                _channels.Channels[i].SetLevel(channelVolumesValues[i]);\r\n            }\r\n        }\r\n\r\n        void IAudioSessionEvents.OnIconPathChanged(string NewIconPath, ref Guid EventContext)\r\n        {\r\n            IconPath = NewIconPath;\r\n            RaisePropertyChanged(nameof(IconPath));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionChannel.cs",
    "content": "﻿using EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.ComponentModel;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSessionChannel : BindableBase, INotifyPropertyChanged, IAudioDeviceSessionChannel\r\n    {\r\n        public float Level\r\n        {\r\n            get => _level;\r\n            set\r\n            {\r\n                if (_level != value)\r\n                {\r\n                    _level = value;\r\n                    Guid dummy = Guid.Empty;\r\n                    _session.SetChannelVolume(_index, value, ref dummy);\r\n\r\n                    RaisePropertyChanged(nameof(Level));\r\n                }\r\n            }\r\n        }\r\n\r\n        private readonly IChannelAudioVolume _session;\r\n        private readonly uint _index;\r\n        private readonly Dispatcher _dispatcher;\r\n        private float _level;\r\n\r\n        public AudioDeviceSessionChannel(IChannelAudioVolume session, uint index, Dispatcher dispatcher)\r\n        {\r\n            _session = session;\r\n            _index = index;\r\n            _dispatcher = dispatcher;\r\n            session.GetChannelVolume(index, out _level);\r\n        }\r\n\r\n        internal void SetLevel(float newLevel)\r\n        {\r\n            _level = newLevel;\r\n            _dispatcher.BeginInvoke(((Action)(() =>\r\n            {\r\n                RaisePropertyChanged(nameof(Level));\r\n            })));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionChannelCollection.cs",
    "content": "﻿using EarTrumpet.Interop.MMDeviceAPI;\r\nusing System.Collections.Generic;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSessionChannelCollection\r\n    {\r\n        public List<AudioDeviceSessionChannel> Channels { get; }\r\n\r\n        public AudioDeviceSessionChannelCollection(IChannelAudioVolume session, Dispatcher dispatcher)\r\n        {\r\n            var ret = new List<AudioDeviceSessionChannel>();\r\n            for(uint i = 0; i < session.GetChannelCount(); i++)\r\n            {\r\n                ret.Add(new AudioDeviceSessionChannel(session, i, dispatcher));\r\n            }\r\n            Channels = ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionChannelMultiplexer.cs",
    "content": "﻿using System.ComponentModel;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSessionChannelMultiplexer : BindableBase, IAudioDeviceSessionChannel\r\n    {\r\n        public float Level\r\n        {\r\n            get => _channels[0].Level;\r\n            set\r\n            {\r\n                foreach(var channel in _channels)\r\n                {\r\n                    channel.Level = value;\r\n                }\r\n            }\r\n        }\r\n\r\n        private IAudioDeviceSessionChannel[] _channels;\r\n\r\n        public AudioDeviceSessionChannelMultiplexer(IAudioDeviceSessionChannel[] channels)\r\n        {\r\n            _channels = channels;\r\n\r\n            foreach(var channel in _channels)\r\n            {\r\n                channel.PropertyChanged += Channel_PropertyChanged;\r\n            }\r\n        }\r\n\r\n        private void Channel_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(e.PropertyName);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionCollection.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSessionCollection : IAudioSessionNotification\r\n    {\r\n        public ObservableCollection<IAudioDeviceSession> Sessions => _sessions;\r\n\r\n        private readonly Dispatcher _dispatcher;\r\n        private readonly ObservableCollection<IAudioDeviceSession> _sessions = new ObservableCollection<IAudioDeviceSession>();\r\n        private readonly List<IAudioDeviceSession> _movedSessions = new List<IAudioDeviceSession>();\r\n        private IAudioSessionManager2 _sessionManager;\r\n        private WeakReference<IAudioDevice> _parent;\r\n\r\n        public AudioDeviceSessionCollection(IAudioDevice parent, IMMDevice device, Dispatcher foregroundDispatcher)\r\n        {\r\n            _parent = new WeakReference<IAudioDevice>(parent);\r\n            _dispatcher = foregroundDispatcher;\r\n\r\n            try\r\n            {\r\n                _sessionManager = device.Activate<IAudioSessionManager2>();\r\n                _sessionManager.RegisterSessionNotification(this);\r\n                var enumerator = _sessionManager.GetSessionEnumerator();\r\n                int count = enumerator.GetCount();\r\n                for (int i = 0; i < count; i++)\r\n                {\r\n                    CreateAndAddSession(enumerator.GetSession(i));\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AudioDeviceSessionCollection Create dev={device.GetId()} {ex}\");\r\n            }\r\n        }\r\n\r\n        ~AudioDeviceSessionCollection()\r\n        {\r\n            foreach (var session in _sessions)\r\n            {\r\n                session.PropertyChanged -= Session_PropertyChanged;\r\n            }\r\n\r\n            foreach (var session in _movedSessions)\r\n            {\r\n                session.PropertyChanged -= MovedSession_PropertyChanged;\r\n            }\r\n\r\n            _sessionManager.UnregisterSessionNotification(this);\r\n        }\r\n\r\n        private void CreateAndAddSession(IAudioSessionControl session)\r\n        {\r\n            try\r\n            {\r\n                if (!_parent.TryGetTarget(out IAudioDevice parent))\r\n                {\r\n                    throw new Exception(\"Device session parent is invalid but device is still notifying.\");\r\n                }\r\n\r\n                var newSession = new AudioDeviceSession(parent, session, _dispatcher);\r\n                _dispatcher.BeginInvoke((Action)(() =>\r\n                {\r\n                    if (newSession.State == SessionState.Moved)\r\n                    {\r\n                        _movedSessions.Add(newSession);\r\n                        newSession.PropertyChanged += MovedSession_PropertyChanged;\r\n                    }\r\n                    else if (newSession.State != SessionState.Expired)\r\n                    {\r\n                        AddSession(newSession);\r\n                    }\r\n                }));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AudioDeviceSessionCollection CreateAndAddSession {ex}\");\r\n            }\r\n        }\r\n\r\n        void IAudioSessionNotification.OnSessionCreated(IAudioSessionControl NewSession)\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSessionCollection OnSessionCreated\");\r\n            CreateAndAddSession(NewSession);\r\n        }\r\n\r\n        private void AddSession(IAudioDeviceSession session)\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSessionCollection AddSession {session.ExeName} {session.Id}\");\r\n\r\n            session.PropertyChanged += Session_PropertyChanged;\r\n\r\n            if (_parent.TryGetTarget(out var parent))\r\n            {\r\n                foreach (AudioDeviceSessionGroup appGroup in _sessions)\r\n                {\r\n                    if (appGroup.AppId == session.AppId)\r\n                    {\r\n                        foreach (AudioDeviceSessionGroup appSessionGroup in appGroup.Sessions)\r\n                        {\r\n                            if (appSessionGroup.GroupingParam == ((IAudioDeviceSessionInternal)session).GroupingParam)\r\n                            {\r\n                                // If there is a session in the same process, inherit safely.\r\n                                // (Avoids a minesweeper ad playing at max volume when app should be muted)\r\n                                session.IsMuted = session.IsMuted || appSessionGroup.IsMuted;\r\n                                appSessionGroup.AddSession(session);\r\n                                return;\r\n                            }\r\n                        }\r\n\r\n                        session.IsMuted = session.IsMuted || appGroup.IsMuted;\r\n                        appGroup.AddSession(new AudioDeviceSessionGroup(parent, session));\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                _sessions.Add(new AudioDeviceSessionGroup(parent, new AudioDeviceSessionGroup(parent, session)));\r\n            }\r\n        }\r\n\r\n        internal void UnHideSessionsForProcessId(int processId)\r\n        {\r\n            foreach (var session in _movedSessions.ToArray())  // Use snapshot since enumeration will be modified.\r\n            {\r\n                if (session.ProcessId == processId)\r\n                {\r\n                    _movedSessions.Remove(session);\r\n                    session.PropertyChanged -= MovedSession_PropertyChanged;\r\n\r\n                    ((IAudioDeviceSessionInternal)session).UnHide();\r\n\r\n                    AddSession(session);\r\n                }\r\n            }\r\n        }\r\n\r\n        public void MoveHiddenAppsToDevice(string appId, string id)\r\n        {\r\n            foreach (var session in _movedSessions)\r\n            {\r\n                if (session.AppId == appId)\r\n                {\r\n                    ((IAudioDeviceSessionInternal)session).MoveToDevice(id, false);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void RemoveSession(IAudioDeviceSession session)\r\n        {\r\n            Trace.WriteLine($\"AudioDeviceSessionCollection RemoveSession {session.ExeName} {session.Id}\");\r\n\r\n            session.PropertyChanged -= Session_PropertyChanged;\r\n\r\n            foreach (AudioDeviceSessionGroup appGroup in _sessions)\r\n            {\r\n                foreach (AudioDeviceSessionGroup appSessionGroup in appGroup.Sessions)\r\n                {\r\n                    if (appSessionGroup.Sessions.Contains(session))\r\n                    {\r\n                        appSessionGroup.RemoveSession(session);\r\n\r\n                        // Delete the now-empty app session group.\r\n                        if (!appSessionGroup.Sessions.Any())\r\n                        {\r\n                            appGroup.RemoveSession(appSessionGroup);\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // Delete the now-empty app.\r\n                if (!appGroup.Sessions.Any())\r\n                {\r\n                    _sessions.Remove(appGroup);\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        private void Session_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            var session = (IAudioDeviceSession)sender;\r\n\r\n            if (e.PropertyName == nameof(session.State))\r\n            {\r\n                if (session.State == SessionState.Expired)\r\n                {\r\n                    RemoveSession(session);\r\n                }\r\n                else if (session.State == SessionState.Moved)\r\n                {\r\n                    RemoveSession(session);\r\n                    _movedSessions.Add(session);\r\n                    session.PropertyChanged += MovedSession_PropertyChanged;\r\n                }\r\n            }\r\n        }\r\n\r\n        private void MovedSession_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            var session = (IAudioDeviceSession)sender;\r\n\r\n            if (e.PropertyName == nameof(session.State) && session.State == SessionState.Active)\r\n            {\r\n                _movedSessions.Remove(session);\r\n                session.PropertyChanged -= MovedSession_PropertyChanged;\r\n\r\n                AddSession(session);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioDeviceSessionGroup.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioDeviceSessionGroup : BindableBase, IAudioDeviceSession, IAudioDeviceSessionInternal\r\n    {\r\n        public IAudioDevice Parent => _sessions.Count > 0 ? _sessions[0].Parent : null;\r\n\r\n        public IEnumerable<IAudioDeviceSessionChannel> Channels\r\n        {\r\n            get\r\n            {\r\n                var buckets = new List<List<IAudioDeviceSessionChannel>>();\r\n                foreach(var session in _sessions)\r\n                {\r\n                    var sessionChannels = session.Channels.ToList();\r\n                    for (var i = 0; i < sessionChannels.Count; i++)\r\n                    {\r\n                        if (buckets.Count <= i)\r\n                        {\r\n                            buckets.Add(new List<IAudioDeviceSessionChannel>());\r\n                        }\r\n\r\n                        buckets[i].Add(sessionChannels[i]);\r\n                    }\r\n                }\r\n\r\n                var ret = new List<IAudioDeviceSessionChannel>();\r\n                foreach(var bucket in buckets)\r\n                {\r\n                    ret.Add(new AudioDeviceSessionChannelMultiplexer(bucket.ToArray()));\r\n                }\r\n\r\n                return ret;\r\n            }\r\n        }\r\n        public IEnumerable<IAudioDeviceSession> Sessions => _sessions;\r\n\r\n        public string DisplayName => _sessions.Count > 0 ? _sessions[0].DisplayName : null;\r\n\r\n        public string ExeName => _sessions.Count > 0 ? _sessions[0].ExeName : null;\r\n\r\n        public Guid GroupingParam { get; private set; }\r\n\r\n        public string IconPath => _sessions.Count > 0 ? _sessions[0].IconPath : null;\r\n\r\n        public string Id => _id;\r\n\r\n        public bool IsDesktopApp => _sessions.Count > 0 ? _sessions[0].IsDesktopApp : false;\r\n\r\n        public string AppId { get; private set; }\r\n\r\n        public bool IsMuted\r\n        {\r\n            get => _sessions.Count > 0 ? _sessions[0].IsMuted : false;\r\n            set\r\n            {\r\n                foreach (var session in _sessions)\r\n                {\r\n                    session.IsMuted = value;\r\n                }\r\n            }\r\n        }\r\n\r\n        public bool IsSystemSoundsSession => _sessions.Any(s => s.IsSystemSoundsSession);\r\n\r\n        public float PeakValue1 => _sessions.Count > 0 ? _sessions.Max(s => s.PeakValue1) : 0;\r\n        public float PeakValue2 => _sessions.Count > 0 ? _sessions.Max(s => s.PeakValue2) : 0;\r\n\r\n        public int ProcessId => _sessions.Count > 0 ? _sessions[0].ProcessId : -1;\r\n\r\n        public SessionState State\r\n        {\r\n            get\r\n            {\r\n                if (_sessions.FirstOrDefault(s => s.State == SessionState.Active) != null)\r\n                {\r\n                    return SessionState.Active;\r\n                }\r\n                if (_sessions.FirstOrDefault(s => s.State == SessionState.Inactive) != null)\r\n                {\r\n                    return SessionState.Inactive;\r\n                }\r\n                if (_sessions.FirstOrDefault(s => s.State == SessionState.Moved) != null)\r\n                {\r\n                    return SessionState.Moved;\r\n                }\r\n                return SessionState.Expired;\r\n            }\r\n        }\r\n\r\n        public float Volume\r\n        {\r\n            get => _sessions.Count > 0 ? _sessions[0].Volume : 1;\r\n            set\r\n            {\r\n                foreach (var session in _sessions)\r\n                {\r\n                    session.Volume = value;\r\n                }\r\n            }\r\n        }\r\n\r\n        public ObservableCollection<IAudioDeviceSession> Children => _sessions;\r\n\r\n        public void Hide()\r\n        {\r\n            foreach (var session in _sessions.ToArray())\r\n            {\r\n                ((IAudioDeviceSessionInternal)session).Hide();\r\n            }\r\n        }\r\n\r\n        public void UnHide()\r\n        {\r\n            foreach (var session in _sessions.ToArray())\r\n            {\r\n                ((IAudioDeviceSessionInternal)session).UnHide();\r\n            }\r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hideExistingSessions)\r\n        {\r\n            if (_parent.TryGetTarget(out var parent))\r\n            {\r\n                // Update the output for all processes represented by this app.\r\n                foreach (var pid in _sessions.Select(c => c.ProcessId).ToSet())\r\n                {\r\n                    ((IAudioDeviceManagerWindowsAudio)parent.Parent).SetDefaultEndPoint(id, pid);\r\n                }\r\n\r\n                if (hideExistingSessions)\r\n                {\r\n                    Hide();\r\n                }\r\n            }\r\n        }\r\n\r\n        public void UpdatePeakValueBackground()\r\n        {\r\n            // We're in the background so we need to use a snapshot.\r\n            foreach (var session in _sessions.ToArray())\r\n            {\r\n                ((IAudioDeviceSessionInternal)session).UpdatePeakValueBackground();\r\n            }\r\n        }\r\n\r\n        private readonly ObservableCollection<IAudioDeviceSession> _sessions = new ObservableCollection<IAudioDeviceSession>();\r\n        private string _id;\r\n        private readonly WeakReference<IAudioDevice> _parent;\r\n\r\n        public AudioDeviceSessionGroup(IAudioDevice parent, IAudioDeviceSession session)\r\n        {\r\n            _parent = new WeakReference<IAudioDevice>(parent);\r\n            GroupingParam = ((IAudioDeviceSessionInternal)session).GroupingParam; // can change at runtime\r\n            AppId = session.AppId;\r\n\r\n            AddSession(session);\r\n        }\r\n\r\n        ~AudioDeviceSessionGroup()\r\n        {\r\n            foreach (var session in _sessions)\r\n            {\r\n                session.PropertyChanged -= Session_PropertyChanged;\r\n            }\r\n        }\r\n\r\n        public void AddSession(IAudioDeviceSession session)\r\n        {\r\n            if (_id == null)\r\n            {\r\n                _id = session.Id;\r\n            }\r\n\r\n            _sessions.Add(session);\r\n\r\n            session.PropertyChanged += Session_PropertyChanged;\r\n\r\n            // Inherit properties (safely) from existing streams\r\n            session.IsMuted = _sessions[0].IsMuted || session.IsMuted;\r\n        }\r\n\r\n        public void RemoveSession(IAudioDeviceSession session)\r\n        {\r\n            session.PropertyChanged -= Session_PropertyChanged;\r\n            _sessions.Remove(session);\r\n        }\r\n\r\n        private void Session_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(e.PropertyName);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/AudioPolicyConfigService.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class AudioPolicyConfig\r\n    {\r\n        private const string DEVINTERFACE_AUDIO_RENDER = \"#{e6327cad-dcec-4949-ae8a-991e976a79d2}\";\r\n        private const string DEVINTERFACE_AUDIO_CAPTURE = \"#{2eef81be-33fa-4800-9670-1cd474972c3f}\";\r\n        private const string MMDEVAPI_TOKEN = @\"\\\\?\\SWD#MMDEVAPI#\";\r\n\r\n        private IAudioPolicyConfigFactory _sharedPolicyConfig;\r\n        private EDataFlow _flow;\r\n\r\n        public AudioPolicyConfig(EDataFlow flow)\r\n        {\r\n            _flow = flow;\r\n        }\r\n\r\n        private void EnsurePolicyConfig()\r\n        {\r\n            if (_sharedPolicyConfig == null)\r\n            {\r\n                _sharedPolicyConfig = AudioPolicyConfigFactory.Create();\r\n            }\r\n        }\r\n\r\n        private string GenerateDeviceId(string deviceId)\r\n        {\r\n            return $\"{MMDEVAPI_TOKEN}{deviceId}{(_flow == EDataFlow.eRender ? DEVINTERFACE_AUDIO_RENDER : DEVINTERFACE_AUDIO_CAPTURE)}\";\r\n        }\r\n\r\n        private string UnpackDeviceId(string deviceId)\r\n        {\r\n            if (deviceId.StartsWith(MMDEVAPI_TOKEN)) deviceId = deviceId.Remove(0, MMDEVAPI_TOKEN.Length);\r\n            if (deviceId.EndsWith(DEVINTERFACE_AUDIO_RENDER)) deviceId = deviceId.Remove(deviceId.Length - DEVINTERFACE_AUDIO_RENDER.Length);\r\n            if (deviceId.EndsWith(DEVINTERFACE_AUDIO_CAPTURE)) deviceId = deviceId.Remove(deviceId.Length - DEVINTERFACE_AUDIO_CAPTURE.Length);\r\n            return deviceId;\r\n        }\r\n\r\n        public void SetDefaultEndPoint(string deviceId, int processId)\r\n        {\r\n            Trace.WriteLine($\"AudioPolicyConfigService SetDefaultEndPoint {deviceId} {processId}\");\r\n            try\r\n            {\r\n                EnsurePolicyConfig();\r\n\r\n                IntPtr hstring = IntPtr.Zero;\r\n\r\n                if (!string.IsNullOrWhiteSpace(deviceId))\r\n                {\r\n                    var str = GenerateDeviceId(deviceId);\r\n                    Combase.WindowsCreateString(str, (uint)str.Length, out hstring);\r\n                }\r\n\r\n                _sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, _flow, ERole.eMultimedia, hstring);\r\n                _sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, _flow, ERole.eConsole, hstring);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"{ex}\");\r\n            }\r\n        }\r\n\r\n        public string GetDefaultEndPoint(int processId)\r\n        {\r\n            try\r\n            {\r\n                EnsurePolicyConfig();\r\n\r\n                _sharedPolicyConfig.GetPersistedDefaultAudioEndpoint((uint)processId, _flow, ERole.eMultimedia | ERole.eConsole, out string deviceId);\r\n                return UnpackDeviceId(deviceId);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"{ex}\");\r\n            }\r\n\r\n            return null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/Helpers.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    class Helpers\r\n    {\r\n        public static float[] ReadPeakValues(IAudioMeterInformation meter)\r\n        {\r\n            var ret = new float[2];\r\n            try\r\n            {\r\n                uint chanCount = meter.GetMeteringChannelCount();\r\n                if (chanCount > 0)\r\n                {\r\n                    var arrayPtr = Marshal.AllocHGlobal((int)chanCount * 4); // 4 bytes in float\r\n                    if (meter.GetChannelsPeakValues(chanCount, arrayPtr) == HRESULT.S_OK)\r\n                    {\r\n                        var values = new float[chanCount];\r\n                        Marshal.Copy(arrayPtr, values, 0, (int)chanCount);\r\n\r\n                        if (chanCount == 1)\r\n                        {\r\n                            ret[0] = values[0];\r\n                            ret[1] = values[0];\r\n                        }\r\n                        else\r\n                        {\r\n                            ret[0] = values[0];\r\n                            ret[1] = values[1];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception ex) when (ex.Is(HRESULT.AUDCLNT_E_DEVICE_INVALIDATED))\r\n            {\r\n                // Expected in some cases.\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/IAudioDeviceInternal.cs",
    "content": "﻿namespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    interface IAudioDeviceInternal\r\n    {\r\n        void UpdatePeakValue();\r\n        void MoveHiddenAppsToDevice(string appId, string id);\r\n        void UnhideSessionsForProcessId(int processId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/Internal/IAudioDeviceSessionInternal.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing System;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio.Internal\r\n{\r\n    interface IAudioDeviceSessionInternal : IAudioDeviceSession\r\n    {\r\n        Guid GroupingParam { get; }\r\n        void Hide();\r\n        void UnHide();\r\n        void MoveToDevice(string id, bool hide);\r\n        void UpdatePeakValueBackground();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DataModel/WindowsAudio/WindowsAudioFactory.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio.Internal;\r\n\r\nnamespace EarTrumpet.DataModel.WindowsAudio\r\n{\r\n    public class WindowsAudioFactory\r\n    {\r\n        static IAudioDeviceManager s_playbackDevices;\r\n        static IAudioDeviceManager s_recordingDevices;\r\n\r\n        public static IAudioDeviceManager Create(AudioDeviceKind kind)\r\n        {\r\n            if (kind == AudioDeviceKind.Playback)\r\n            {\r\n                if (s_playbackDevices == null)\r\n                {\r\n                    s_playbackDevices = new AudioDeviceManager(AudioDeviceKind.Playback);\r\n                }\r\n                return s_playbackDevices;\r\n            }\r\n            else\r\n            {\r\n                if (s_recordingDevices == null)\r\n                {\r\n                    s_recordingDevices = new AudioDeviceManager(AudioDeviceKind.Recording);\r\n                }\r\n                return s_recordingDevices;\r\n            }\r\n        }\r\n\r\n        public static IAudioDeviceManager CreateNonSharedDeviceManager(AudioDeviceKind kind)\r\n        {\r\n            return new AudioDeviceManager(kind);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/DebugHelpers.cs",
    "content": "﻿using EarTrumpet.DataModel.AppInformation;\r\nusing EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensibility;\r\nusing EarTrumpet.Extensibility.Hosting;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\n#if DEBUG\r\nnamespace EarTrumpet\r\n{\r\n    class DebugHelpers\r\n    {\r\n        class DebugContextMenuAddon : IEarTrumpetAddonNotificationAreaContextMenu\r\n        {\r\n            public IEnumerable<ContextMenuItem> NotificationAreaContextMenuItems\r\n            {\r\n                get\r\n                {\r\n                    return new List<ContextMenuItem>\r\n                        {\r\n                            new ContextMenuItem\r\n                            {\r\n                                DisplayName = \"Developer options\",\r\n                                Children = new List<ContextMenuItem>\r\n                                {\r\n                                    new ContextMenuItem\r\n                                    {\r\n                                        DisplayName = \"Remove all devices\",\r\n                                        Command = new RelayCommand(DebugRemoveAllDevices),\r\n                                        Glyph = \"\\xE894\",\r\n                                        IsChecked = true,\r\n                                    },\r\n                                    new ContextMenuItem\r\n                                    {\r\n                                        DisplayName = \"Add mock device\",\r\n                                        Command = new RelayCommand(DebugAddMockDevice),\r\n                                        Glyph = \"\\xE948\",\r\n                                        IsChecked = true,\r\n                                    },\r\n                                    new ContextMenuSeparator(),\r\n                                    new ContextMenuItem\r\n                                    {\r\n                                        DisplayName = \"View colors\",\r\n                                        Command = new RelayCommand(() => ProcessHelper.StartNoThrow(\"EarTrumpet.ColorTool.exe\")),\r\n                                        Glyph = \"\\xE790\",\r\n                                        IsChecked = true,\r\n                                    },\r\n                                },\r\n                            },\r\n                        };\r\n                }\r\n            }\r\n        }\r\n\r\n        public static void Add()\r\n        {\r\n            AddonManager.Host.TrayContextMenuItems.Add(new DebugContextMenuAddon());\r\n        }\r\n\r\n        private static void DebugRemoveAllDevices()\r\n        {\r\n            var devManager = WindowsAudioFactory.Create(AudioDeviceKind.Playback);\r\n            var devManagerNotify = (Interop.MMDeviceAPI.IMMNotificationClient)devManager;\r\n            foreach (var dev in devManager.Devices.ToArray())\r\n            {\r\n                devManagerNotify.OnDeviceRemoved(dev.Id);\r\n            }\r\n            devManagerNotify.OnDefaultDeviceChanged(Interop.MMDeviceAPI.EDataFlow.eRender, Interop.MMDeviceAPI.ERole.eMultimedia, null);\r\n            devManagerNotify.OnDefaultDeviceChanged(Interop.MMDeviceAPI.EDataFlow.eRender, Interop.MMDeviceAPI.ERole.eConsole, null);\r\n        }\r\n\r\n        private static void AddMockApp(IAudioDevice mockDevice, string displayName, string appId, string iconPath)\r\n        {\r\n            var mockApp = MakeMockApp(mockDevice, displayName, appId, iconPath);\r\n            var mockApp2 = MakeMockApp(mockDevice, displayName, appId, iconPath);\r\n            var mockApp3 = MakeMockApp(mockDevice, displayName, appId, iconPath);\r\n\r\n            var group = new DataModel.WindowsAudio.Internal.AudioDeviceSessionGroup(mockDevice, mockApp);\r\n            group.AddSession(mockApp2);\r\n            group.AddSession(mockApp3);\r\n            mockDevice.Groups.Add(group);\r\n        }\r\n\r\n        private static DataModel.Audio.Mocks.AudioDeviceSession MakeMockApp(IAudioDevice mockDevice, string displayName, string appId, string iconPath)\r\n        {\r\n            return new DataModel.Audio.Mocks.AudioDeviceSession(\r\n                mockDevice,\r\n                Guid.NewGuid().ToString(),\r\n                displayName,\r\n                appId,\r\n                Environment.ExpandEnvironmentVariables(iconPath));\r\n        }\r\n\r\n        private static void DebugAddMockDevice()\r\n        {\r\n            var id = Guid.NewGuid().ToString();\r\n            var devManager = WindowsAudioFactory.Create(AudioDeviceKind.Playback);\r\n            var devManagerNotify = (Interop.MMDeviceAPI.IMMNotificationClient)devManager;\r\n\r\n            var mockDevice = new DataModel.Audio.Mocks.AudioDevice(id, devManager);\r\n\r\n            AddMockApp(mockDevice,\r\n                \"System Sounds\",\r\n                \"*SystemSounds\",\r\n                AppInformationFactory.CreateForProcess(0).SmallLogoPath);\r\n            AddMockApp(mockDevice,\r\n                \"Firefaux\",\r\n                \"Firefaux\",\r\n                @\"%ProgramFiles%\\Mozilla Firefox\\firefox.exe\");\r\n            AddMockApp(mockDevice,\r\n                \"Chr0me\",\r\n                \"Chr0me\",\r\n                @\"%ProgramFilesx86%\\Google\\Chrome\\Application\\chrome.exe\");\r\n\r\n            var addInfo = devManager.GetType().GetMethod(\"Add\", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);\r\n            addInfo.Invoke(devManager, new object[] { mockDevice });\r\n        }\r\n    }\r\n}\r\n#endif"
  },
  {
    "path": "EarTrumpet/Diagnosis/CircularBufferTraceListener.cs",
    "content": "﻿using System;\r\nusing System.Collections.Concurrent;\r\nusing System.Diagnostics;\r\nusing System.Text;\r\nusing System.Threading;\r\n\r\nnamespace EarTrumpet.Diagnosis\r\n{\r\n    class CircularBufferTraceListener : TraceListener\r\n    {\r\n        private const int MAX_LOG_LINES = 2000;\r\n        private readonly ConcurrentQueue<string> _log = new ConcurrentQueue<string>();\r\n        private readonly DefaultTraceListener _defaultListener = new DefaultTraceListener();\r\n\r\n        public override void Write(string message) => Debug.Assert(false);\r\n\r\n        public override void WriteLine(string message)\r\n        {\r\n            var threadId = Thread.CurrentThread.ManagedThreadId;\r\n            var idText = threadId == 1 ? \"UI\" : threadId.ToString().PadLeft(2, ' ') + \"  \";\r\n            message = $\"{DateTime.Now.ToString(\"HH:mm:ss.fff\")} {idText} {message}\";\r\n\r\n            _log.Enqueue(message + Environment.NewLine);\r\n\r\n            while (_log.Count > MAX_LOG_LINES)\r\n            {\r\n                _log.TryDequeue(out var unused);\r\n            }\r\n\r\n            _defaultListener.WriteLine(message);\r\n        }\r\n\r\n        public string GetLogText()\r\n        {\r\n            var ret = new StringBuilder();\r\n            foreach(var line in _log.ToArray())\r\n            {\r\n                ret.Append(line);\r\n            }\r\n            return ret.ToString();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Diagnosis/ErrorReporter.cs",
    "content": "﻿using Bugsnag;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.Diagnosis\r\n{\r\n    class ErrorReporter\r\n    {\r\n        private static ErrorReporter s_instance;\r\n        private readonly Client _bugsnagClient;\r\n        private readonly CircularBufferTraceListener _listener;\r\n        private readonly AppSettings _settings;\r\n\r\n        public ErrorReporter(AppSettings settings)\r\n        {\r\n            Debug.Assert(s_instance == null);\r\n            s_instance = this;\r\n\r\n            _listener = new CircularBufferTraceListener();\r\n            _settings = settings;\r\n            Trace.Listeners.Clear();\r\n            Trace.Listeners.Add(_listener);\r\n\r\n            if (_settings.IsTelemetryEnabled)\r\n            {\r\n                try\r\n                {\r\n                    _bugsnagClient = new Client(Bugsnag.ConfigurationSection.Configuration.Settings);\r\n                    _bugsnagClient.BeforeNotify(new Middleware(OnBeforeNotify));\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine($\"ErrorReporter .ctor Failed: {ex}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public void DisplayDiagnosticData()\r\n        {\r\n            LocalDataExporter.DumpAndShowData(_listener.GetLogText());\r\n        }\r\n\r\n        public static void LogWarning(Exception ex) => s_instance.LogWarningInstance(ex);\r\n        private void LogWarningInstance(Exception ex)\r\n        {\r\n            Trace.WriteLine($\"## Warning Notify ##: {ex}\");\r\n            _bugsnagClient?.Notify(ex, Severity.Warning);\r\n        }\r\n\r\n        private void OnBeforeNotify(Bugsnag.Payload.Report error)\r\n        {\r\n            try\r\n            {\r\n                // Remove default properties that we don't need.\r\n                error.Event.Device.Clear();\r\n                Fill(error.Event.Device, SnapshotData.Device);\r\n\r\n                Fill(error.Event.App, SnapshotData.App);\r\n\r\n                var appSettings = new Dictionary<string, object>();\r\n                error.Event.Metadata.Add(\"AppSettings\", appSettings);\r\n                Fill(appSettings, SnapshotData.AppSettings);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"## ErrorReporter OnBeforeNotify: {ex}\");\r\n            }\r\n        }\r\n\r\n        private void Fill(Dictionary<string, object> dest, Dictionary<string, Func<object>> source)\r\n        {\r\n            foreach (var key in source.Keys)\r\n            {\r\n                dest[key] = SnapshotData.InvokeNoThrow(source[key]);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Diagnosis/LocalDataExporter.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.DataModel.WindowsAudio.Internal;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.Diagnosis\r\n{\r\n    public class LocalDataExporter\r\n    {\r\n        private static readonly string LineText = \"--------------------------------------------------------------------\";\r\n\r\n        public static void DumpAndShowData(string logText)\r\n        {\r\n            var ret = new StringBuilder();\r\n            Populate(ret, SnapshotData.App);\r\n            Populate(ret, SnapshotData.Device);\r\n            Populate(ret, SnapshotData.AppSettings);\r\n            Populate(ret, SnapshotData.LocalOnly);\r\n            ret.AppendLine(LineText);\r\n            DumpDeviceManager(ret, WindowsAudioFactory.Create(AudioDeviceKind.Playback));\r\n            ret.AppendLine(logText);\r\n\r\n            var fileName = $\"{Path.GetTempFileName()}.txt\";\r\n            File.WriteAllText(fileName, ret.ToString());\r\n            ProcessHelper.StartNoThrow(fileName);\r\n        }\r\n\r\n        private static void Populate(StringBuilder builder, Dictionary<string, Func<object>> source)\r\n        {\r\n            foreach (var key in source.Keys)\r\n            {\r\n                builder.AppendLine($\"{key}: {SnapshotData.InvokeNoThrow(source[key])}\");\r\n            }\r\n        }\r\n\r\n        private static void DumpDeviceManager(StringBuilder builder, IAudioDeviceManager manager)\r\n        {\r\n            foreach (var device in manager.Devices)\r\n            {\r\n                DumpDevice(builder, device);\r\n            }\r\n        }\r\n\r\n        private static void DumpDevice(StringBuilder builder, IAudioDevice device)\r\n        {\r\n            builder.Append(device == device.Parent.Default ? $\"(Default Device) \" : \"\");\r\n            builder.AppendLine($\"{device.DisplayName} {device.Volume.ToVolumeInt()}%{(device.IsMuted ? \" (Muted)\" : \"\")} Id: {device.Id}\");\r\n\r\n            foreach (AudioDeviceSessionGroup appGroup in device.Groups)\r\n            {\r\n                builder.AppendLine(LineText);\r\n                foreach (AudioDeviceSessionGroup appSession in appGroup.Children)\r\n                {\r\n                    foreach (IAudioDeviceSession rawSession in appSession.Children)\r\n                    {\r\n                        DumpSession(builder,\r\n                            appSession.Children.Count == 1 ? \"  \" : \"| \", \r\n                            (IAudioDeviceSessionInternal)rawSession);\r\n                    }\r\n                }\r\n            }\r\n            builder.AppendLine(LineText);\r\n        }\r\n\r\n        private static void DumpSession(StringBuilder builder, string indent, IAudioDeviceSessionInternal session)\r\n        {\r\n            var typeText = session.IsSystemSoundsSession ? \"SystemSounds\" : (session.IsDesktopApp ? \"Desktop\" : \"Modern\");\r\n\r\n            builder.AppendLine(indent + $\"{session.DisplayName}\");\r\n            builder.AppendLine(indent + $\"  ({typeText}) ({session.State}) {session.Volume.ToVolumeInt()}%{(session.IsMuted ? \" (Muted)\" : \"\")} Id: {session.Id}\");\r\n            builder.AppendLine(indent + $\"  AppId: {session.AppId} ProcessId: {session.ProcessId} Alive: {IsProcessAlive(session.ProcessId)}\");\r\n            builder.AppendLine(indent + $\"  IconPath: {session.IconPath}\");\r\n            builder.AppendLine(indent + $\"  GroupingParam: {session.GroupingParam}\");\r\n\r\n            var persisted = ((IAudioDeviceManagerWindowsAudio)session.Parent.Parent).GetDefaultEndPoint(session.ProcessId);\r\n            if (!string.IsNullOrWhiteSpace(persisted))\r\n            {\r\n                builder.AppendLine(indent + $\"  Persisted Endpoint Id: {persisted}\");\r\n            }\r\n        }\r\n\r\n        private static bool IsProcessAlive(int processId)\r\n        {\r\n            bool isAlive = false;\r\n            try\r\n            {\r\n                using (Process.GetProcessById(processId))\r\n                {\r\n                }\r\n                isAlive = true;\r\n            }\r\n            catch (Exception)\r\n            {\r\n            }\r\n            return isAlive;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Diagnosis/SnapshotData.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Extensibility.Hosting;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Themes;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Globalization;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.Diagnosis\r\n{\r\n    class SnapshotData\r\n    {\r\n        public static string InvokeNoThrow(Func<object> func)\r\n        {\r\n            try\r\n            {\r\n                return $\"{func()}\";\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                return $\"{ex}\";\r\n            }\r\n        }\r\n\r\n        public static Dictionary<string, Func<object>> App\r\n        {\r\n            get\r\n            {\r\n                return new Dictionary<string, Func<object>>\r\n                {\r\n                    { \"version\", () => EarTrumpet.App.PackageVersion.ToString() },\r\n                    { \"runtimeMinutes\", () => (int)EarTrumpet.App.Duration.TotalMinutes },\r\n                    { \"gdiObjects\", () => User32.GetGuiResources(Kernel32.GetCurrentProcess(), User32.GR_FLAGS.GR_GDIOBJECTS) },\r\n                    { \"userObjects\", () => User32.GetGuiResources(Kernel32.GetCurrentProcess(), User32.GR_FLAGS.GR_USEROBJECTS) },\r\n                    { \"globalGdiObjects\", () => User32.GetGuiResources(User32.GR_GLOBAL, User32.GR_FLAGS.GR_USEROBJECTS) },\r\n                    { \"globalUserObjects\", () => User32.GetGuiResources(User32.GR_GLOBAL, User32.GR_FLAGS.GR_USEROBJECTS) },\r\n                    { \"handleCount\", () => GetProcessHandleCount() },\r\n#if DEBUG\r\n                    { \"releaseStage\", () => \"development\" },\r\n#else\r\n                    { \"releaseStage\", () => \"production\" },\r\n#endif\r\n                };\r\n            }\r\n        }\r\n\r\n        public static Dictionary<string, Func<object>> Device\r\n        {\r\n            get\r\n            {\r\n                return new Dictionary<string, Func<object>>\r\n                {\r\n                    { \"osVersionBuild\", () => SystemSettings.BuildLabel },\r\n                    { \"osArchitecture\", () => Environment.Is64BitOperatingSystem ? \"64 bit\" : \"32 bit\" },\r\n                    { \"processorCount\", () => Environment.ProcessorCount + \" core(s)\" },\r\n                };\r\n            }\r\n        }\r\n\r\n        public static Dictionary<string, Func<object>> AppSettings\r\n        {\r\n            get\r\n            {\r\n                return new Dictionary<string, Func<object>>\r\n                {\r\n                    { \"IsLightTheme\", () => SystemSettings.IsLightTheme },\r\n                    { \"IsSystemLightTheme\", () => SystemSettings.IsSystemLightTheme },\r\n                    { \"IsRTL\", () => SystemSettings.IsRTL },\r\n                    { \"IsTransparencyEnabled\", () => SystemSettings.IsTransparencyEnabled },\r\n                    { \"UseAccentColor\", () => SystemSettings.UseAccentColor },\r\n                    { \"AnimationsEnabled\", () => Manager.Current.AnimationsEnabled },\r\n                    { \"IsHighContrast\", () => SystemParameters.HighContrast },\r\n                    { \"HasIdentity\", () => EarTrumpet.App.HasIdentity },\r\n                    { \"IsShuttingDown\", () => EarTrumpet.App.IsShuttingDown },\r\n                    { \"Culture\", () =>  CultureInfo.CurrentCulture.Name },\r\n                    { \"CurrentUICulture\", () => CultureInfo.CurrentUICulture.Name },\r\n                };\r\n            }\r\n        }\r\n\r\n        public static Dictionary<string, Func<object>> LocalOnly\r\n        {\r\n            get\r\n            {\r\n                return new Dictionary<string, Func<object>>\r\n                {\r\n                    { \"systemDpi\", () => User32.GetDpiForSystem() },\r\n                    { \"taskbarDpi\", () => WindowsTaskbar.Dpi },\r\n                    { \"addons\", () => AddonManager.GetDiagnosticInfo() },\r\n                    { \"region\", () =>  new RegionInfo(CultureInfo.CurrentCulture.LCID).TwoLetterISORegionName }\r\n                };\r\n            }\r\n        }\r\n\r\n        private static uint GetProcessHandleCount()\r\n        {\r\n            Kernel32.GetProcessHandleCount(Kernel32.GetCurrentProcess(), out uint handleCount);\r\n            return handleCount;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/EarTrumpet.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.props\" Condition=\"Exists('..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.props')\" />\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\"'$(Configuration)' == ''\">Debug</Configuration>\r\n    <Platform Condition=\"'$(Platform)' == ''\">x86</Platform>\r\n    <ProjectGuid>{BA3C7B42-84B0-468C-8640-217E2A24CF81}</ProjectGuid>\r\n    <OutputType>WinExe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>EarTrumpet</RootNamespace>\r\n    <AssemblyName>EarTrumpet</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <WarningLevel>4</WarningLevel>\r\n    <WarningsAsErrors>true</WarningsAsErrors>\r\n    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r\n    <TargetFrameworkProfile />\r\n    <ApplicationIcon>Assets\\Icon-Light.ico</ApplicationIcon>\r\n    <ApplicationManifest>App.manifest</ApplicationManifest>\r\n    <NuGetPackageImportStamp>\r\n    </NuGetPackageImportStamp>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86' OR '$(Configuration)|$(Platform)' == 'VSDebug|x86'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>..\\Build\\Debug\\</OutputPath>\r\n    <DefineConstants>TRACE;X86;DEBUG</DefineConstants>\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'VSDebug|x86'\">\r\n    <DefineConstants>TRACE;X86;DEBUG;VSDEBUG</DefineConstants>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\r\n    <OutputPath>..\\Build\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE;X86</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"Bugsnag, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\Bugsnag.2.2.0\\lib\\net45\\Bugsnag.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Bugsnag.ConfigurationSection, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\Bugsnag.ConfigurationSection.2.2.0\\lib\\net45\\Bugsnag.ConfigurationSection.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\Newtonsoft.Json.13.0.2\\lib\\net45\\Newtonsoft.Json.dll</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.ComponentModel.Composition\" />\r\n    <Reference Include=\"System.Configuration\" />\r\n    <Reference Include=\"System.Drawing\" />\r\n    <Reference Include=\"System.Management\" />\r\n    <Reference Include=\"System.Net.Http\" />\r\n    <Reference Include=\"System.Runtime.Serialization\" />\r\n    <Reference Include=\"System.Windows.Forms\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Xaml\">\r\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"Windows, Version=255.255.255.255, Culture=neutral, processorArchitecture=MSIL\">\r\n      <SpecificVersion>False</SpecificVersion>\r\n      <HintPath Condition=\"Exists('$(MSBuildProgramFiles32)\\Windows Kits\\10\\UnionMetadata\\Windows.winmd')\">$(MSBuildProgramFiles32)\\Windows Kits\\10\\UnionMetadata\\Windows.winmd</HintPath>\r\n      <HintPath Condition=\"Exists('$(MSBuildProgramFiles32)\\Windows Kits\\10\\UnionMetadata\\10.0.16299.0\\Windows.winmd')\">$(MSBuildProgramFiles32)\\Windows Kits\\10\\UnionMetadata\\10.0.16299.0\\Windows.winmd</HintPath>\r\n    </Reference>\r\n    <Reference Include=\"WindowsBase\" />\r\n    <Reference Include=\"PresentationCore\" />\r\n    <Reference Include=\"PresentationFramework\" />\r\n    <Reference Include=\"XamlAnimatedGif, Version=2.0.0.0, Culture=neutral, PublicKeyToken=20a987d8023d9690, processorArchitecture=MSIL\">\r\n      <HintPath>..\\packages\\XamlAnimatedGif.2.1.0\\lib\\net45\\XamlAnimatedGif.dll</HintPath>\r\n    </Reference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ApplicationDefinition Include=\"App.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </ApplicationDefinition>\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\EarTrumpetActionsAddon.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\Controls\\LinkedTextBlock.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\Controls\\MenuButton.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\AudioAppEventKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\AudioDeviceEventKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\BoolValue.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\ComparisonBoolKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\EarTrumpetEventKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\MuteKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\ProcessEventKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\ProcessStateKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Enum\\SetVolumeKind.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\IPartWithApp.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\IPartWithDevice.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\IPartWithText.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\IPartWithVolume.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\LocalVariablesContainer.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Part.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Processing\\ActionProcessor.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Processing\\AudioTriggerManager.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Processing\\ConditionProcessor.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Processing\\TriggerManager.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\ProcessWatcher.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\Actions.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\App.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\Conditions.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\Device.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\EarTrumpetAction.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\DataModel\\Serialization\\Triggers.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\Interop\\Helpers\\WindowWatcher.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\Interop\\User32.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\ActionsCategoryViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetAppMuteActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetAppVolumeActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetDefaultDeviceActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetDeviceMuteActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetDeviceVolumeActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Actions\\SetVariableActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\AppListViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Conditions\\DefaultDeviceConditionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Conditions\\ProcessConditionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Conditions\\VariableConditionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\DefaultPlaybackDeviceViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\DeviceListViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\DeviceViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\DeviceViewModelBase.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\EarTrumpetActionPageHeaderViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\EarTrumpetActionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\EveryAppViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\ForegroundAppViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\HotkeyViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\ImportExportPageViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\IOptionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Option.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\OptionViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\PartViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\PartViewModelFactory.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\TextViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\AppEventTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\ContextMenuTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\DeviceEventTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\EventTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\HotkeyTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\Triggers\\ProcessTriggerViewModel.cs\" />\r\n    <Compile Include=\"Addons\\EarTrumpet.Actions\\ViewModel\\VolumeViewModel.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\AppInformationFactory.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\IAppInfo.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\Internal\\DesktopAppInfo.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\Internal\\ModernAppInfo.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\Internal\\SystemSoundsAppInfo.cs\" />\r\n    <Compile Include=\"DataModel\\AppInformation\\Internal\\ZombieProcessException.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\Mocks\\AudioDevice.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\Mocks\\AudioDeviceSession.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\AudioDeviceKind.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\IAudioDeviceManagerWindowsAudio.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\IAudioDeviceSessionComparer.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\IAudioDeviceWindowsAudio.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceChannel.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceChannelCollection.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSessionChannel.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSessionChannelCollection.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSessionChannelMultiplexer.cs\" />\r\n    <Compile Include=\"DataModel\\FilteredCollectionChain.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\IAudioDeviceChannel.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\IAudioDeviceSessionChannel.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\IAudioDeviceInternal.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\IAudioDeviceSessionInternal.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\WindowsAudioFactory.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\Helpers.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\SessionState.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\Internal\\RegistrySettingsBag.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\Serializer.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\StorageFactory.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\Internal\\WindowsStorageSettingsBag.cs\" />\r\n    <Compile Include=\"DebugHelpers.cs\" />\r\n    <Compile Include=\"Diagnosis\\ErrorReporter.cs\" />\r\n    <Compile Include=\"Diagnosis\\SnapshotData.cs\" />\r\n    <Compile Include=\"Extensibility\\EarTrumpetAddon.cs\" />\r\n    <Compile Include=\"Extensibility\\EarTrumpetAddonManifest.cs\" />\r\n    <Compile Include=\"Extensibility\\Hosting\\AddonHost.cs\" />\r\n    <Compile Include=\"Extensibility\\Hosting\\AddonResolver.cs\" />\r\n    <Compile Include=\"Extensibility\\Shared\\PlaybackDataModelHost.cs\" />\r\n    <Compile Include=\"Extensibility\\Shared\\ResourceLoader.cs\" />\r\n    <Compile Include=\"Extensions\\EarTrumpetAddonExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\EventBinding\\EventBindingExtension.cs\" />\r\n    <Compile Include=\"Extensions\\EventBinding\\HandledEventBindingExtension.cs\" />\r\n    <Compile Include=\"Extensions\\FrameworkElementExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\ListExtensions.cs\" />\r\n    <Compile Include=\"Features.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\AudioPolicyConfigFactoryImplFor21H2.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\AudioPolicyConfigFactoryImplForDownlevel.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\InputHelper.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\MouseHook.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\SettingsPageHelper.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\PackageHelper.cs\" />\r\n    <Compile Include=\"Interop\\IShellItemImageFactory.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioPolicyConfigFactoryVariantFor21H2.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioPolicyConfigFactory.cs\" />\r\n    <Compile Include=\"Interop\\SafeHandles\\HMODULE.cs\" />\r\n    <Compile Include=\"Interop\\SIZE.cs\" />\r\n    <Compile Include=\"UI\\Behaviors\\FrameworkElementEx.cs\" />\r\n    <Compile Include=\"UI\\Behaviors\\ComboBoxEx.cs\" />\r\n    <Compile Include=\"UI\\Controls\\AppPopup.cs\" />\r\n    <Compile Include=\"UI\\Controls\\ImageEx.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\IShellNotifyIconSource.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\ShellNotifyIcon.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\Kernel32Helper.cs\" />\r\n    <Compile Include=\"Interop\\ApplicationResolver.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\WindowSizeHelper.cs\" />\r\n    <Compile Include=\"Interop\\NotifyIconData.cs\" />\r\n    <Compile Include=\"Interop\\SndVolSSO.cs\" />\r\n    <Compile Include=\"UI\\Behaviors\\ButtonEx.cs\" />\r\n    <Compile Include=\"UI\\Behaviors\\ScrollViewerEx.cs\" />\r\n    <Compile Include=\"UI\\Behaviors\\TextBoxEx.cs\" />\r\n    <Compile Include=\"UI\\Controls\\ListView.cs\" />\r\n    <Compile Include=\"UI\\Controls\\ListViewItem.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\LegacyControlPanelHelper.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\NavigationCookie.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\FlyoutViewState.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\WindowHolder.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\WindowViewState.cs\" />\r\n    <Compile Include=\"UI\\Themes\\AcrylicBrush.cs\" />\r\n    <Compile Include=\"UI\\Themes\\Brush.cs\" />\r\n    <Compile Include=\"UI\\Themes\\BrushValueParser.cs\" />\r\n    <Compile Include=\"UI\\Themes\\OS.cs\" />\r\n    <Compile Include=\"UI\\Themes\\Options.cs\" />\r\n    <Compile Include=\"UI\\Themes\\Ref.cs\" />\r\n    <Compile Include=\"UI\\Themes\\Rule.cs\" />\r\n    <Compile Include=\"UI\\Themes\\ThemeBindingInfo.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\TaskbarIconSource.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\BackstackViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\EarTrumpetCommunitySettingsPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\EarTrumpetMouseSettingsPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\EarTrumpetShortcutsPageViewModel.cs\" />\r\n    <Compile Include=\"Extensibility\\IEarTrumpetAddonAppContent.cs\" />\r\n    <Compile Include=\"Extensibility\\IEarTrumpetAddonDeviceContent.cs\" />\r\n    <Compile Include=\"Extensibility\\IEarTrumpetAddonEvents.cs\" />\r\n    <Compile Include=\"Extensibility\\IEarTrumpetAddonNotificationAreaContextMenu.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\ISettingsBag.cs\" />\r\n    <Compile Include=\"Extensibility\\IEarTrumpetAddonSettingsPage.cs\" />\r\n    <Compile Include=\"Extensibility\\Shared\\ServiceBus.cs\" />\r\n    <Compile Include=\"Extensions\\DependencyObjectExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\ExceptionExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\IPropertyStoreExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\OperatingSystemExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\RegistryKeyExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\ColorExtensions.cs\" />\r\n    <Compile Include=\"Extensibility\\Hosting\\AddonManager.cs\" />\r\n    <Compile Include=\"DataModel\\Storage\\Internal\\NamespacedSettingsBag.cs\" />\r\n    <Compile Include=\"Interop\\APPBARDATA.cs\" />\r\n    <Compile Include=\"Interop\\AppBarEdge.cs\" />\r\n    <Compile Include=\"Interop\\AppBarMessage.cs\" />\r\n    <Compile Include=\"Interop\\Combase.cs\" />\r\n    <Compile Include=\"Interop\\DwmApi.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\AudioPolicyConfigFactory.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\HotkeyData.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\HotkeyManager.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\IconHelper.cs\" />\r\n    <Compile Include=\"Interop\\HRESULT.cs\" />\r\n    <Compile Include=\"Interop\\FolderIds.cs\" />\r\n    <Compile Include=\"Interop\\Gdi32.cs\" />\r\n    <Compile Include=\"Interop\\GPS.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\Win32Window.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IChannelAudioVolume.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IDeviceTopology.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IMMEndpoint.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IPolicyConfig.cs\" />\r\n    <Compile Include=\"Interop\\IShellItem.cs\" />\r\n    <Compile Include=\"Interop\\IShellItem2.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioPolicyConfigFactoryVariantForDownlevel.cs\" />\r\n    <Compile Include=\"Interop\\Kernel32.cs\" />\r\n    <Compile Include=\"Interop\\Ntdll.cs\" />\r\n    <Compile Include=\"Interop\\Ole32.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\PolicyConfigClient.cs\" />\r\n    <Compile Include=\"Interop\\PropertyKeys.cs\" />\r\n    <Compile Include=\"Interop\\PropVariant.cs\" />\r\n    <Compile Include=\"Interop\\PropVariantUnion.cs\" />\r\n    <Compile Include=\"Interop\\SFGAO.cs\" />\r\n    <Compile Include=\"Interop\\Shell32.cs\" />\r\n    <Compile Include=\"Interop\\Shlwapi.cs\" />\r\n    <Compile Include=\"Interop\\SICHINT.cs\" />\r\n    <Compile Include=\"Interop\\SIGDN.cs\" />\r\n    <Compile Include=\"Interop\\STGM.cs\" />\r\n    <Compile Include=\"Extensions\\VisualExtensions.cs\" />\r\n    <Compile Include=\"Interop\\User32.cs\" />\r\n    <Compile Include=\"Interop\\Uxtheme.cs\" />\r\n    <Compile Include=\"Interop\\RECT.cs\" />\r\n    <Compile Include=\"Diagnosis\\CircularBufferTraceListener.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\ImmersiveSystemColors.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\AddonAboutPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\AdvertisedCategorySettingsViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\EarTrumpetAboutPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\EarTrumpetLegacySettingsPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\HotkeyViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\IFlyoutViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\IPopupHostViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\ISettingsViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsAppItemViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsPageHeaderViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsPageViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsSearchItemViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsCategoryViewModel.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\ProcessHelper.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\SystemSoundsHelper.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\WindowAnimationLibrary.cs\" />\r\n    <Compile Include=\"DataModel\\ProcessWatcherService.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\IAppIconSource.cs\" />\r\n    <Compile Include=\"UI\\Controls\\MenuItemTemplateSelector.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\ContextMenuItem.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\FocusedAppItemViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\FocusedDeviceViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\IAppItemViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\IDeviceViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\IFocusedViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\ModalDialogViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\SettingsDialogViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\TemporaryAppItemViewModel.cs\" />\r\n    <Compile Include=\"Extensions\\IEnumerableExtensions.cs\" />\r\n    <Compile Include=\"UI\\Helpers\\RelayCommand.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\ToolbarItemViewModel.cs\" />\r\n    <Compile Include=\"Interop\\Helpers\\AccentPolicyLibrary.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioPolicyConfigService.cs\" />\r\n    <Compile Include=\"Diagnosis\\LocalDataExporter.cs\" />\r\n    <Compile Include=\"AppSettings.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\WelcomeViewModel.cs\" />\r\n    <Compile Include=\"UI\\Views\\DialogWindow.xaml.cs\">\r\n      <DependentUpon>DialogWindow.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"UI\\Views\\SettingsWindow.xaml.cs\">\r\n      <DependentUpon>SettingsWindow.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Interop\\Helpers\\SingleInstanceAppMutex.cs\" />\r\n    <Compile Include=\"UI\\Controls\\VolumeSlider.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSessionGroup.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\AudioSessionDisconnectReason.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\AudioSessionState.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\AUDIO_VOLUME_NOTIFICATION_DATA.cs\" />\r\n    <Compile Include=\"Interop\\CLSCTX.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\DeviceState.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\EDataFlow.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\ERole.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioEndpointVolume.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioEndpointVolumeCallback.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioMeterInformation.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionControl.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionControl2.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionEnumerator.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionEvents.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionManager.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionManager2.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioSessionNotification.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IAudioVolumeDuckNotification.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IMMDevice.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IMMDeviceCollection.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IMMDeviceEnumerator.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\IMMNotificationClient.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\ISimpleAudioVolume.cs\" />\r\n    <Compile Include=\"Interop\\MMDeviceAPI\\MMDeviceEnumerator.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\IAudioDevice.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\IAudioDeviceManager.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\IAudioDeviceSession.cs\" />\r\n    <Compile Include=\"DataModel\\Audio\\IStreamWithVolumeControl.cs\" />\r\n    <Compile Include=\"Interop\\IPropertyStore.cs\" />\r\n    <Compile Include=\"UI\\Views\\DeviceView.xaml.cs\">\r\n      <DependentUpon>DeviceView.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Extensions\\FloatExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\IconExtensions.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDevice.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceManager.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSession.cs\" />\r\n    <Compile Include=\"DataModel\\WindowsAudio\\Internal\\AudioDeviceSessionCollection.cs\" />\r\n    <Compile Include=\"UI\\Views\\FullWindow.xaml.cs\">\r\n      <DependentUpon>FullWindow.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\r\n      <AutoGen>True</AutoGen>\r\n      <DesignTime>True</DesignTime>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Interop\\Helpers\\WindowsTaskbar.cs\" />\r\n    <Compile Include=\"UI\\Themes\\Manager.cs\" />\r\n    <Compile Include=\"DataModel\\SystemSettings.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\AppItemViewModel.cs\" />\r\n    <Compile Include=\"Extensions\\CollectionExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\WindowExtensions.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\DeviceViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\FlyoutViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\FullWindowViewModel.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\DeviceCollectionViewModel.cs\" />\r\n    <Compile Include=\"BindableBase.cs\" />\r\n    <Compile Include=\"UI\\ViewModels\\AudioSessionViewModel.cs\" />\r\n    <Compile Include=\"UI\\Views\\AppItemView.xaml.cs\">\r\n      <DependentUpon>AppItemView.xaml</DependentUpon>\r\n    </Compile>\r\n    <Page Include=\"Addons\\EarTrumpet.Actions\\AddonResources.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"UI\\Mutable.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"UI\\Views\\DialogWindow.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"UI\\Views\\SettingsWindow.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"UI\\Views\\DeviceView.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"UI\\Views\\FullWindow.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"UI\\Views\\FlyoutWindow.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Compile Include=\"App.xaml.cs\">\r\n      <DependentUpon>App.xaml</DependentUpon>\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"UI\\Views\\FlyoutWindow.xaml.cs\">\r\n      <DependentUpon>FlyoutWindow.xaml</DependentUpon>\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Page Include=\"UI\\Views\\AppItemView.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <AppDesigner Include=\"Properties\\\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n    <None Include=\"App.manifest\" />\r\n    <None Include=\"packages.config\" />\r\n    <None Include=\"prebuild.ps1\" />\r\n    <None Include=\"README.md\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Resource Include=\"Assets\\Icon-Light.ico\" />\r\n    <Resource Include=\"Assets\\Logo-Dark.png\" />\r\n    <Resource Include=\"Assets\\Logo-Light.png\" />\r\n    <Resource Include=\"Assets\\Icon-Dark.ico\" />\r\n    <Resource Include=\"Assets\\Welcome.gif\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"Properties\\Resources.af-ZA.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ar-SA.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.bs-latn-ba.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ca-ES.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.cs-CZ.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.da-DK.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.de-DE.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.el-GR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.es-ES.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.fi-FI.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.fr-FR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.he-IL.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.hr-HR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.hu-HU.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.it-IT.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ja-JP.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ko-KR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.nl-NL.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.no-NO.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.pl-PL.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.pt-BR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.pt-PT.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ro-RO.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ru-RU.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.sl-SI.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.sv-SE.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.ta-IN.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.th-TH.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.tr-TR.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.uk-UA.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.vi-VN.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.zh-CN.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.zh-TW.resx\" />\r\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\r\n      <Generator>PublicResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n      <SubType>Designer</SubType>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n  <PropertyGroup>\r\n    <PreBuildEvent>\r\n    </PreBuildEvent>\r\n  </PropertyGroup>\r\n  <Target Name=\"EnsureNuGetPackageBuildImports\" BeforeTargets=\"PrepareForBuild\">\r\n    <PropertyGroup>\r\n      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>\r\n    </PropertyGroup>\r\n    <Error Condition=\"!Exists('..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.props')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.props'))\" />\r\n    <Error Condition=\"!Exists('..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.targets')\" Text=\"$([System.String]::Format('$(ErrorText)', '..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.targets'))\" />\r\n  </Target>\r\n  <!-- Versioning -->\r\n  <Target Name=\"BeforeBuild\" DependsOnTargets=\"GetVersion\">\r\n    <PropertyGroup Condition=\" '$(Channel)'=='Store' \">\r\n      <ChannelVersion>$(GitVersion_MajorMinorPatch).0</ChannelVersion>\r\n    </PropertyGroup>\r\n    <PropertyGroup Condition=\" '$(ChannelVersion)'=='' \">\r\n      <ChannelVersion>$(GitVersion_MajorMinorPatch).$(GitVersion_CommitsSinceVersionSource)</ChannelVersion>\r\n    </PropertyGroup>\r\n    <Message Text=\"GitVersion_InformationalVersion: $(GitVersion_InformationalVersion)\" />\r\n    <Exec Command=\"powershell -executionpolicy Bypass -noprofile &quot;&amp; '$(ProjectDir)prebuild.ps1'&quot; $(ChannelVersion)\" />\r\n  </Target>\r\n  <Import Project=\"..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.targets\" Condition=\"Exists('..\\packages\\GitVersionTask.5.5.1\\build\\GitVersionTask.targets')\" />\r\n</Project>"
  },
  {
    "path": "EarTrumpet/Extensibility/EarTrumpetAddon.cs",
    "content": "﻿using EarTrumpet.DataModel.Storage;\r\nusing EarTrumpet.Extensibility.Shared;\r\nusing EarTrumpet.Extensions;\r\nusing Newtonsoft.Json;\r\nusing System.IO;\r\n\r\nnamespace EarTrumpet.Extensibility\r\n{\r\n    interface IAddonInternal\r\n    {\r\n        void Initialize();\r\n        void InitializeInternal(AddonManifest manifest);\r\n        bool IsInternal { get; set; }\r\n    }\r\n\r\n    public class EarTrumpetAddon : IAddonInternal\r\n    {\r\n        public string DisplayName { get; protected set; }\r\n        public ISettingsBag Settings { get; private set; }\r\n        public AddonManifest Manifest { get; private set; }\r\n\r\n        bool IAddonInternal.IsInternal { get; set; }\r\n\r\n        void IAddonInternal.Initialize()\r\n        {\r\n            var manifestPath = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), \"AddonManifest.json\");\r\n            Manifest = JsonConvert.DeserializeObject<AddonManifest>(File.ReadAllText(manifestPath));\r\n            Settings = StorageFactory.GetSettings(Manifest.Id);\r\n        }\r\n\r\n        void IAddonInternal.InitializeInternal(AddonManifest manifest)\r\n        {\r\n            Manifest = manifest;\r\n            Settings = StorageFactory.GetSettings(Manifest.Id);\r\n            ((IAddonInternal)this).IsInternal = true;\r\n        }\r\n\r\n        protected void LoadAddonResources()\r\n        {\r\n            ResourceLoader.Load(Manifest.Id, this.IsInternal());\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/EarTrumpetAddonManifest.cs",
    "content": "﻿namespace EarTrumpet.Extensibility\r\n{\r\n    public class AddonManifest\r\n    {\r\n        public string Id { get; set; }\r\n        public string PublisherName { get; set; }\r\n        public string HelpLink { get; set; }\r\n        public string Version { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/Hosting/AddonHost.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.ComponentModel.Composition;\r\n\r\nnamespace EarTrumpet.Extensibility.Hosting\r\n{\r\n    public class AddonHost\r\n    {\r\n        [ImportMany(typeof(EarTrumpetAddon))]\r\n        public List<EarTrumpetAddon> Addons { get; set; }\r\n\r\n        // Optional cast to any of the below:\r\n        public List<IEarTrumpetAddonEvents> Events { get; set; }\r\n        public List<IEarTrumpetAddonNotificationAreaContextMenu> TrayContextMenuItems { get; set; }\r\n        public List<IEarTrumpetAddonAppContent> AppContentItems { get; set; }\r\n        public List<IEarTrumpetAddonDeviceContent> DeviceContentItems { get; set; }\r\n        public List<IEarTrumpetAddonSettingsPage> SettingsItems { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/Hosting/AddonManager.cs",
    "content": "﻿using EarTrumpet.Actions;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Extensibility.Hosting\r\n{\r\n    public class AddonManager\r\n    {\r\n        public static AddonHost Host { get; } = new AddonHost();\r\n\r\n        private static readonly AddonResolver s_resolver = new AddonResolver();\r\n        private static readonly List<string> s_loadedAddonIds = new List<string>();\r\n        private static bool s_shouldLoadInternalAddons = false;\r\n\r\n        public static void Load(bool shouldLoadInternalAddons = false)\r\n        {\r\n            s_shouldLoadInternalAddons = shouldLoadInternalAddons;\r\n\r\n            Host.Addons = new List<EarTrumpetAddon>();\r\n            var loadedCatalogs = s_resolver.Load(Host);\r\n            {\r\n                foreach (var addon in Host.Addons.ToArray())\r\n                {\r\n                    try\r\n                    {\r\n                        ((IAddonInternal)addon).Initialize();\r\n                        s_loadedAddonIds.Add(addon.Manifest.Id);\r\n                    }\r\n                    catch (Exception ex)\r\n                    {\r\n                        Trace.WriteLine($\"AddonManager Load: Failed to initialize addon: {addon.GetType().Assembly.FullName} {ex}\");\r\n                        Host.Addons.Remove(addon);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (s_shouldLoadInternalAddons)\r\n            {\r\n                LoadInternalAddons();\r\n            }\r\n\r\n            Host.Events = Host.Addons.Where(a => a is IEarTrumpetAddonEvents).Select(a => (IEarTrumpetAddonEvents)a).ToList();\r\n            Host.TrayContextMenuItems = Host.Addons.Where(a => a is IEarTrumpetAddonNotificationAreaContextMenu).Select(a => (IEarTrumpetAddonNotificationAreaContextMenu)a).ToList();\r\n            Host.AppContentItems = Host.Addons.Where(a => a is IEarTrumpetAddonAppContent).Select(a => (IEarTrumpetAddonAppContent)a).ToList();\r\n            Host.DeviceContentItems = Host.Addons.Where(a => a is IEarTrumpetAddonDeviceContent).Select(a => (IEarTrumpetAddonDeviceContent)a).ToList();\r\n            Host.SettingsItems = Host.Addons.Where(a => a is IEarTrumpetAddonSettingsPage).Select(a => (IEarTrumpetAddonSettingsPage)a).ToList();\r\n\r\n            Host.Events.ForEachNoThrow(x => x.OnAddonEvent(AddonEventKind.InitializeAddon));\r\n            Host.Events.ForEachNoThrow(x => x.OnAddonEvent(AddonEventKind.AddonsInitialized));\r\n        }\r\n\r\n        private static void LoadInternalAddons()\r\n        {\r\n            var actions = new EarTrumpetActionsAddon();\r\n            Host.Addons.Add(actions);\r\n            ((IAddonInternal)actions).InitializeInternal(new AddonManifest { Id = \"EarTrumpet.Actions\" });\r\n        }\r\n\r\n        public static void Shutdown()\r\n        {\r\n            Trace.WriteLine($\"AddonManager Shutdown\");\r\n            Host.Events.ForEachNoThrow(x => x.OnAddonEvent(AddonEventKind.AppShuttingDown));\r\n        }\r\n\r\n        public static string GetDiagnosticInfo() => string.Join(\" \", s_loadedAddonIds);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensibility/Hosting/AddonResolver.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel.Composition;\r\nusing System.ComponentModel.Composition.Hosting;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Reflection;\r\n\r\nnamespace EarTrumpet.Extensibility.Hosting\r\n{\r\n    class AddonResolver\r\n    {\r\n        private readonly List<string> _addonDirectoryPaths = new List<string>();\r\n\r\n        public AddonResolver()\r\n        {\r\n            // Search in addon directories when the framework can't otherwise resolve an assembly.\r\n            AppDomain.CurrentDomain.AssemblyResolve += OnFinalAssemblyResolve;\r\n        }\r\n\r\n        public IEnumerable<DirectoryCatalog> Load(object target)\r\n        {\r\n            var catalogs = new List<DirectoryCatalog>();\r\n            Trace.WriteLine($\"AddonResolver Load\");\r\n            try\r\n            {\r\n                var rootAddonDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), \"Addons\");\r\n                if (Directory.Exists(rootAddonDir))\r\n                {\r\n                    catalogs.AddRange(Directory.GetDirectories(rootAddonDir).\r\n                        Select(path => SelectAddon(path)).\r\n                        Where(catalog => catalog != null));\r\n\r\n#if DEBUG\r\n                    catalogs.AddRange(Directory.GetDirectories(rootAddonDir)\r\n                        .Select(path => SelectDevAddon(path))\r\n                        .Where(catalog => catalog != null));\r\n#endif\r\n                    new CompositionContainer(new AggregateCatalog(catalogs)).ComposeParts(target);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AddonResolver Load: {ex}\");\r\n            }\r\n            return catalogs;\r\n        }\r\n\r\n        // Select an addon version that is equal to or lower than the current EarTrumpet version.\r\n        // New addons are implicitly compatible.\r\n        // If no lower-or-equal version is found, the addon is incompatible and won't be loaded.\r\n        private DirectoryCatalog SelectAddon(string path)\r\n        {\r\n            try\r\n            {\r\n                Trace.WriteLine($\"AddonResolver SelectAddon: {path}\");\r\n                var versions = Directory.GetDirectories(path).Select(f => Path.GetFileName(f)).Select(f => Version.Parse(f)).OrderBy(v => v);\r\n                foreach (var version in versions.Reverse())\r\n                {\r\n                    if (version <= App.PackageVersion)\r\n                    {\r\n                        var cat = new DirectoryCatalog(Path.Combine(path, version.ToString()), \"EarTrumpet*.dll\");\r\n                        _addonDirectoryPaths.Add(cat.Path);\r\n                        return cat;\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AddonResolver SelectAddon: {ex}\");\r\n            }\r\n            Trace.WriteLine($\"AddonResolver SelectAddon: Return without selection: {path}\");\r\n            return null;\r\n        }\r\n\r\n\r\n#if DEBUG\r\n        // Discover addons in the form of AddonName\\AddonName.dll.\r\n        private DirectoryCatalog SelectDevAddon(string path)\r\n        {\r\n            try\r\n            {\r\n                Trace.WriteLine($\"AddonResolver SelectDevAddon: Discovering from {path}\");\r\n                var cat = new DirectoryCatalog(path, $\"{new DirectoryInfo(path).Name}.dll\");\r\n                if (cat.LoadedFiles.Count == 0)\r\n                {\r\n                    Trace.WriteLine(\"AddonResolver SelectDevAddon: ## WARNING ##: No files found in addon package\");\r\n                }\r\n                else\r\n                {\r\n                    foreach (var file in cat.LoadedFiles)\r\n                    {\r\n                        Trace.WriteLine($\"AddonResolver SelectDevAddon Loading: {file}\");\r\n                    }\r\n                }\r\n                _addonDirectoryPaths.Add(cat.Path);\r\n                return cat;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"AddonResolver SelectDevAddon: {ex}\");\r\n            }\r\n            Trace.WriteLine($\"AddonResolver SelectDevAddon: Return without selection: {path}\");\r\n            return null;\r\n        }\r\n#endif\r\n\r\n        private Assembly OnFinalAssemblyResolve(object sender, ResolveEventArgs args)\r\n        {\r\n            foreach (var path in _addonDirectoryPaths)\r\n            {\r\n                string assemblyPath = Path.Combine(path, new AssemblyName(args.Name).Name + \".dll\");\r\n                if (File.Exists(assemblyPath))\r\n                {\r\n                    return Assembly.LoadFrom(assemblyPath);\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/IEarTrumpetAddonAppContent.cs",
    "content": "﻿using System;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Extensibility\r\n{\r\n    public interface IEarTrumpetAddonAppContent\r\n    {\r\n        object GetContentForApp(string deviceId, string appId, Action requestClose);\r\n        IEnumerable<ContextMenuItem> GetContextMenuItemsForApp(string deviceId, string appId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/IEarTrumpetAddonDeviceContent.cs",
    "content": "﻿using System;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Extensibility\r\n{\r\n    public interface IEarTrumpetAddonDeviceContent\r\n    {\r\n        object GetContentForDevice(string deviceId, Action requestClose);\r\n        IEnumerable<ContextMenuItem> GetContextMenuItemsForDevice(string deviceId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/IEarTrumpetAddonEvents.cs",
    "content": "﻿namespace EarTrumpet.Extensibility\r\n{\r\n    public enum AddonEventKind\r\n    {\r\n        InitializeAddon,\r\n        AddonsInitialized,\r\n        AppShuttingDown,\r\n    }\r\n\r\n    public interface IEarTrumpetAddonEvents\r\n    {\r\n        void OnAddonEvent(AddonEventKind evt);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensibility/IEarTrumpetAddonNotificationAreaContextMenu.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Extensibility\r\n{\r\n    public interface IEarTrumpetAddonNotificationAreaContextMenu\r\n    {\r\n        IEnumerable<ContextMenuItem> NotificationAreaContextMenuItems { get; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensibility/IEarTrumpetAddonSettingsPage.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\n\r\nnamespace EarTrumpet.Extensibility\r\n{\r\n    public interface IEarTrumpetAddonSettingsPage\r\n    {\r\n        SettingsCategoryViewModel GetSettingsCategory();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/Shared/PlaybackDataModelHost.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Extensibility.Shared\r\n{\r\n    public class PlaybackDataModelHost\r\n    {\r\n        public static PlaybackDataModelHost Current { get; } = new PlaybackDataModelHost();\r\n\r\n        public IAudioDeviceManager DeviceManager = WindowsAudioFactory.Create(AudioDeviceKind.Playback);\r\n\r\n        public event Action<IAudioDeviceSession, string> AppPropertyChanged;\r\n        public event Action<IAudioDeviceSession> AppAdded;\r\n        public event Action<IAudioDeviceSession> AppRemoved;\r\n        public event Action<IAudioDevice, string> DevicePropertyChanged;\r\n        public event Action<IAudioDevice> DeviceAdded;\r\n        public event Action<IAudioDevice> DeviceRemoved;\r\n\r\n        private PlaybackDataModelHost()\r\n        {\r\n            DeviceManager.Devices.CollectionChanged += Devices_CollectionChanged;\r\n\r\n            foreach (var d in DeviceManager.Devices)\r\n            {\r\n                ListenToDevice(d);\r\n            }\r\n        }\r\n\r\n        private void Devices_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Add:\r\n                    ListenToDevice((IAudioDevice)e.NewItems[0]);\r\n                    break;\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:\r\n                    FreeDevice((IAudioDevice)e.OldItems[0]);\r\n                    break;\r\n                default: throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private void ListenToDevice(IAudioDevice device)\r\n        {\r\n            device.PropertyChanged += Device_PropertyChanged;\r\n            device.Groups.CollectionChanged += Groups_CollectionChanged;\r\n\r\n            foreach (var app in device.Groups)\r\n            {\r\n                ListenToApp(app);\r\n            }\r\n\r\n            DeviceAdded?.Invoke(device);\r\n        }\r\n\r\n        private void ListenToApp(IAudioDeviceSession app)\r\n        {\r\n            app.PropertyChanged += App_PropertyChanged;\r\n            AppAdded?.Invoke(app);\r\n        }\r\n\r\n        private void App_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            AppPropertyChanged?.Invoke((IAudioDeviceSession)sender, e.PropertyName);\r\n        }\r\n\r\n        private void Groups_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Add:\r\n                    ListenToApp((IAudioDeviceSession)e.NewItems[0]);\r\n                    break;\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:\r\n                    FreeApp((IAudioDeviceSession)e.OldItems[0]);\r\n                    break;\r\n                default: throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private void FreeApp(IAudioDeviceSession app)\r\n        {\r\n            app.PropertyChanged -= App_PropertyChanged;\r\n            AppRemoved?.Invoke(app);\r\n        }\r\n\r\n        private void Device_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            DevicePropertyChanged?.Invoke((IAudioDevice)sender, e.PropertyName);\r\n        }\r\n\r\n        private void FreeDevice(IAudioDevice device)\r\n        {\r\n            device.PropertyChanged -= Device_PropertyChanged;\r\n            device.Groups.CollectionChanged -= Groups_CollectionChanged;\r\n            DeviceRemoved?.Invoke(device);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensibility/Shared/ResourceLoader.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.Extensibility.Shared\r\n{\r\n    public class ResourceLoader\r\n    {\r\n        static List<string> _namespaces = new List<string>();\r\n\r\n        public static void Load(string addonNamespace, bool isInternal)\r\n        {\r\n            if (!_namespaces.Contains(addonNamespace))\r\n            {\r\n                _namespaces.Add(addonNamespace);\r\n\r\n                if (isInternal)\r\n                {\r\n                    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary\r\n                    {\r\n                        Source = new Uri($\"/EarTrumpet;component/Addons/{addonNamespace}/AddonResources.xaml\", UriKind.RelativeOrAbsolute)\r\n                    });\r\n                }\r\n                else\r\n                {\r\n                    Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary\r\n                    {\r\n                        Source = new Uri($\"/{addonNamespace};component/AddonResources.xaml\", UriKind.RelativeOrAbsolute)\r\n                    });\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensibility/Shared/ServiceBus.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Extensibility.Shared\r\n{\r\n    public static class ServiceBus\r\n    {\r\n        static Dictionary<string, object> _services = new Dictionary<string, object>();\r\n\r\n        public static void RegisterMany(string name, object service)\r\n        {\r\n            if (_services.ContainsKey(name))\r\n            {\r\n                ((List<object>)_services[name]).Add(service);\r\n                return;\r\n            }\r\n\r\n            _services[name] = new List<object>(new object[] { service });\r\n        }\r\n\r\n        public static List<object> GetMany(string name)\r\n        {\r\n            _services.TryGetValue(name, out var ret);\r\n            if (ret == null)\r\n            {\r\n                ret = new List<object>();\r\n            }\r\n            return (List<object>)ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/CollectionExtensions.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class CollectionExtensions\r\n    {\r\n        public static void AddSorted<T>(this ObservableCollection<T> collection, T item, IComparer<T> comparer)\r\n        {\r\n            var i = 0;\r\n            while ((i < collection.Count) && (comparer.Compare(collection[i], item) < 0))\r\n            {\r\n                i++;\r\n            }\r\n\r\n            collection.Insert(i, item);\r\n        }\r\n\r\n        public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)\r\n        {\r\n            foreach (var item in items)\r\n            {\r\n                collection.Add(item);\r\n            }\r\n        }\r\n\r\n        public static void InsertRange<T>(this ObservableCollection<T> collection, int startIndex, IEnumerable<T> items)\r\n        {\r\n            foreach (var item in items.Reverse())\r\n            {\r\n                collection.Insert(startIndex, item);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/ColorExtensions.cs",
    "content": "﻿using System.Windows.Media;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class ColorExtensions\r\n    {\r\n        public static Color ToABGRColor(this uint abgrValue)\r\n        {\r\n            var colorBytes = new byte[4];\r\n            colorBytes[0] = (byte)((0xFF000000 & abgrValue) >> 24);     // A\r\n            colorBytes[1] = (byte)((0x00FF0000 & abgrValue) >> 16);     // B\r\n            colorBytes[2] = (byte)((0x0000FF00 & abgrValue) >> 8);      // G\r\n            colorBytes[3] = (byte)(0x000000FF & abgrValue);             // R\r\n\r\n            return Color.FromArgb(colorBytes[0], colorBytes[3], colorBytes[2], colorBytes[1]);\r\n        }\r\n\r\n        public static uint ToABGR(this Color abgrValue)\r\n        {\r\n            return (uint)(\r\n                abgrValue.A << 24 |\r\n                abgrValue.B << 16 |\r\n                abgrValue.G << 8 |\r\n                abgrValue.R);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/DependencyObjectExtensions.cs",
    "content": "﻿using System.Windows;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class DependencyObjectExtensions\r\n    {\r\n        public static T FindVisualParent<T>(this DependencyObject obj) where T : DependencyObject\r\n        {\r\n            var parentObject = GetParentObject(obj);\r\n            if (parentObject == null)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            return (parentObject is T) ? (T)parentObject : FindVisualParent<T>(parentObject);\r\n        }\r\n\r\n        public static DependencyObject GetParentObject(this DependencyObject child)\r\n        {\r\n            if (child == null)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var contentElement = child as ContentElement;\r\n            if (contentElement != null)\r\n            {\r\n                var parent = ContentOperations.GetParent(contentElement);\r\n                if (parent != null)\r\n                {\r\n                    return parent;\r\n                }\r\n\r\n                var frameworkContentElement = contentElement as FrameworkContentElement;\r\n                return frameworkContentElement != null ? frameworkContentElement.Parent : null;\r\n            }\r\n\r\n            var frameworkElement = child as FrameworkElement;\r\n            if (frameworkElement != null)\r\n            {\r\n                var parent = frameworkElement.Parent;\r\n                if (parent != null)\r\n                {\r\n                    return parent;\r\n                }\r\n            }\r\n            return VisualTreeHelper.GetParent(child);\r\n        }\r\n\r\n        public static childItem FindVisualChild<childItem>(this DependencyObject obj) where childItem : DependencyObject\r\n        {\r\n            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)\r\n            {\r\n                var child = VisualTreeHelper.GetChild(obj, i);\r\n                if (child != null && child is childItem)\r\n                {\r\n                    return (childItem)child;\r\n                }\r\n                else\r\n                {\r\n                    var childOfChild = FindVisualChild<childItem>(child);\r\n                    if (childOfChild != null)\r\n                    {\r\n                        return childOfChild;\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/EarTrumpetAddonExtensions.cs",
    "content": "﻿using EarTrumpet.Actions;\r\nusing EarTrumpet.Extensibility;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class EarTrumpetAddonExtensions\r\n    {\r\n        public static bool IsInternal(this EarTrumpetAddon addon)\r\n        {\r\n            return addon is EarTrumpetActionsAddon;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/EventBinding/EventBindingExtension.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Windows;\r\nusing System.Windows.Markup;\r\n\r\nnamespace EarTrumpet.Extensions.EventBinding\r\n{\r\n    // {Event:Binding Some.Object.FunctionName}\r\n    public class BindingExtension : MarkupExtension\r\n    {\r\n        public string Path { get; set; }\r\n\r\n        public BindingExtension() { }\r\n        public BindingExtension(string path) { Path = path; }\r\n\r\n        public override object ProvideValue(IServiceProvider serviceProvider)\r\n        {\r\n            var provideValueTarget = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;\r\n            if (provideValueTarget != null)\r\n            {\r\n                Type delegateType = null;\r\n                if ((provideValueTarget.TargetProperty as EventInfo) != null)\r\n                {\r\n                    delegateType = (provideValueTarget.TargetProperty as EventInfo).EventHandlerType;\r\n                }\r\n                else\r\n                {\r\n                    delegateType = (provideValueTarget.TargetProperty as MethodInfo).GetParameters()[1].ParameterType;\r\n                }\r\n\r\n                return Delegate.CreateDelegate(delegateType,\r\n                    this,\r\n                    GetType().GetMethod(nameof(OnEvent), BindingFlags.NonPublic | BindingFlags.Instance));\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected virtual void OnEvent(object sender, object args)\r\n        {\r\n            var target = ResolvePropertyPath((sender as FrameworkElement).DataContext, Path, out string functionName);\r\n            target.GetType().GetMethod(functionName).Invoke(target, new object[] { sender, args });\r\n        }\r\n\r\n        private object ResolvePropertyPath(object target, string path, out string functionName)\r\n        {\r\n            var parts = path.Split('.');\r\n            functionName = parts.Last();\r\n            foreach (var segment in parts.Take(parts.Length - 1))\r\n            {\r\n                target = target.GetType().GetProperty(segment).GetValue(target);\r\n            }\r\n            return target;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensions/EventBinding/HandledEventBindingExtension.cs",
    "content": "﻿namespace EarTrumpet.Extensions.EventBinding\r\n{\r\n    // {Event:HandledBinding}\r\n    public class HandledBindingExtension : BindingExtension\r\n    {\r\n        protected override void OnEvent(object sender, object args)\r\n        {\r\n            args.GetType().GetProperty(\"Handled\").SetValue(args, true);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Extensions/ExceptionExtensions.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class ExceptionExtensions\r\n    {\r\n        public static bool Is(this Exception ex, HRESULT type)\r\n        {\r\n            switch(type)\r\n            {\r\n                case HRESULT.AUDCLNT_E_DEVICE_INVALIDATED:\r\n                case HRESULT.AUDCLNT_S_NO_SINGLE_PROCESS:\r\n                case HRESULT.ERROR_NOT_FOUND:\r\n                    return (uint)(ex as COMException)?.HResult == (uint)type;\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/FloatExtensions.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class FloatExtensions\r\n    {\r\n        private const float CURVE_FACTOR = 5.757f;\r\n\r\n        public static int ToVolumeInt(this float val)\r\n        {\r\n            return Convert.ToInt32(Math.Round(val * 100, MidpointRounding.AwayFromZero));\r\n        }\r\n\r\n        public static float Bound(this float val, float min, float max)\r\n        {\r\n            return Math.Max(min, Math.Min(max, val));\r\n        }\r\n\r\n        public static float ToLogVolume(this float val)\r\n        {\r\n            return ((float)(Math.Exp(CURVE_FACTOR * val) / Math.Exp(CURVE_FACTOR))).Bound(0, 1f);\r\n        }\r\n\r\n        public static float ToDisplayVolume(this float val)\r\n        {\r\n            return ((float)(Math.Log(val * Math.Exp(CURVE_FACTOR)) / CURVE_FACTOR)).Bound(0, 1f);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/FrameworkElementExtensions.cs",
    "content": "﻿using System;\r\nusing System.Windows;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class FrameworkElementExtensions\r\n    {\r\n        public static void WaitForKeyboardVisuals(this FrameworkElement element, Action completed)\r\n        {\r\n            // ApplicationIdle is necessary as KeyboardNavigation/ScheduleCleanup will use ContextIdle to purge the focus visuals.\r\n            // See: https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Input/KeyboardNavigation.cs,3707\r\n            element.Dispatcher.BeginInvoke(completed, DispatcherPriority.ApplicationIdle, null);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/IEnumerableExtensions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class IEnumerableExtensions\r\n    {\r\n        public static HashSet<T> ToSet<T>(this IEnumerable<T> collection)\r\n        {\r\n            var ret = new HashSet<T>();\r\n            foreach (var element in collection)\r\n            {\r\n                ret.Add(element);\r\n            }\r\n            return ret;\r\n        }\r\n\r\n        public static void ForEachNoThrow<T>(this IEnumerable<T> list, Action<T> action)\r\n        {\r\n            foreach (var item in list)\r\n            {\r\n                try\r\n                {\r\n                    action(item);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine($\"ForEachNoThrow: {ex}\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/IPropertyStoreExtensions.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class IPropertyStoreExtensions\r\n    {\r\n        public static T GetValue<T>(this IPropertyStore propStore, PROPERTYKEY key)\r\n        {\r\n            PropVariant pv = default(PropVariant);\r\n            try\r\n            {\r\n                pv = propStore.GetValue(ref key);\r\n                switch (pv.varType)\r\n                {\r\n                    case VarEnum.VT_LPWSTR:\r\n                        return (T)Convert.ChangeType(Marshal.PtrToStringUni(pv.pwszVal), typeof(T));\r\n                    case VarEnum.VT_EMPTY:\r\n                        return default;\r\n                    default: throw new NotImplementedException();\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                Ole32.PropVariantClear(ref pv);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/IconExtensions.cs",
    "content": "﻿using System.Drawing;\r\nusing System.Reflection;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class IconExtensions\r\n    {\r\n        public static Icon AsDisposableIcon(this Icon icon)\r\n        {\r\n            // System.Drawing.Icon does not expose a method to declare\r\n            // ownership of its wrapped handle so we have to use reflection\r\n            // here.\r\n\r\n            // See also: https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Icon.cs,71\r\n\r\n            icon.GetType().GetField(\"ownHandle\", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(icon, true);\r\n            return icon;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/ListExtensions.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class ListExtensions\r\n    {\r\n        public static void Remove<T>(this List<T> list, Func<T,bool> shouldRemove)\r\n        {\r\n            var toRemove = new List<T>();\r\n            foreach(var entry in list)\r\n            {\r\n                if (shouldRemove(entry))\r\n                {\r\n                    toRemove.Add(entry);\r\n                }\r\n            }\r\n\r\n            foreach(var entry in toRemove)\r\n            {\r\n                list.Remove(entry);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/OperatingSystemExtensions.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public enum OSVersions : int\r\n    {\r\n        RS3 = 16299,\r\n        RS4 = 17134,\r\n        RS5_1809 = 17763,\r\n        Version19H1 = 18362,\r\n        Version21H2 = 21390,\r\n        Windows11 = 22000,\r\n    }\r\n\r\n    public static class OperatingSystemExtensions\r\n    {\r\n        public static bool IsAtLeast(this OperatingSystem os, OSVersions version)\r\n        {\r\n            return os.Version.Build >= (int)version;\r\n        }\r\n\r\n        public static bool IsGreaterThan(this OperatingSystem os, OSVersions version)\r\n        {\r\n            return os.Version.Build > (int)version;\r\n        }\r\n\r\n        public static bool IsLessThan(this OperatingSystem os, OSVersions version)\r\n        {\r\n            return os.Version.Build < (int)version;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/RegistryKeyExtensions.cs",
    "content": "﻿using Microsoft.Win32;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class RegistryKeyExtensions\r\n    {\r\n        public static T GetValue<T>(this RegistryKey self, string valueName, T defaultValue)\r\n        {\r\n            // Manually apply defaultValue if the data type is mismatched.\r\n            var value = self.GetValue(valueName, defaultValue);\r\n            if (value is T)\r\n            {\r\n                return (T)value;\r\n            }\r\n            else\r\n            {\r\n                return defaultValue;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/VisualExtensions.cs",
    "content": "﻿using System.Windows;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class VisualExtensions\r\n    {\r\n        private static Matrix CalculateDpi(this Visual visual)\r\n        {\r\n            var source = PresentationSource.FromVisual(visual);\r\n            return source == null ? new Matrix() { M11 = 1, M22 = 1 } : source.CompositionTarget.TransformToDevice;\r\n        }\r\n\r\n        public static double DpiY(this Visual visual) => CalculateDpi(visual).M22;\r\n        public static double DpiX(this Visual visual) => CalculateDpi(visual).M11;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Extensions/WindowExtensions.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\nusing System.Windows.Interop;\r\n\r\nnamespace EarTrumpet.Extensions\r\n{\r\n    public static class WindowExtensions\r\n    {\r\n        public static void SetWindowPos(this Window window, double top, double left, double height, double width)\r\n        {\r\n            User32.SetWindowPos(window.GetHandle(), IntPtr.Zero, (int)left, (int)top, (int)width, (int)height, User32.WindowPosFlags.SWP_NOZORDER | User32.WindowPosFlags.SWP_NOACTIVATE);\r\n        }\r\n\r\n        public static void RaiseWindow(this Window window)\r\n        {\r\n            window.Topmost = true;\r\n            window.Activate();\r\n            window.Topmost = false;\r\n        }\r\n\r\n        public static void Cloak(this Window window, bool hide = true)\r\n        {\r\n            int attributeValue = hide ? 1 : 0;\r\n            DwmApi.DwmSetWindowAttribute(window.GetHandle(), DwmApi.DWMA_CLOAK, ref attributeValue, Marshal.SizeOf(attributeValue));\r\n        }\r\n\r\n        public static void EnableRoundedCornersIfApplicable(this Window window)\r\n        {\r\n            if (Environment.OSVersion.IsAtLeast(OSVersions.Windows11))\r\n            {\r\n                int attributeValue = (int)DwmApi.DWM_WINDOW_CORNER_PREFERENCE.DWMWCP_ROUND;\r\n                DwmApi.DwmSetWindowAttribute(window.GetHandle(), DwmApi.DWMWA_WINDOW_CORNER_PREFERENCE, ref attributeValue, Marshal.SizeOf(attributeValue));\r\n            }\r\n        }\r\n\r\n        public static void RemoveWindowStyle(this Window window, int styleToRemove)\r\n        {\r\n            var currentStyle = User32.GetWindowLong(window.GetHandle(), User32.GWL.GWL_STYLE);\r\n            if (currentStyle == 0)\r\n            {\r\n                Trace.WriteLine($\"WindowExtensions RemoveWindowStyle Failed: ({Marshal.GetLastWin32Error()})\");\r\n                return;\r\n            }\r\n\r\n            User32.SetWindowLong(window.GetHandle(), User32.GWL.GWL_STYLE, (currentStyle & ~styleToRemove));\r\n        }\r\n\r\n        public static void ApplyExtendedWindowStyle(this Window window, int newExStyle)\r\n        {\r\n            var currentExStyle = User32.GetWindowLong(window.GetHandle(), User32.GWL.GWL_EXSTYLE);\r\n            if (currentExStyle == 0)\r\n            {\r\n                Trace.WriteLine($\"WindowExtensions ApplyExtendedWindowStyle Failed: ({Marshal.GetLastWin32Error()})\");\r\n                return;\r\n            }\r\n\r\n            var oldExStyle = User32.SetWindowLong(window.GetHandle(), User32.GWL.GWL_EXSTYLE, currentExStyle | newExStyle);\r\n            if (oldExStyle != currentExStyle)\r\n            {\r\n                Trace.WriteLine($\"WindowExtensions ApplyExtendedWindowStyle Unexpected: ({oldExStyle} vs. {currentExStyle})\");\r\n                return;\r\n            }\r\n        }\r\n\r\n        public static IntPtr GetHandle(this Window window)\r\n        {\r\n            return new WindowInteropHelper(window).Handle;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Features.cs",
    "content": "﻿namespace EarTrumpet\r\n{\r\n    public class Features\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/AppBarData.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    struct APPBARDATA\r\n    {\r\n        public uint cbSize;\r\n        public IntPtr hWnd;\r\n        public uint uCallbackMessage;\r\n        public AppBarEdge uEdge;\r\n        public RECT rect;\r\n        public int lParam;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/AppBarEdge.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    internal enum AppBarEdge : uint\r\n    {\r\n        Left = 0,\r\n        Top = 1,\r\n        Right = 2,\r\n        Bottom = 3\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/AppBarMessage.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    internal enum AppBarMessage : uint\r\n    {\r\n        // ...\r\n        GetState = 0x00000004,\r\n        GetTaskbarPos = 0x00000005\r\n        // ...\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/ApplicationResolver.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [ComImport]\r\n    [Guid(\"660B90C8-73A9-4B58-8CAE-355B7F55341B\")]\r\n    class ApplicationResolver { }\r\n\r\n    [ComImport]\r\n    [Guid(\"DE25675A-72DE-44b4-9373-05170450C140\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IApplicationResolver\r\n    {\r\n        void _();\r\n        void __();\r\n        void ___();\r\n        void GetAppIDForProcess(uint processId, [MarshalAs(UnmanagedType.LPWStr)] out string appId, out IntPtr _, out IntPtr __, out IntPtr ____);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/CLSCTX.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    enum CLSCTX : int\r\n    {\r\n        CLSCTX_INPROC_SERVER = 0x1,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Combase.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    static class Combase\r\n    {\r\n        [DllImport(\"combase.dll\", PreserveSig = false)]\r\n        public static extern void RoGetActivationFactory(\r\n            [MarshalAs(UnmanagedType.HString)] string activatableClassId,\r\n            [In] ref Guid iid,\r\n            [Out, MarshalAs(UnmanagedType.IInspectable)] out Object factory);\r\n\r\n        [DllImport(\"combase.dll\", PreserveSig = false)]\r\n        public static extern void WindowsCreateString(\r\n            [MarshalAs(UnmanagedType.LPWStr)] string src,\r\n            [In] uint length,\r\n            [Out] out IntPtr hstring);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/DwmApi.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class DwmApi\r\n    {\r\n        internal const int DWMA_CLOAK = 13;\r\n        internal const int DWMWA_WINDOW_CORNER_PREFERENCE = 33;\r\n\r\n        internal enum DWM_WINDOW_CORNER_PREFERENCE\r\n        {\r\n            DWMWCP_DEFAULT = 0,\r\n            DWMWCP_DONOTROUND = 1,\r\n            DWMWCP_ROUND = 2,\r\n            DWMWCP_ROUNDSMALL = 3\r\n        }\r\n\r\n        [DllImport(\"dwmapi.dll\", PreserveSig = false)]\r\n        internal static extern void DwmSetWindowAttribute(\r\n            IntPtr hwnd,\r\n            int attr,\r\n            ref int attrValue,\r\n            int attrSize);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/FolderIds.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    static class FolderIds\r\n    {\r\n        public static Guid AppsFolder = Guid.Parse(\"{1E87508D-89C2-42F0-8A7E-645A0F50CA58}\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/GPS.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    enum GPS\r\n    {\r\n        // If no flags are specified (GPS_DEFAULT), a read-only property store is returned that includes properties for the file or item.\r\n        // In the case that the shell item is a file, the property store contains:\r\n        //     1. properties about the file from the file system\r\n        //     2. properties from the file itself provided by the file's property handler, unless that file is offline,\r\n        //         see GPS_OPENSLOWITEM\r\n        //     3. if requested by the file's property handler and supported by the file system, properties stored in the\r\n        //     alternate property store.\r\n        //\r\n        // Non-file shell items should return a similar read-only store\r\n        //\r\n        // Specifying other GPS_ flags modifies the store that is returned\r\n        DEFAULT = 0x00000000,\r\n        HANDLERPROPERTIESONLY = 0x00000001,   // only include properties directly from the file's property handler\r\n        READWRITE = 0x00000002,   // Writable stores will only include handler properties\r\n        TEMPORARY = 0x00000004,   // A read/write store that only holds properties for the lifetime of the IShellItem object\r\n        FASTPROPERTIESONLY = 0x00000008,   // do not include any properties from the file's property handler (because the file's property handler will hit the disk)\r\n        OPENSLOWITEM = 0x00000010,   // include properties from a file's property handler, even if it means retrieving the file from offline storage.\r\n        DELAYCREATION = 0x00000020,   // delay the creation of the file's property handler until those properties are read, written, or enumerated\r\n        BESTEFFORT = 0x00000040,   // For readonly stores, succeed and return all available properties, even if one or more sources of properties fails. Not valid with GPS_READWRITE.\r\n        NO_OPLOCK = 0x00000080,   // some data sources protect the read property store with an oplock, this disables that\r\n        MASK_VALID = 0x000000FF,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Gdi32.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Gdi32\r\n    {\r\n        [DllImport(\"gdi32.dll\", PreserveSig = true)]\r\n        internal static extern bool DeleteObject(IntPtr objectHandle);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/HRESULT.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    public enum HRESULT : uint\r\n    {\r\n        S_OK = 0x0,\r\n        S_FALSE = 0x1,\r\n        AUDCLNT_E_DEVICE_INVALIDATED = 0x88890004,\r\n        AUDCLNT_S_NO_SINGLE_PROCESS = 0x889000d,\r\n        ERROR_NOT_FOUND = 0x80070490,\r\n        ERROR_INSUFFICIENT_BUFFER = 0x7a\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/AccentPolicyLibrary.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Interop;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public static class AccentPolicyLibrary\r\n    {\r\n        public static bool AccentPolicySupportsTintColor => Environment.OSVersion.IsAtLeast(OSVersions.RS4);\r\n\r\n        private static void SetAccentPolicy(IntPtr handle, User32.AccentPolicy policy)\r\n        {\r\n            var accentStructSize = Marshal.SizeOf(policy);\r\n            var accentPtr = Marshal.AllocHGlobal(accentStructSize);\r\n            Marshal.StructureToPtr(policy, accentPtr, false);\r\n\r\n            var data = new User32.WindowCompositionAttribData();\r\n            data.Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY;\r\n            data.SizeOfData = accentStructSize;\r\n            data.Data = accentPtr;\r\n\r\n            var ret = User32.SetWindowCompositionAttribute(handle, ref data);\r\n            Debug.Assert(ret == 0 || ret == 1);\r\n\r\n            Marshal.FreeHGlobal(accentPtr);\r\n        }\r\n\r\n        public static void EnableAcrylic(Visual target, Color color, User32.AccentFlags flags)\r\n        {\r\n            SetAccentPolicy(HandleFromVisual(target),\r\n                new User32.AccentPolicy\r\n                {\r\n                    AccentFlags = flags,\r\n                    AccentState = AccentPolicySupportsTintColor ? User32.AccentState.ACCENT_ENABLE_ACRYLICBLURBEHIND : User32.AccentState.ACCENT_ENABLE_BLURBEHIND,\r\n                    GradientColor = color.ToABGR(),\r\n                });\r\n        }\r\n\r\n        public static void DisableAcrylic(Visual target)\r\n        {\r\n            SetAccentPolicy(HandleFromVisual(target),\r\n                new User32.AccentPolicy\r\n                {\r\n                    AccentState = User32.AccentState.ACCENT_DISABLED,\r\n                });\r\n        }\r\n\r\n        private static IntPtr HandleFromVisual(Visual visual)\r\n        {\r\n            Visual targetVisual = visual;\r\n\r\n            // We don't want the parent window showing a popup\r\n            if (visual is Popup popup && popup.Child != null)\r\n            {\r\n                targetVisual = popup;\r\n            }\r\n\r\n            return PresentationSource.FromVisual(targetVisual) is HwndSource source ? source.Handle : IntPtr.Zero;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/AudioPolicyConfigFactory.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class AudioPolicyConfigFactory\r\n    {\r\n        public static IAudioPolicyConfigFactory Create()\r\n        {\r\n            if (Environment.OSVersion.IsAtLeast(OSVersions.Version21H2))\r\n            {\r\n                return new AudioPolicyConfigFactoryImplFor21H2();\r\n            }\r\n            else\r\n            {\r\n                return new AudioPolicyConfigFactoryImplForDownlevel();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/AudioPolicyConfigFactoryImplFor21H2.cs",
    "content": "﻿using EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class AudioPolicyConfigFactoryImplFor21H2 : IAudioPolicyConfigFactory\r\n    {\r\n        private readonly IAudioPolicyConfigFactoryVariantFor21H2 _factory;\r\n\r\n        internal AudioPolicyConfigFactoryImplFor21H2()\r\n        {\r\n            var iid = typeof(IAudioPolicyConfigFactoryVariantFor21H2).GUID;\r\n            Combase.RoGetActivationFactory(\"Windows.Media.Internal.AudioPolicyConfig\", ref iid, out object factory);\r\n            _factory = (IAudioPolicyConfigFactoryVariantFor21H2)factory;\r\n        }\r\n\r\n        public HRESULT ClearAllPersistedApplicationDefaultEndpoints()\r\n        {\r\n            return _factory.ClearAllPersistedApplicationDefaultEndpoints();\r\n        }\r\n\r\n        public HRESULT GetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, out string deviceId)\r\n        {\r\n            return _factory.GetPersistedDefaultAudioEndpoint(processId, flow, role, out deviceId);\r\n        }\r\n\r\n        public HRESULT SetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, IntPtr deviceId)\r\n        {\r\n            return _factory.SetPersistedDefaultAudioEndpoint(processId, flow, role, deviceId);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/AudioPolicyConfigFactoryImplForDownlevel.cs",
    "content": "﻿using EarTrumpet.Interop.MMDeviceAPI;\r\nusing System;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class AudioPolicyConfigFactoryImplForDownlevel : IAudioPolicyConfigFactory\r\n    {\r\n        private readonly IAudioPolicyConfigFactoryVariantForDownlevel _factory;\r\n\r\n        internal AudioPolicyConfigFactoryImplForDownlevel()\r\n        {\r\n            var iid = typeof(IAudioPolicyConfigFactoryVariantForDownlevel).GUID;\r\n            Combase.RoGetActivationFactory(\"Windows.Media.Internal.AudioPolicyConfig\", ref iid, out object factory);\r\n            _factory = (IAudioPolicyConfigFactoryVariantForDownlevel)factory;\r\n        }\r\n\r\n        public HRESULT ClearAllPersistedApplicationDefaultEndpoints()\r\n        {\r\n            return _factory.ClearAllPersistedApplicationDefaultEndpoints();\r\n        }\r\n\r\n        public HRESULT GetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, out string deviceId)\r\n        {\r\n            return _factory.GetPersistedDefaultAudioEndpoint(processId, flow, role, out deviceId);\r\n        }\r\n\r\n        public HRESULT SetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, IntPtr deviceId)\r\n        {\r\n            return _factory.SetPersistedDefaultAudioEndpoint(processId, flow, role, deviceId);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/HotkeyData.cs",
    "content": "﻿using System;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class HotkeyData\r\n    {\r\n        [Flags]\r\n        public enum ModifierKeys : uint\r\n        {\r\n            None = 0,\r\n            Alt = 1,\r\n            Control = 2,\r\n            Shift = 4,\r\n            Win = 8\r\n        }\r\n\r\n        public Keys Modifiers { get; set; }\r\n        public Keys Key { get; set; }\r\n\r\n        public HotkeyData(Message msg)\r\n        {\r\n            Key = (Keys)(((int)msg.LParam >> 16) & 0xFFFF);\r\n            Modifiers = ModifiersToKeys((ModifierKeys)((int)msg.LParam & 0xFFFF));\r\n        }\r\n\r\n        public HotkeyData() { }\r\n\r\n        public override string ToString()\r\n        {\r\n            var converter = new KeysConverter();\r\n\r\n            // Discussion about why this looks odd can be found at\r\n            // https://github.com/File-New-Project/EarTrumpet/pull/1133\r\n\r\n            string none = converter.ConvertToString(Keys.None);\r\n            string modifierKeys = converter.ConvertToString(Modifiers).Replace($\"+{none}\", String.Empty);\r\n            string key = converter.ConvertToString(Key);\r\n\r\n            if (Key == Keys.None && Modifiers == Keys.None)\r\n            {\r\n                return \"\";\r\n            }\r\n            else if (Key == Keys.None)\r\n            {\r\n                return modifierKeys;\r\n            }\r\n            else if (Modifiers == Keys.None)\r\n            {\r\n                return key;\r\n            }\r\n            else\r\n            {\r\n                return $\"{modifierKeys}+{key}\";\r\n            }\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            var other = (HotkeyData)obj;\r\n            return other.Key == Key && other.Modifiers == Modifiers;\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return ToString().GetHashCode();\r\n        }\r\n\r\n        public bool IsEmpty => Key == Keys.None && Modifiers == Keys.None;\r\n\r\n\r\n        private static Keys ModifiersToKeys(ModifierKeys modifiers)\r\n        {\r\n            Keys ret = Keys.None;\r\n            if ((modifiers & ModifierKeys.Control) == ModifierKeys.Control)\r\n            {\r\n                ret |= Keys.Control;\r\n            }\r\n            if ((modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)\r\n            {\r\n                ret |= Keys.Alt;\r\n            }\r\n            if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)\r\n            {\r\n                ret |= Keys.Shift;\r\n            }\r\n            if ((modifiers & ModifierKeys.Win) == ModifierKeys.Win)\r\n            {\r\n                ret |= Keys.LWin;\r\n            }\r\n            return ret;\r\n        }\r\n\r\n        public uint GetInteropModifiers()\r\n        {\r\n            return (uint)KeysToModifiers(Modifiers);\r\n        }\r\n\r\n        private static ModifierKeys KeysToModifiers(Keys modifiers)\r\n        {\r\n            ModifierKeys ret = ModifierKeys.None;\r\n            if ((modifiers & Keys.Control) == Keys.Control)\r\n            {\r\n                ret |= ModifierKeys.Control;\r\n            }\r\n            if ((modifiers & Keys.Alt) == Keys.Alt)\r\n            {\r\n                ret |= ModifierKeys.Alt;\r\n            }\r\n            if ((modifiers & Keys.Shift) == Keys.Shift)\r\n            {\r\n                ret |= ModifierKeys.Shift;\r\n            }\r\n            if ((modifiers & Keys.LWin) == Keys.LWin)\r\n            {\r\n                ret |= ModifierKeys.Win;\r\n            }\r\n            if ((modifiers & Keys.RWin) == Keys.RWin)\r\n            {\r\n                ret |= ModifierKeys.Win;\r\n            }\r\n            return ret;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/HotkeyManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class HotkeyManager\r\n    {\r\n        private class Entry\r\n        {\r\n            public HotkeyData Hotkey;\r\n            public int RefCount;\r\n            public int Id;\r\n        }\r\n\r\n        public static HotkeyManager Current { get; } = new HotkeyManager();\r\n\r\n        public event Action<HotkeyData> KeyPressed;\r\n\r\n        private readonly Dictionary<HotkeyData, Entry> _data;\r\n        private readonly Win32Window _window;\r\n        private int _lastId;\r\n\r\n        public HotkeyManager()\r\n        {\r\n            _data = new Dictionary<HotkeyData, Entry>();\r\n            _window = new Win32Window();\r\n            _window.Initialize(WndProc);\r\n        }\r\n\r\n        private void WndProc(Message msg)\r\n        {\r\n            if (msg.Msg == User32.WM_HOTKEY)\r\n            {\r\n                var hotkey = new HotkeyData(msg);\r\n                Trace.WriteLine($\"HotkeyManager: KeyPressed: {hotkey}\");\r\n                KeyPressed?.Invoke(hotkey);\r\n            }\r\n        }\r\n\r\n        public void Register(HotkeyData hotkey)\r\n        {\r\n            if (hotkey.IsEmpty)\r\n            {\r\n                return;\r\n            }\r\n\r\n            Entry entry;\r\n            if (_data.ContainsKey(hotkey))\r\n            {\r\n                entry = _data[hotkey];\r\n            }\r\n            else\r\n            {\r\n                entry = _data[hotkey] = new Entry { Id = ++_lastId, Hotkey = hotkey };\r\n                User32.RegisterHotKey(_window.Handle, entry.Id, hotkey.GetInteropModifiers(), (uint)hotkey.Key);\r\n            }\r\n\r\n            entry.RefCount++;\r\n\r\n            Trace.WriteLine($\"HotkeyManager: Register: {hotkey}\");\r\n        }\r\n\r\n        public void Unregister(HotkeyData hotkey)\r\n        {\r\n            if (hotkey.IsEmpty) return;\r\n\r\n            var entry = _data[hotkey];\r\n            entry.RefCount--;\r\n\r\n            Trace.WriteLine($\"HotkeyManager: Unregister: {hotkey} {entry.RefCount}\");\r\n            if (entry.RefCount == 0)\r\n            {\r\n                User32.UnregisterHotKey(_window.Handle, entry.Id);\r\n                _data.Remove(hotkey);\r\n            }\r\n\r\n        }\r\n\r\n        public void Pause()\r\n        {\r\n            Trace.WriteLine($\"HotkeyManager: Pause\");\r\n            foreach (var entry in _data.Values)\r\n            {\r\n                User32.UnregisterHotKey(_window.Handle, entry.Id);\r\n            }\r\n        }\r\n\r\n        public void Resume()\r\n        {\r\n            Trace.WriteLine($\"HotkeyManager: Resume\");\r\n            foreach (var entry in _data.Values)\r\n            {\r\n                User32.RegisterHotKey(_window.Handle, entry.Id, entry.Hotkey.GetInteropModifiers(), (uint)entry.Hotkey.Key);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/IconHelper.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Drawing;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class IconHelper\r\n    {\r\n        public static Icon LoadIconForTaskbar(string path, uint dpi)\r\n        {\r\n            Icon icon = null;\r\n            if (path.StartsWith(\"pack://\"))\r\n            {\r\n                using (var stream = System.Windows.Application.GetResourceStream(new Uri(path)).Stream)\r\n                {\r\n                    icon = new Icon(stream, new Size(\r\n                        User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CXICON, dpi),\r\n                        User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CYICON, dpi)));\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var iconPath = new StringBuilder(path);\r\n                int iconIndex = Shlwapi.PathParseIconLocationW(iconPath);\r\n                icon = LoadIconResource(iconPath.ToString(), iconIndex,\r\n                    User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CXSMICON, dpi),\r\n                    User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CYSMICON, dpi));\r\n            }\r\n            Trace.WriteLine($\"IconHelper LoadIconForTaskbar {path} {icon?.Width}x{icon?.Height}\");\r\n            return icon;\r\n        }\r\n\r\n        public static Icon LoadIconResource(string path, int iconOrdinal, int cx, int cy)\r\n        {\r\n            using (var hModule = Kernel32.LoadLibraryEx(path, IntPtr.Zero, Kernel32.LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE | Kernel32.LoadLibraryFlags.LOAD_LIBRARY_AS_IMAGE_RESOURCE))\r\n            {\r\n                var groupResInfo = Kernel32.FindResourceW(hModule, new IntPtr(iconOrdinal), Kernel32.RT_GROUP_ICON);\r\n                var groupResData = Kernel32.LockResource(Kernel32.LoadResource(hModule, groupResInfo));\r\n                var iconId = User32.LookupIconIdFromDirectoryEx(groupResData, true, cx, cy, User32.LoadImageFlags.LR_DEFAULTCOLOR);\r\n\r\n                var iconResInfo = Kernel32.FindResourceW(hModule, new IntPtr(iconId), Kernel32.RT_ICON);\r\n                var iconResData = Kernel32.LockResource(Kernel32.LoadResource(hModule, iconResInfo));\r\n                var iconResSize = Kernel32.SizeofResource(hModule, iconResInfo);\r\n                var iconHandle = User32.CreateIconFromResourceEx(iconResData, iconResSize, true, User32.IconCursorVersion.Default, cx, cy, User32.LoadImageFlags.LR_DEFAULTCOLOR);\r\n                return Icon.FromHandle(iconHandle).AsDisposableIcon();\r\n            }\r\n        }\r\n\r\n        public static Icon ColorIcon(Icon originalIcon, double fillPercent, System.Windows.Media.Color newColor)\r\n        {\r\n            using (var bitmap = originalIcon.ToBitmap())\r\n            {\r\n                for (int y = 0; y < bitmap.Height; y++)\r\n                {\r\n                    for (int x = 0; x < bitmap.Width * fillPercent; x++)\r\n                    {\r\n                        var pixel = bitmap.GetPixel(x, y);\r\n\r\n                        if (pixel.R > 220)\r\n                        {\r\n                            bitmap.SetPixel(x, y, Color.FromArgb(pixel.A, newColor.R, newColor.G, newColor.B));\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return Icon.FromHandle(bitmap.GetHicon()).AsDisposableIcon();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/ImmersiveSystemColors.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class ImmersiveSystemColors\r\n    {\r\n        public static Color Lookup(string name)\r\n        {\r\n            TryLookup(name, out var ret);\r\n            return ret;\r\n        }\r\n\r\n        public static bool TryLookup(string name, out Color color)\r\n        {\r\n            color = default(Color);\r\n\r\n            var colorSet = Uxtheme.GetImmersiveUserColorSetPreference(false, false);\r\n            var colorType = Uxtheme.GetImmersiveColorTypeFromName(name);\r\n            var rawColor = Uxtheme.GetImmersiveColorFromColorSetEx(colorSet, colorType, false, 0);\r\n\r\n            color = rawColor.ToABGRColor();\r\n            return (rawColor != 4294902015);\r\n        }\r\n\r\n        public static IDictionary<string, Color> GetList()\r\n        {\r\n            var colors = new Dictionary<string, Color>();\r\n            var colorSet = Uxtheme.GetImmersiveUserColorSetPreference(false, false);\r\n\r\n            for (uint i = 0; ; i++)\r\n            {\r\n                var ptr = Uxtheme.GetImmersiveColorNamedTypeByIndex(i);\r\n                if (ptr == IntPtr.Zero)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                var name = Marshal.PtrToStringUni(Marshal.ReadIntPtr(ptr));\r\n                TryLookup($\"Immersive{name}\", out var color);\r\n                colors.Add(name, color);\r\n            }\r\n            return colors;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/InputHelper.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class InputHelper\r\n    {\r\n        public static void RegisterForMouseInput(IntPtr handle)\r\n        {\r\n            var data = new User32.RAWINPUTDEVICE\r\n            {\r\n                usUsagePage = User32.HidUsagePage.GENERIC,\r\n                usUsage = User32.HidUsage.Mouse,\r\n                dwFlags = User32.RIDEV_INPUTSINK,\r\n                hwndTarget = handle\r\n            };\r\n\r\n            if (!RegisterRawInputDevices(data))\r\n            {\r\n                Trace.WriteLine($\"InputHelper UnregisterForMouseInput: {Marshal.GetLastWin32Error()}\");\r\n            }\r\n        }\r\n\r\n        public static void UnregisterForMouseInput()\r\n        {\r\n            var data = new User32.RAWINPUTDEVICE\r\n            {\r\n                usUsagePage = User32.HidUsagePage.GENERIC,\r\n                usUsage = User32.HidUsage.Mouse,\r\n                dwFlags = User32.RIDEV_REMOVE\r\n            };\r\n\r\n            if (!RegisterRawInputDevices(data))\r\n            {\r\n                Trace.WriteLine($\"InputHelper UnregisterForMouseInput: {Marshal.GetLastWin32Error()}\");\r\n            }\r\n        }\r\n\r\n        private static bool RegisterRawInputDevices(User32.RAWINPUTDEVICE data)\r\n        {\r\n            var devicePtr = Marshal.AllocHGlobal(Marshal.SizeOf(data));\r\n            Marshal.StructureToPtr(data, devicePtr, false);\r\n            bool ret = User32.RegisterRawInputDevices(devicePtr, 1, (uint)Marshal.SizeOf(data));\r\n            Marshal.FreeHGlobal(devicePtr);\r\n            return ret;\r\n        }\r\n\r\n        public static bool ProcessMouseInputMessage(IntPtr lParam, ref System.Drawing.Point cursorPosition, out int wheelDelta)\r\n        {\r\n            wheelDelta = 0;\r\n            bool isApplicableMouseMessage = false;\r\n\r\n            var header = new User32.RAWINPUTHEADER();\r\n            var headerSize = (uint)Marshal.SizeOf(header);\r\n\r\n            uint bufferSize = 0;\r\n            uint res = User32.GetRawInputData(lParam, User32.RID_INPUT, IntPtr.Zero, ref bufferSize, headerSize);\r\n            if (res == 0)\r\n            {\r\n                var dataPtr = Marshal.AllocHGlobal((int)bufferSize);\r\n                uint writtenBytes = User32.GetRawInputData(lParam, User32.RID_INPUT, dataPtr, ref bufferSize, headerSize);\r\n                if (writtenBytes == bufferSize)\r\n                {\r\n                    var rawInput = Marshal.PtrToStructure<User32.RAWINPUT>(dataPtr);\r\n                    if (rawInput.header.dwType == User32.RIM_TYPEMOUSE)\r\n                    {\r\n                        isApplicableMouseMessage = true;\r\n\r\n                        if (rawInput.mouse.usFlags.HasFlag(User32.RAWMOUSE_FLAGS.MOUSE_MOVE_ABSOLUTE))\r\n                        {\r\n                            int width, height;\r\n                            if (rawInput.mouse.usFlags.HasFlag(User32.RAWMOUSE_FLAGS.MOUSE_VIRTUAL_DESKTOP))\r\n                            {\r\n                                width = User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CXVIRTUALSCREEN, WindowsTaskbar.Dpi);\r\n                                height = User32.GetSystemMetricsForDpi(User32.SystemMetrics.SM_CYVIRTUALSCREEN, WindowsTaskbar.Dpi);\r\n                            }\r\n                            else\r\n                            {\r\n                                width = Screen.PrimaryScreen.Bounds.Width;\r\n                                height = Screen.PrimaryScreen.Bounds.Height;\r\n                            }\r\n\r\n                            cursorPosition.X = rawInput.mouse.lLastX / 65535 * width;\r\n                            cursorPosition.Y = rawInput.mouse.lLastY / 65535 * height;\r\n                        }\r\n                        else\r\n                        {\r\n                            cursorPosition.X += rawInput.mouse.lLastX;\r\n                            cursorPosition.Y += rawInput.mouse.lLastY;\r\n                        }\r\n\r\n                        if ((rawInput.mouse.usButtonFlags & User32.RI_MOUSE_WHEEL) == User32.RI_MOUSE_WHEEL)\r\n                        {\r\n                            wheelDelta = rawInput.mouse.usButtonData;\r\n                        }\r\n                    }\r\n                }\r\n                Marshal.FreeHGlobal(dataPtr);\r\n            }\r\n            return isApplicableMouseMessage;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/Kernel32Helper.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class Kernel32Helper\r\n    {\r\n        public static bool IsPackagedProcess(int processId)\r\n        {\r\n            var processHandle = Kernel32.OpenProcess(Kernel32.ProcessFlags.PROCESS_QUERY_LIMITED_INFORMATION, false, processId);\r\n            if (processHandle == IntPtr.Zero)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            var isPackagedProcess = false;\r\n            try\r\n            {\r\n                var bufferSize = 0;\r\n                if (Kernel32.GetPackageId(processHandle, ref bufferSize, IntPtr.Zero) == HRESULT.ERROR_INSUFFICIENT_BUFFER)\r\n                {\r\n                    var packageIdPtr = Marshal.AllocHGlobal(bufferSize);\r\n                    if(Kernel32.GetPackageId(processHandle, ref bufferSize, packageIdPtr) == HRESULT.S_OK)\r\n                    {\r\n                        var packageId = Marshal.PtrToStructure<Kernel32.PACKAGE_ID>(packageIdPtr);\r\n                        isPackagedProcess = packageId.publisher.Length > 0;\r\n                    }\r\n                    Marshal.FreeHGlobal(packageIdPtr);\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                Kernel32.CloseHandle(processHandle);\r\n            }\r\n            return isPackagedProcess;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/LegacyControlPanelHelper.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class LegacyControlPanelHelper\r\n    {\r\n        public static void Open(string panel)\r\n        {\r\n            try\r\n            {\r\n                var rundllPath = Path.Combine(\r\n                    Environment.GetEnvironmentVariable(\"SystemRoot\"),\r\n                    (Environment.Is64BitOperatingSystem ? @\"sysnative\\rundll32.exe\" : @\"system32\\rundll32.exe\"));\r\n\r\n                using (Process.Start(rundllPath, $\"shell32.dll,Control_RunDLL mmsys.cpl,,{panel}\"))\r\n                { }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"LegacyControlPanelHelper Open Failed: {ex}\");\r\n            }\r\n        }\r\n\r\n        public static void StartLegacyAudioMixer()\r\n        {\r\n            try\r\n            {\r\n                var pos = System.Windows.Forms.Cursor.Position;\r\n                using (Process.Start(\"sndvol.exe\", $\"-a {User32.MAKEWPARAM((ushort)pos.X, (ushort)pos.Y)}\"))\r\n                { }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"LegacyControlPanelHelper StartLegacyAudioMixer Failed: {ex}\");\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/MouseHook.cs",
    "content": "using System;\r\nusing System.Windows.Forms;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class MouseHook\r\n    {\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct POINT\r\n        {\r\n            public int x;\r\n            public int y;\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct MouseLLHookStruct\r\n        {\r\n            public POINT pt;\r\n            public int mouseData;\r\n            public int flags;\r\n            public int time;\r\n            public int dwExtraInfo;\r\n        }\r\n\r\n        public delegate int MouseWheelHandler(object sender, MouseEventArgs e);\r\n        public event MouseWheelHandler MouseWheelEvent;\r\n\r\n        private const int WM_MOUSEWHEEL = 0x020A;\r\n        private const int WH_MOUSE_LL = 14;\r\n        private User32.HookProc _hProc;\r\n        private int _hHook;\r\n        private bool _hookIsSet = false;\r\n\r\n        public void SetHook()\r\n        {\r\n            if (!_hookIsSet)\r\n            {\r\n                _hProc = new User32.HookProc(MouseHookProc);\r\n                _hHook = User32.SetWindowsHookEx(WH_MOUSE_LL, _hProc, IntPtr.Zero, 0);\r\n                _hookIsSet = true;\r\n            }\r\n        }\r\n\r\n        public void UnHook()\r\n        {\r\n            if (_hookIsSet)\r\n            {\r\n                User32.UnhookWindowsHookEx(_hHook);\r\n                _hookIsSet = false;\r\n            }\r\n        }\r\n\r\n        private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)\r\n        {\r\n            if (nCode < 0 || MouseWheelEvent == null || (Int32)wParam != WM_MOUSEWHEEL)\r\n            {\r\n                return User32.CallNextHookEx(_hHook, nCode, wParam, lParam);\r\n            }\r\n            MouseLLHookStruct MyMouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct));\r\n            int result = MouseWheelEvent(this, new MouseEventArgs(MouseButtons.None, 0, MyMouseHookStruct.pt.x, MyMouseHookStruct.pt.y, MyMouseHookStruct.mouseData >> 16));\r\n            if (result == 0)\r\n            {\r\n                return User32.CallNextHookEx(_hHook, nCode, wParam, lParam);\r\n            }\r\n            return result;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/PackageHelper.cs",
    "content": "﻿using System;\r\nusing Windows.ApplicationModel;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class PackageHelper\r\n    {\r\n        public static Version GetVersion(bool isPackaged)\r\n        {\r\n            if (isPackaged)\r\n            {\r\n                var packageVer = Package.Current.Id.Version;\r\n                return new Version(packageVer.Major, packageVer.Minor, packageVer.Build, packageVer.Revision);\r\n            }\r\n            else\r\n            {\r\n                return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;\r\n            }\r\n        }\r\n\r\n        public static string GetFamilyName(bool isPackaged)\r\n        {\r\n            return isPackaged ? Package.Current.Id.FamilyName : null;\r\n        }\r\n\r\n        public static bool CheckHasIdentity()\r\n        {\r\n#if VSDEBUG\r\n            if (System.Diagnostics.Debugger.IsAttached)\r\n            {\r\n                return false;\r\n            }\r\n#endif\r\n\r\n            try\r\n            {\r\n                return Package.Current.Id != null;\r\n            }\r\n            catch (InvalidOperationException ex)\r\n            {\r\n                System.Diagnostics.Trace.WriteLine($\"AppExtensions HasIdentity Failed: {ex.Message}\");\r\n\r\n                // We do not expect this to occur in production when the app is packaged.\r\n                // Async so that the HasIdentity bit is properly set.\r\n#if !DEBUG\r\n                System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() => Diagnosis.ErrorReporter.LogWarning(ex)));\r\n#endif\r\n                return false;\r\n            }\r\n        }\r\n\r\n        public static bool HasDevIdentity()\r\n        {\r\n#if VSDEBUG\r\n            return true;\r\n#else\r\n            bool result = false;\r\n            try\r\n            {\r\n                result = Package.Current.DisplayName.EndsWith(\"(dev)\");\r\n            }\r\n            catch\r\n            {\r\n            }\r\n            return result;\r\n#endif\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/ProcessHelper.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class ProcessHelper\r\n    {\r\n        public  static void StartNoThrow(string fileName)\r\n        {\r\n            try\r\n            {\r\n                Trace.WriteLine($\"ProcessHelper StartNoThrow {fileName}\");\r\n                using (Process.Start(fileName))\r\n                {\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"ProcessHelper StartNoThrow Failed: {ex}\");\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/SettingsPageHelper.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class SettingsPageHelper\r\n    {\r\n        public static void Open(string page)\r\n        {\r\n            try\r\n            {\r\n                using (Process.Start(new ProcessStartInfo { UseShellExecute = true, FileName = $\"ms-settings:{page}\" }))\r\n                { }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"SettingsPageHelper Open Failed: {ex}\");\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/SingleInstanceAppMutex.cs",
    "content": "﻿using System.Diagnostics;\r\nusing System.Reflection;\r\nusing System.Threading;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class SingleInstanceAppMutex \r\n    {\r\n        private static Mutex s_mutex;\r\n\r\n        public static bool TakeExclusivity()\r\n        {\r\n            var assembly = Assembly.GetExecutingAssembly();\r\n            var mutexName = $\"Local\\\\{assembly.GetName().Name}-0e510f7b-aed2-40b0-ad72-d2d3fdc89a02\";\r\n\r\n            s_mutex = new Mutex(true, mutexName, out bool mutexCreated);\r\n            if (!mutexCreated)\r\n            {\r\n                Trace.WriteLine(\"SingleInstanceAppMutex TakeExclusivity: false\");\r\n                s_mutex = null;\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        public static void ReleaseExclusivity()\r\n        {\r\n            s_mutex?.ReleaseMutex();\r\n            s_mutex?.Close();\r\n            s_mutex = null;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/Win32Window.cs",
    "content": "﻿using System;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public class Win32Window : NativeWindow, IDisposable\r\n    {\r\n        Action<Message> _wndProc;\r\n\r\n        public void Initialize(Action<Message> wndProc)\r\n        {\r\n            _wndProc = wndProc;\r\n            CreateHandle(new CreateParams());\r\n        }\r\n\r\n        protected override void WndProc(ref Message m)\r\n        {\r\n            _wndProc(m);\r\n            base.WndProc(ref m);\r\n        }\r\n\r\n        public void Dispose()\r\n        {\r\n            DestroyHandle();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/WindowSizeHelper.cs",
    "content": "﻿using System;\r\nusing System.Windows;\r\nusing System.Windows.Interop;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    class WindowSizeHelper\r\n    {\r\n        public static void RestrictMaximizedSizeToWorkArea(Window window)\r\n        {\r\n            var hwnd = ((HwndSource)PresentationSource.FromVisual(window)).Handle;\r\n            var workArea = System.Windows.Forms.Screen.FromHandle(hwnd).WorkingArea;\r\n            User32.SetWindowPos(\r\n                hwnd,\r\n                IntPtr.Zero,\r\n                workArea.Left,\r\n                workArea.Top,\r\n                workArea.Width,\r\n                workArea.Height,\r\n                User32.WindowPosFlags.SWP_NOZORDER | User32.WindowPosFlags.SWP_NOACTIVATE);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Helpers/WindowsTaskbar.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.Interop.Helpers\r\n{\r\n    public sealed class WindowsTaskbar\r\n    {\r\n        public struct State\r\n        {\r\n            public Position Location;\r\n            public RECT Size;\r\n            public Screen ContainingScreen;\r\n            public bool IsAutoHideEnabled;\r\n\r\n            public bool IsHorizontal\r\n            {\r\n                get { return Location == Position.Bottom || Location == Position.Top; }\r\n            }\r\n        }\r\n\r\n        // Must match AppBarEdge enum\r\n        public enum Position\r\n        {\r\n            Left = 0,\r\n            Top = 1,\r\n            Right = 2,\r\n            Bottom = 3\r\n        }\r\n\r\n        public static uint Dpi => User32.GetDpiForWindow(GetHwnd());\r\n\r\n        public static State Current\r\n        {\r\n            get\r\n            {\r\n                var hWnd = GetHwnd();\r\n                var state = new State\r\n                {\r\n                    ContainingScreen = Screen.FromHandle(hWnd),\r\n                };\r\n                var appBarData = new APPBARDATA\r\n                {\r\n                    cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA)),\r\n                    hWnd = hWnd\r\n                };\r\n\r\n                // SHAppBarMessage: Understands Taskbar auto-hide\r\n                // state (the window is positioned across screens).\r\n                if (Shell32.SHAppBarMessage(AppBarMessage.GetTaskbarPos, ref appBarData) != UIntPtr.Zero)\r\n                {\r\n                    state.Size = appBarData.rect;\r\n                    state.Location = (Position)appBarData.uEdge;\r\n                }\r\n                else\r\n                {\r\n                    User32.GetWindowRect(hWnd, out state.Size);\r\n\r\n                    if (state.ContainingScreen != null)\r\n                    {\r\n                        var screen = state.ContainingScreen;\r\n                        if (state.Size.Bottom == screen.Bounds.Bottom && state.Size.Top == screen.Bounds.Top)\r\n                        {\r\n                            state.Location = (state.Size.Left == screen.Bounds.Left) ? Position.Left : Position.Right;\r\n                        }\r\n                        if (state.Size.Right == screen.Bounds.Right && state.Size.Left == screen.Bounds.Left)\r\n                        {\r\n                            state.Location = (state.Size.Top == screen.Bounds.Top) ? Position.Top : Position.Bottom;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                var appBarState = (Shell32.AppBarState)Shell32.SHAppBarMessage(AppBarMessage.GetState, ref appBarData);\r\n                state.IsAutoHideEnabled = appBarState.HasFlag(Shell32.AppBarState.ABS_AUTOHIDE);\r\n\r\n                Trace.WriteLine($\"WindowsTaskbar Current: Location={state.Location}, AutoHide={state.IsAutoHideEnabled}, Taskbar={hWnd}, Size={state.Size}, Monitor={state.ContainingScreen}\");\r\n                return state;\r\n            }\r\n        }\r\n\r\n        public static IntPtr GetHwnd() => User32.FindWindow(\"Shell_TrayWnd\", null);\r\n\r\n        public static IntPtr GetTrayToolbarWindowHwnd()\r\n        {\r\n            IntPtr hWnd = GetHwnd();\r\n            if (hWnd != IntPtr.Zero)\r\n            {\r\n                hWnd = User32.FindWindowEx(hWnd, IntPtr.Zero, \"TrayNotifyWnd\", IntPtr.Zero);\r\n                if (hWnd != IntPtr.Zero)\r\n                {\r\n                    hWnd = User32.FindWindowEx(hWnd, IntPtr.Zero, \"SysPager\", IntPtr.Zero);\r\n                    if (hWnd != IntPtr.Zero)\r\n                    {\r\n                        hWnd = User32.FindWindowEx(hWnd, IntPtr.Zero, \"ToolbarWindow32\", IntPtr.Zero);\r\n                    }\r\n                }\r\n            }\r\n            return hWnd;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/IPropertyStore.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct PROPERTYKEY\r\n    {\r\n        public Guid fmtid;\r\n        public UIntPtr pid;\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (obj == null)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            var pkey = ((PROPERTYKEY)obj);\r\n            return pkey.fmtid == fmtid && pkey.pid == pid;\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return fmtid.GetHashCode() + pid.GetHashCode();\r\n        }\r\n    }\r\n\r\n    [ComImport]\r\n    [Guid(\"886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IPropertyStore\r\n    {\r\n        [PreserveSig]\r\n        int GetCount([Out] out uint cProps);\r\n        [PreserveSig]\r\n        int GetAt([In] uint iProp, out PROPERTYKEY pkey);\r\n        PropVariant GetValue([In] ref PROPERTYKEY key);\r\n        [PreserveSig]\r\n        int SetValue([In] ref PROPERTYKEY key, [In] ref PropVariant pv);\r\n        [PreserveSig]\r\n        int Commit();\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/IShellItem.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [Guid(\"43826D1E-E718-42EE-BC55-A1E261C37BFE\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IShellItem\r\n    {\r\n        void BindToHandler([In, MarshalAs(UnmanagedType.Interface)] IntPtr pbc, [In] ref Guid bhid, [In] ref Guid riid, out IntPtr ppv);\r\n        void GetParent([MarshalAs(UnmanagedType.Interface)] out IShellItem ppsi);\r\n        void GetDisplayName([In] SIGDN sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName);\r\n        void GetAttributes([In] uint sfgaoMask, out uint psfgaoAttribs);\r\n        void Compare([In, MarshalAs(UnmanagedType.Interface)] IShellItem psi, [In] uint hint, out int piOrder);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/IShellItem2.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.InteropServices.ComTypes;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [Guid(\"7E9FB0D3-919F-4307-AB2E-9B1860310C93\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IShellItem2 : IShellItem\r\n    {\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        object BindToHandler(IBindCtx pbc, [In] ref Guid bhid, [In] ref Guid riid);\r\n        IShellItem GetParent();\r\n        [return: MarshalAs(UnmanagedType.LPWStr)]\r\n        string GetDisplayName(SIGDN sigdnName);\r\n        SFGAO GetAttributes(SFGAO sfgaoMask);\r\n        int Compare(IShellItem psi, SICHINT hint);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        object GetPropertyStore(\r\n            GPS flags,\r\n            [In] ref Guid riid);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        object GetPropertyStoreWithCreateObject(\r\n            GPS flags,\r\n            [MarshalAs(UnmanagedType.IUnknown)] object punkCreateObject,   // factory for low-rights creation of type ICreateObject\r\n            [In] ref Guid riid);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        object GetPropertyStoreForKeys(\r\n            IntPtr rgKeys,\r\n            uint cKeys,\r\n            GPS flags,\r\n            [In] ref Guid riid);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        object GetPropertyDescriptionList(\r\n            IntPtr keyType,\r\n            [In] ref Guid riid);\r\n        void Update(IBindCtx pbc);\r\n        void GetProperty(ref PROPERTYKEY key, [In, Out] PropVariant pv);\r\n        Guid GetCLSID(ref PROPERTYKEY key);\r\n        System.Runtime.InteropServices.ComTypes.FILETIME GetFileTime(ref PROPERTYKEY key);\r\n        int GetInt32(ref PROPERTYKEY key);\r\n        [return: MarshalAs(UnmanagedType.LPWStr)]\r\n        string GetString(ref PROPERTYKEY key);\r\n        uint GetUInt32(ref PROPERTYKEY key);\r\n        ulong GetUInt64(ref PROPERTYKEY key);\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        bool GetBool(ref PROPERTYKEY key);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/IShellItemImageFactory.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    enum SIIGBF : int\r\n    {\r\n        SIIGBF_RESIZETOFIT = 0,\r\n        SIIGBF_BIGGERSIZEOK = 0x1,\r\n        SIIGBF_MEMORYONLY = 0x2,\r\n        SIIGBF_ICONONLY = 0x4,\r\n        SIIGBF_THUMBNAILONLY = 0x8,\r\n        SIIGBF_INCACHEONLY = 0x10,\r\n        SIIGBF_CROPTOSQUARE = 0x20,\r\n        SIIGBF_WIDETHUMBNAILS = 0x40,\r\n        SIIGBF_ICONBACKGROUND = 0x80,\r\n        SIIGBF_SCALEUP = 0x100,\r\n    }\r\n\r\n    [Guid(\"bcc18b79-ba16-442f-80c4-8a59c30c463b\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IShellItemImageFactory\r\n    {\r\n        void GetImage(SIZE size, SIIGBF flags, out IntPtr hBitmap);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Kernel32.cs",
    "content": "﻿using EarTrumpet.Interop.SafeHandles;\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Kernel32\r\n    {\r\n        internal const int SIZEOF_WCHAR = 2;\r\n        internal const int PACKAGE_INFORMATION_BASIC = 0x00000000;\r\n        internal const int PACKAGE_FILTER_HEAD = 0x00000010;\r\n        internal const int MAX_AUMID_LEN = 512;\r\n        internal const int PACKAGE_FAMILY_NAME_MAX_LENGTH_INCL_Z = 65 * SIZEOF_WCHAR;\r\n\r\n        internal const int PACKAGE_RELATIVE_APPLICATION_ID_MAX_LENGTH_INCL_Z = 65 * SIZEOF_WCHAR;\r\n\r\n        [Flags]\r\n        internal enum ProcessFlags : uint\r\n        {\r\n            PROCESS_QUERY_LIMITED_INFORMATION = 0x1000,\r\n            SYNCHRONIZE = 0x00100000,\r\n        }\r\n\r\n        [Flags]\r\n        internal enum LoadLibraryFlags : int\r\n        {\r\n            LOAD_LIBRARY_AS_DATAFILE = 0x02,\r\n            LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20\r\n        }\r\n\r\n        [Flags]\r\n        internal enum IMAGE_FILE_MACHINE : int\r\n        {\r\n            // ...\r\n            IMAGE_FILE_MACHINE_I386 = 0x014c,\r\n            IMAGE_FILE_MACHINE_AMD64 = 0x8664,\r\n            IMAGE_FILE_MACHINE_ARM64 = 0xAA64\r\n            // ...\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct PACKAGE_ID\r\n        {\r\n            public uint reserved;\r\n            public uint processorArchitecture;\r\n            public ulong packageVersion;\r\n            [MarshalAs(UnmanagedType.LPWStr)] public string name;\r\n            [MarshalAs(UnmanagedType.LPWStr)] public string publisher;\r\n            [MarshalAs(UnmanagedType.LPWStr)] public string resourceId;\r\n            [MarshalAs(UnmanagedType.LPWStr)] public string publisherId;\r\n        }\r\n\r\n        internal const int WAIT_OBJECT_0 = 0x00000000;\r\n        internal const int WAIT_FAILED = unchecked((int)0xFFFFFFFF);\r\n        internal const int WAIT_TIMEOUT = 0x00000102;\r\n        internal const int WAIT_ABANDONED = 0x00000080;\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern HMODULE LoadLibraryEx(\r\n            [MarshalAs(UnmanagedType.LPWStr)] string path,\r\n            IntPtr reserved,\r\n            LoadLibraryFlags flags);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        internal static extern bool FreeLibrary(\r\n            IntPtr moduleHandle);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern IntPtr OpenProcess(\r\n            ProcessFlags dwDesiredAccess,\r\n            bool bInheritHandle,\r\n            int dwProcessId);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern bool CloseHandle(\r\n            IntPtr hObject);\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int GetApplicationUserModelId(\r\n            IntPtr hProcess,\r\n            ref int applicationUserModelIdLength,\r\n            [MarshalAs(UnmanagedType.LPWStr)]StringBuilder applicationUserModelId);\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int ParseApplicationUserModelId(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string applicationUserModelId,\r\n            ref int packageFamilyNameLength,\r\n            StringBuilder packageFamilyName,\r\n            ref int packageRelativeApplicationIdLength,\r\n            StringBuilder packageRelativeApplicationId);\r\n\r\n        [DllImport(\"kernel32.dll\", EntryPoint = \"FindPackagesByPackageFamily\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int FindPackagesByPackageFamilyInitial(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string packageFamilyName,\r\n            int packageFilters,\r\n            ref int count,\r\n            IntPtr packageFullNames,\r\n            ref int bufferLength,\r\n            IntPtr buffer,\r\n            IntPtr packageProperties);\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int FindPackagesByPackageFamily(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string packageFamilyName,\r\n            int packageFilters,\r\n            ref int count,\r\n            IntPtr[] packageFullNames,\r\n            ref int bufferLength,\r\n            IntPtr buffer,\r\n            IntPtr packageProperties);\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int OpenPackageInfoByFullName(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string packageFullName,\r\n            int reserved,\r\n            out IntPtr packageInfoReference);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern int GetPackageApplicationIds(\r\n            IntPtr packageInfoReference,\r\n            ref int bufferLength,\r\n            IntPtr buffer,\r\n            out int count);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern int ClosePackageInfo(\r\n            IntPtr packageInfoReference);\r\n\r\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int QueryFullProcessImageName(\r\n            IntPtr hProcess,\r\n            uint dwFlags,\r\n            [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpExeName,\r\n            ref uint lpdwSize);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern int WaitForMultipleObjects(\r\n            int nCount,\r\n            IntPtr[] lpHandles,\r\n            [MarshalAs(UnmanagedType.Bool)]bool bWaitAll,\r\n            int dwMilliseconds);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        internal static extern int WaitForSingleObject(\r\n            IntPtr lpHandle, \r\n            int dwMilliseconds);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        [return:MarshalAs(UnmanagedType.Bool)]\r\n        internal static extern bool IsWow64Process2(\r\n            IntPtr hProcess,\r\n            out IMAGE_FILE_MACHINE pProcessMachine,\r\n            out IMAGE_FILE_MACHINE pNativeMachine);\r\n\r\n        public static IntPtr RT_ICON = new IntPtr(3);\r\n        public static IntPtr RT_GROUP_ICON = new IntPtr(14);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr FindResourceW(\r\n            HMODULE hModule,\r\n            IntPtr lpName,\r\n            IntPtr lpType);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr LoadResource(\r\n            HMODULE hModule, \r\n            IntPtr hResInfo);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr LockResource(\r\n            IntPtr hResData);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern int SizeofResource(\r\n            HMODULE hModule,\r\n            IntPtr hResInfo);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        public static extern bool GetProcessHandleCount(\r\n            IntPtr hProcess,\r\n            out uint pdwHandleCount);\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr GetCurrentProcess();\r\n\r\n        [DllImport(\"kernel32.dll\", PreserveSig = true)]\r\n        public static extern HRESULT GetPackageId(\r\n            IntPtr hProcess,\r\n            ref int bufferLength,\r\n            IntPtr packageId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/AUDIO_VOLUME_NOTIFICATION_DATA.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    struct AUDIO_VOLUME_NOTIFICATION_DATA\r\n    {\r\n        public Guid guidEventContext;\r\n        public int bMuted;\r\n        public float fMasterVolume;\r\n        public uint nChannels;\r\n        public IntPtr afChannelVolumes;\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/AudioSessionDisconnectReason.cs",
    "content": "﻿namespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    enum AudioSessionDisconnectReason\r\n    {\r\n        DeviceRemoval = 0,\r\n        ServerShutdown = 1,\r\n        FormatChanged = 2,\r\n        SessionLogoff = 3,\r\n        SessionDisconnected = 4,\r\n        ExclusiveModeOverride = 5\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/AudioSessionState.cs",
    "content": "﻿namespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    enum AudioSessionState\r\n    {\r\n        Inactive = 0,\r\n        Active = 1,\r\n        Expired = 2\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/DeviceState.cs",
    "content": "﻿namespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    public enum DeviceState : uint\r\n    {\r\n        ACTIVE = 0x00000001,\r\n        DISABLED = 0x00000002,\r\n        NOTPRESENT = 0x00000004,\r\n        UNPLUGGED = 0x00000008,\r\n        MASK_ALL = 0x0000000f\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/EDataFlow.cs",
    "content": "﻿namespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    public enum EDataFlow\r\n    {\r\n        eRender = 0,\r\n        eCapture = 1,\r\n        eAll = 2,\r\n        EDataFlow_enum_count = 3\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/ERole.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Flags]\r\n    public enum ERole\r\n    {\r\n        eConsole = 0,\r\n        eMultimedia = 1,\r\n        eCommunications = 2,\r\n        ERole_enum_count = 3\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioEndpointVolume.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"5CDF2C82-841E-4546-9722-0CF74078229A\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioEndpointVolume\r\n    {\r\n        void RegisterControlChangeNotify([MarshalAs(UnmanagedType.Interface)] IAudioEndpointVolumeCallback pNotify);\r\n        void UnregisterControlChangeNotify([MarshalAs(UnmanagedType.Interface)] IAudioEndpointVolumeCallback pNotify);\r\n        uint GetChannelCount();\r\n        void SetMasterVolumeLevel(float fLevelDB, ref Guid pguidEventContext);\r\n        void SetMasterVolumeLevelScalar(float fLevel, ref Guid pguidEventContext);\r\n        void GetMasterVolumeLevel(out float pfLevelDB);\r\n        void GetMasterVolumeLevelScalar(out float pfLevel);\r\n        void SetChannelVolumeLevel(uint nChannel, float fLevelDB, ref Guid pguidEventContext);\r\n        void SetChannelVolumeLevelScalar(uint nChannel, float fLevel, ref Guid pguidEventContext);\r\n        void GetChannelVolumeLevel(uint nChannel, out float pfLevelDB);\r\n        float GetChannelVolumeLevelScalar(uint nChannel);\r\n        void SetMute(int bMute, ref Guid pguidEventContext);\r\n        int GetMute();\r\n        void GetVolumeStepInfo(out uint pnStep, out uint pnStepCount);\r\n        void VolumeStepUp(ref Guid pguidEventContext);\r\n        void VolumeStepDown(ref Guid pguidEventContext);\r\n        void QueryHardwareSupport(out uint pdwHardwareSupportMask);\r\n        void GetVolumeRange(out float pflVolumeMindB, out float pflVolumeMaxdB, out float pflVolumeIncrementdB);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioEndpointVolumeCallback.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"657804FA-D6AD-4496-8A60-352752AF4F89\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioEndpointVolumeCallback\r\n    {\r\n        void OnNotify(IntPtr pNotify);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioMeterInformation.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"C02216F6-8C67-4B5B-9D00-D008E73E0064\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioMeterInformation\r\n    {\r\n        float GetPeakValue();\r\n        uint GetMeteringChannelCount();\r\n        [PreserveSig]\r\n        HRESULT GetChannelsPeakValues(uint u32ChannelCount, IntPtr afPeakValues);\r\n        void QueryHardwareSupport(out uint pdwHardwareSupportMask);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioPolicyConfigFactory.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    public interface IAudioPolicyConfigFactory\r\n    {\r\n        HRESULT SetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, IntPtr deviceId);\r\n        HRESULT GetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, out string deviceId);\r\n        HRESULT ClearAllPersistedApplicationDefaultEndpoints();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioPolicyConfigFactoryVariantFor21H2.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"ab3d4648-e242-459f-b02f-541c70306324\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIInspectable)]\r\n    public interface IAudioPolicyConfigFactoryVariantFor21H2\r\n    {\r\n        int __incomplete__add_CtxVolumeChange();\r\n        int __incomplete__remove_CtxVolumeChanged();\r\n        int __incomplete__add_RingerVibrateStateChanged();\r\n        int __incomplete__remove_RingerVibrateStateChange();\r\n        int __incomplete__SetVolumeGroupGainForId();\r\n        int __incomplete__GetVolumeGroupGainForId();\r\n        int __incomplete__GetActiveVolumeGroupForEndpointId();\r\n        int __incomplete__GetVolumeGroupsForEndpoint();\r\n        int __incomplete__GetCurrentVolumeContext();\r\n        int __incomplete__SetVolumeGroupMuteForId();\r\n        int __incomplete__GetVolumeGroupMuteForId();\r\n        int __incomplete__SetRingerVibrateState();\r\n        int __incomplete__GetRingerVibrateState();\r\n        int __incomplete__SetPreferredChatApplication();\r\n        int __incomplete__ResetPreferredChatApplication();\r\n        int __incomplete__GetPreferredChatApplication();\r\n        int __incomplete__GetCurrentChatApplications();\r\n        int __incomplete__add_ChatContextChanged();\r\n        int __incomplete__remove_ChatContextChanged();\r\n        [PreserveSig]\r\n        HRESULT SetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, IntPtr deviceId);\r\n        [PreserveSig]\r\n        HRESULT GetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, [Out, MarshalAs(UnmanagedType.HString)] out string deviceId);\r\n        [PreserveSig]\r\n        HRESULT ClearAllPersistedApplicationDefaultEndpoints();\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioPolicyConfigFactoryVariantForDownlevel.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"2a59116d-6c4f-45e0-a74f-707e3fef9258\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIInspectable)]\r\n    public interface IAudioPolicyConfigFactoryVariantForDownlevel\r\n    {\r\n        int __incomplete__add_CtxVolumeChange();\r\n        int __incomplete__remove_CtxVolumeChanged();\r\n        int __incomplete__add_RingerVibrateStateChanged();\r\n        int __incomplete__remove_RingerVibrateStateChange();\r\n        int __incomplete__SetVolumeGroupGainForId();\r\n        int __incomplete__GetVolumeGroupGainForId();\r\n        int __incomplete__GetActiveVolumeGroupForEndpointId();\r\n        int __incomplete__GetVolumeGroupsForEndpoint();\r\n        int __incomplete__GetCurrentVolumeContext();\r\n        int __incomplete__SetVolumeGroupMuteForId();\r\n        int __incomplete__GetVolumeGroupMuteForId();\r\n        int __incomplete__SetRingerVibrateState();\r\n        int __incomplete__GetRingerVibrateState();\r\n        int __incomplete__SetPreferredChatApplication();\r\n        int __incomplete__ResetPreferredChatApplication();\r\n        int __incomplete__GetPreferredChatApplication();\r\n        int __incomplete__GetCurrentChatApplications();\r\n        int __incomplete__add_ChatContextChanged();\r\n        int __incomplete__remove_ChatContextChanged();\r\n        [PreserveSig]\r\n        HRESULT SetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, IntPtr deviceId);\r\n        [PreserveSig]\r\n        HRESULT GetPersistedDefaultAudioEndpoint(uint processId, EDataFlow flow, ERole role, [Out, MarshalAs(UnmanagedType.HString)] out string deviceId);\r\n        [PreserveSig]\r\n        HRESULT ClearAllPersistedApplicationDefaultEndpoints();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionControl.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"F4B1A599-7266-4319-A8CA-E70ACB11E8CD\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionControl\r\n    {\r\n        AudioSessionState GetState();\r\n        [return: MarshalAs(UnmanagedType.LPWStr)]\r\n        string GetDisplayName();\r\n        void SetDisplayName([MarshalAs(UnmanagedType.LPWStr)]string Value, ref Guid EventContext);\r\n        [return: MarshalAs(UnmanagedType.LPWStr)]\r\n        string GetIconPath();\r\n        void SetIconPath([MarshalAs(UnmanagedType.LPWStr)]string Value, ref Guid EventContext);\r\n        Guid GetGroupingParam();\r\n        void SetGroupingParam(ref Guid Override, ref Guid EventContext);\r\n        void RegisterAudioSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionEvents NewNotifications);\r\n        void UnregisterAudioSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionEvents NewNotifications);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionControl2.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"BFB7FF88-7239-4FC9-8FA2-07C950BE9C6D\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionControl2\r\n    {\r\n        void GetState(out AudioSessionState pRetVal);\r\n        void GetDisplayName([MarshalAs(UnmanagedType.LPWStr)]out string pRetVal);\r\n        void SetDisplayName([MarshalAs(UnmanagedType.LPWStr)]string Value, ref Guid EventContext);\r\n        void GetIconPath([MarshalAs(UnmanagedType.LPWStr)]out string pRetVal);\r\n        void SetIconPath([MarshalAs(UnmanagedType.LPWStr)]string Value, ref Guid EventContext);\r\n        void GetGroupingParam(out Guid pRetVal);\r\n        void SetGroupingParam(ref Guid Override, ref Guid EventContext);\r\n        void RegisterAudioSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionEvents NewNotifications);\r\n        void UnregisterAudioSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionEvents NewNotifications);\r\n        void GetSessionIdentifier([MarshalAs(UnmanagedType.LPWStr)]out string pRetVal);\r\n        void GetSessionInstanceIdentifier([MarshalAs(UnmanagedType.LPWStr)]out string pRetVal);\r\n        [PreserveSig]\r\n        int GetProcessId(out uint processId);\r\n        [PreserveSig]\r\n        HRESULT IsSystemSoundsSession();\r\n        void SetDuckingPreference(int optOut);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionEnumerator.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"E2F5BB11-0570-40CA-ACDD-3AA01277DEE8\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionEnumerator\r\n    {\r\n        int GetCount();\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IAudioSessionControl GetSession(int SessionCount);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionEvents.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"24918ACC-64B3-37C1-8CA9-74A66E9957A8\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionEvents\r\n    {\r\n        void OnDisplayNameChanged([MarshalAs(UnmanagedType.LPWStr)]string NewDisplayName, ref Guid EventContext);\r\n        void OnIconPathChanged([MarshalAs(UnmanagedType.LPWStr)]string NewIconPath, ref Guid EventContext);\r\n        void OnSimpleVolumeChanged(float NewVolume, int NewMute, ref Guid EventContext);\r\n        void OnChannelVolumeChanged(uint ChannelCount, IntPtr afNewChannelVolume, uint ChangedChannel, ref Guid EventContext);\r\n        void OnGroupingParamChanged(ref Guid NewGroupingParam, ref Guid EventContext);\r\n        void OnStateChanged(AudioSessionState NewState);\r\n        void OnSessionDisconnected(AudioSessionDisconnectReason DisconnectReason);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionManager.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"BFA971F1-4D5E-40BB-935E-967039BFBEE4\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionManager\r\n    {\r\n        void GetAudioSessionControl(ref Guid AudioSessionGuid, uint StreamFlags, [MarshalAs(UnmanagedType.Interface)] out IAudioSessionControl SessionControl);\r\n        void GetSimpleAudioVolume(ref Guid AudioSessionGuid, uint StreamFlags, [MarshalAs(UnmanagedType.Interface)]  out ISimpleAudioVolume AudioVolume);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionManager2.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionManager2\r\n    {\r\n        void GetAudioSessionControl(ref Guid AudioSessionGuid, uint StreamFlags, [MarshalAs(UnmanagedType.Interface)] out IAudioSessionControl SessionControl);\r\n        void GetSimpleAudioVolume(ref Guid AudioSessionGuid, uint StreamFlags, [MarshalAs(UnmanagedType.Interface)] out ISimpleAudioVolume AudioVolume);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IAudioSessionEnumerator GetSessionEnumerator();\r\n        void RegisterSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionNotification SessionNotification);\r\n        void UnregisterSessionNotification([MarshalAs(UnmanagedType.Interface)] IAudioSessionNotification SessionNotification);\r\n        void RegisterDuckNotification([MarshalAs(UnmanagedType.LPWStr)]string sessionID, [MarshalAs(UnmanagedType.Interface)] IAudioVolumeDuckNotification duckNotification);\r\n        void UnregisterDuckNotification([MarshalAs(UnmanagedType.Interface)] IAudioVolumeDuckNotification duckNotification);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioSessionNotification.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"641DD20B-4D41-49CC-ABA3-174B9477BB08\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioSessionNotification\r\n    {\r\n        void OnSessionCreated([MarshalAs(UnmanagedType.Interface)] IAudioSessionControl NewSession);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IAudioVolumeDuckNotification.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"C3B284D4-6D39-4359-B3CF-B56DDB3BB39C\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IAudioVolumeDuckNotification\r\n    {\r\n        void OnVolumeDuckNotification([MarshalAs(UnmanagedType.LPWStr)]string sessionID, uint countCommunicationSessions);\r\n        void OnVolumeUnduckNotification([MarshalAs(UnmanagedType.LPWStr)]string sessionID);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IChannelAudioVolume.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"1C158861-B533-4B30-B1CF-E853E51C59B8\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    internal interface IChannelAudioVolume\r\n    {\r\n        uint GetChannelCount();\r\n        [PreserveSig]\r\n        HRESULT SetChannelVolume(uint index, float level, ref Guid eventContent);\r\n        [PreserveSig]\r\n        HRESULT GetChannelVolume(uint Index, out float level);\r\n        [PreserveSig]\r\n        HRESULT SetAllVolumes(uint count, IntPtr afLevels, ref Guid eventContent);\r\n        [PreserveSig]\r\n        HRESULT GetAllVolumes(uint count, IntPtr afLevels);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IDeviceTopology.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    public interface IConnector { }\r\n\r\n    [Guid(\"82149A85-DBA6-4487-86BB-EA8F7FEFCC71\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface ISubunit { }\r\n\r\n    [Guid(\"2A07407E-6497-4A18-9787-32F79BD0D98F\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IDeviceTopology\r\n    {\r\n        uint GetConnectorCount();\r\n        object GetConnector(uint index);\r\n        uint GetSubunitCount();\r\n        ISubunit GetSubunit(uint index);\r\n        object GetPartById(uint id);\r\n        void GetDeviceId([MarshalAs(UnmanagedType.LPWStr)] out string ppwstrDeviceId);\r\n        int GetSignalPath();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IMMDevice.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"D666063F-1587-4E43-81F1-B948E807363F\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IMMDevice\r\n    {\r\n        void Activate(ref Guid iid, uint dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.Interface)] out object ppInterface);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IPropertyStore OpenPropertyStore(STGM stgmAccess);\r\n        [return: MarshalAs(UnmanagedType.LPWStr)]\r\n        string GetId();\r\n        DeviceState GetState();\r\n    }\r\n\r\n    public static class IMMDeviceExtensions\r\n    {\r\n        public static T Activate<T>(this IMMDevice device)\r\n        {\r\n            Guid iid = typeof(T).GUID;\r\n            device.Activate(ref iid, (uint)CLSCTX.CLSCTX_INPROC_SERVER, IntPtr.Zero, out object ret);\r\n            return (T)ret;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IMMDeviceCollection.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"0BD7A1BE-7A1A-44DB-8397-CC5392387B5E\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IMMDeviceCollection\r\n    {\r\n        uint GetCount();\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IMMDevice Item(uint nDevice);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IMMDeviceEnumerator.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"A95664D2-9614-4F35-A746-DE8DB63617E6\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IMMDeviceEnumerator\r\n    {\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IMMDeviceCollection EnumAudioEndpoints(EDataFlow dataFlow, DeviceState dwStateMask);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IMMDevice GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role);\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        IMMDevice GetDevice([MarshalAs(UnmanagedType.LPWStr)]string pwstrId);\r\n        void RegisterEndpointNotificationCallback([MarshalAs(UnmanagedType.Interface)] IMMNotificationClient pClient);\r\n        void UnregisterEndpointNotificationCallback([MarshalAs(UnmanagedType.Interface)] IMMNotificationClient pClient);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IMMEndpoint.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"1BE09788-6894-4089-8586-9A2A6C265AC5\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface IMMEndpoint\r\n    {\r\n        EDataFlow GetDataFlow();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IMMNotificationClient.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"7991EEC9-7E89-4D85-8390-6C703CEC60C0\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IMMNotificationClient\r\n    {\r\n        void OnDeviceStateChanged([MarshalAs(UnmanagedType.LPWStr)]string pwstrDeviceId, DeviceState dwNewState);\r\n        void OnDeviceAdded([MarshalAs(UnmanagedType.LPWStr)]string pwstrDeviceId);\r\n        void OnDeviceRemoved([MarshalAs(UnmanagedType.LPWStr)]string pwstrDeviceId);\r\n        void OnDefaultDeviceChanged(EDataFlow flow, ERole role, [MarshalAs(UnmanagedType.LPWStr)]string pwstrDefaultDeviceId);\r\n        void OnPropertyValueChanged([MarshalAs(UnmanagedType.LPWStr)]string pwstrDeviceId, PROPERTYKEY key);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/IPolicyConfig.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    // W10_TH1: CA286FC3-91FD-42C3-8E9B-CAAFA66242E3\r\n    // W10_TH2: 6BE54BE8-A068-4875-A49D-0C2966473B11\r\n    // Win7-Win8, W10_RS1-Present:\r\n    [Guid(\"F8679F50-850A-41CF-9C72-430F290290C8\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    public interface IPolicyConfigWin7\r\n    {\r\n        void Unused1();\r\n        void Unused2();\r\n        void Unused3();\r\n        void Unused4();\r\n        void Unused5();\r\n        void Unused6();\r\n        void Unused7();\r\n        void Unused8();\r\n        void GetPropertyValue([MarshalAs(UnmanagedType.LPWStr)]string wszDeviceId, ref PROPERTYKEY pkey, ref PropVariant pv);\r\n        void SetPropertyValue([MarshalAs(UnmanagedType.LPWStr)]string wszDeviceId, ref PROPERTYKEY pkey, ref PropVariant pv);\r\n        void SetDefaultEndpoint([MarshalAs(UnmanagedType.LPWStr)]string wszDeviceId, ERole eRole);\r\n        void SetEndpointVisibility([MarshalAs(UnmanagedType.LPWStr)]string wszDeviceId, [MarshalAs(UnmanagedType.I2)]short isVisible);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/ISimpleAudioVolume.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [Guid(\"87CE5498-68D6-44E5-9215-6DA47EF883D8\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    interface ISimpleAudioVolume\r\n    {\r\n        void SetMasterVolume(float fLevel, ref Guid EventContext);\r\n        void GetMasterVolume(out float pfLevel);\r\n        void SetMute(int bMute, ref Guid EventContext);\r\n        int GetMute();\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/MMDeviceEnumerator.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [ComImport]\r\n    [Guid(\"BCDE0395-E52F-467C-8E3D-C4579291692E\")]\r\n    public class MMDeviceEnumerator { }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/MMDeviceAPI/PolicyConfigClient.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop.MMDeviceAPI\r\n{\r\n    [ComImport]\r\n    [Guid(\"870AF99C-171D-4F9E-AF0D-E63DF40C2BC9\")]\r\n    public class PolicyConfigClient { }\r\n\r\n    public class AutoPolicyConfigClientWin7\r\n    {\r\n        IPolicyConfigWin7 _policyClient = (IPolicyConfigWin7)new PolicyConfigClient();\r\n\r\n        public void SetEndpointVisibility(string deviceId, bool isVisible)\r\n        {\r\n            _policyClient.SetEndpointVisibility(deviceId, isVisible ? (short)1 : (short)0);\r\n        }\r\n\r\n        public void SetDefaultEndpoint(string deviceId, ERole role = ERole.eMultimedia)\r\n        {\r\n            _policyClient.SetDefaultEndpoint(deviceId, role);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/NotifyIconData.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    public enum NotifyIconFlags : int\r\n    {\r\n        NIF_MESSAGE = 0x00000001,\r\n        NIF_ICON = 0x00000002,\r\n        NIF_TIP = 0x00000004,\r\n        NIF_STATE = 0x00000008,\r\n        NIF_INFO = 0x00000010,\r\n        NIF_GUID = 0x00000020,\r\n        NIF_SHOWTIP = 0x00000080\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\r\n    public struct NOTIFYICONDATAW\r\n    {\r\n        public int cbSize;\r\n        public IntPtr hWnd;\r\n        public int uID;\r\n        public NotifyIconFlags uFlags;\r\n        public int uCallbackMessage;\r\n        public IntPtr hIcon;\r\n        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]\r\n        public string szTip;\r\n        public int dwState;\r\n        public int dwStateMask;\r\n        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]\r\n        public string szInfo;\r\n        public int uTimeoutOrVersion;\r\n        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]\r\n        public string szInfoTitle;\r\n        public int dwInfoFlags;\r\n        public Guid guidItem;\r\n        public IntPtr hBalloonIcon;\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\r\n    public struct NOTIFYICONIDENTIFIER\r\n    {\r\n        public int cbSize;\r\n        public IntPtr hWnd;\r\n        public int uID;\r\n        public Guid guidItem;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Ntdll.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Ntdll\r\n    {\r\n        public enum SYSTEM_INFORMATION_CLASS\r\n        {\r\n            /* ... */\r\n            SystemProcessInformation = 0x0005,\r\n            /* ... */\r\n        }\r\n\r\n        #if X86\r\n        [StructLayout(LayoutKind.Explicit)]\r\n        public struct SYSTEM_PROCESS_INFORMATION\r\n        {\r\n            [FieldOffset(0)]\r\n            public int NextEntryOffset;\r\n            /* ... */\r\n            [FieldOffset(56)]\r\n            public UNICODE_STRING ImageName;\r\n            /* ... */\r\n            [FieldOffset(68)]\r\n            public int UniqueProcessId;\r\n            /* ... */\r\n        }\r\n        #else\r\n        #error Platform not supported.\r\n        #endif\r\n\r\n        [StructLayout(LayoutKind.Explicit, Size = 8)]\r\n        public struct LARGE_INTEGER\r\n        {\r\n            [FieldOffset(0)]\r\n            public Int64 QuadPart;\r\n            [FieldOffset(0)]\r\n            public UInt32 LowPart;\r\n            [FieldOffset(4)]\r\n            public Int32 HighPart;\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Sequential, Size = 8)]\r\n        public struct UNICODE_STRING\r\n        {\r\n            public short Length;\r\n            public short MaximumLength;\r\n            public IntPtr Buffer;\r\n        }\r\n\r\n        public enum NTSTATUS : uint\r\n        {\r\n            SUCCESS = 0x0,\r\n            STATUS_INFO_LENGTH_MISMATCH = 0xC0000004\r\n        }\r\n\r\n        [DllImport(\"ntdll.dll\", PreserveSig = true, EntryPoint = \"NtQuerySystemInformation\")]\r\n        public static extern NTSTATUS NtQuerySystemInformationInitial(\r\n            SYSTEM_INFORMATION_CLASS infoClass,\r\n            IntPtr info,\r\n            int size,\r\n            out int length);\r\n\r\n        [DllImport(\"ntdll.dll\", PreserveSig = true)]\r\n        public static extern NTSTATUS NtQuerySystemInformation(\r\n            SYSTEM_INFORMATION_CLASS InfoClass,\r\n            IntPtr info,\r\n            int size,\r\n            IntPtr length);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Ole32.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    static class Ole32\r\n    {\r\n        [DllImport(\"ole32.dll\", PreserveSig = false)]\r\n        public static extern void PropVariantClear(ref PropVariant pvar);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/PropVariant.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [StructLayout(LayoutKind.Sequential, Pack = 0)]\r\n    public struct PropArray\r\n    {\r\n        internal uint cElems;\r\n        internal IntPtr pElems;\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Explicit, Pack = 1)]\r\n    public struct PropVariant\r\n    {\r\n        [FieldOffset(0)] public VarEnum varType;\r\n        [FieldOffset(2)] public ushort wReserved1;\r\n        [FieldOffset(4)] public ushort wReserved2;\r\n        [FieldOffset(6)] public ushort wReserved3;\r\n        [FieldOffset(8)] public byte bVal;\r\n        [FieldOffset(8)] public sbyte cVal;\r\n        [FieldOffset(8)] public ushort uiVal;\r\n        [FieldOffset(8)] public short iVal;\r\n        [FieldOffset(8)] public uint uintVal;\r\n        [FieldOffset(8)] public int intVal;\r\n        [FieldOffset(8)] public ulong ulVal;\r\n        [FieldOffset(8)] public long lVal;\r\n        [FieldOffset(8)] public float fltVal;\r\n        [FieldOffset(8)] public double dblVal;\r\n        [FieldOffset(8)] public short boolVal;\r\n        [FieldOffset(8)] public IntPtr pclsidVal;\r\n        [FieldOffset(8)] public IntPtr pszVal;\r\n        [FieldOffset(8)] public IntPtr pwszVal;\r\n        [FieldOffset(8)] public IntPtr punkVal;\r\n        [FieldOffset(8)] public PropArray ca;\r\n        [FieldOffset(8)] public System.Runtime.InteropServices.ComTypes.FILETIME filetime;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/PropVariantUnion.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    //\r\n    // NOTE: Verifiability requires that the\r\n    // fields of these value-types need to be public\r\n    // since PropVariantUnion has explicit layout,\r\n    // and has these value-types as its fields in a way that\r\n    // overlaps with other PropVariantUnion fields\r\n    // (same FieldOffset for multiple fields).\r\n    //\r\n\r\n    /// <summary>\r\n    /// CY, used in PropVariantUnion.\r\n    /// </summary>\r\n    [StructLayout(LayoutKind.Sequential, Pack = 0)]\r\n    struct CY\r\n    {\r\n        public uint Lo;\r\n        public int Hi;\r\n    }\r\n\r\n    /// <summary>\r\n    /// BSTRBLOB, used in PropVariantUnion.\r\n    /// </summary>\r\n    [StructLayout(LayoutKind.Sequential, Pack = 0)]\r\n    struct BSTRBLOB\r\n    {\r\n        public uint cbSize;\r\n        public IntPtr pData;\r\n    }\r\n\r\n    /// <summary>\r\n    /// BLOB, used in PropVariantUnion.\r\n    /// </summary>\r\n    [StructLayout(LayoutKind.Sequential, Pack = 0)]\r\n    struct BLOB\r\n    {\r\n        public uint cbSize;\r\n        public IntPtr pBlobData;\r\n    }\r\n\r\n    /// <summary>\r\n    /// CArray, used in PropVariantUnion.\r\n    /// </summary>\r\n    [StructLayout(LayoutKind.Sequential, Pack = 0)]\r\n    struct CArray\r\n    {\r\n        public uint cElems;\r\n        public IntPtr pElems;\r\n    }\r\n\r\n    /// <summary>\r\n    /// Union portion of PROPVARIANT\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// All fields (or their placeholders) are declared even if\r\n    /// they are not used. This is to make sure that the size of\r\n    /// the union matches the size of the union in\r\n    /// the actual unmanaged PROPVARIANT structure\r\n    /// for all architectures (32-bit/64-bit).\r\n    /// Points to note:\r\n    /// - All pointer type fields are declared as IntPtr.\r\n    /// - CAxxx type fields (like CAC, CAUB, etc.) are all of same\r\n    ///     structural layout, hence not all declared individually\r\n    ///     since they are not used. A placeholder CArray\r\n    ///     is used to represent all of them to account for the\r\n    ///     size of these types. CArray is defined later.\r\n    /// - Rest of the fields are declared with corresponding\r\n    ///     managed equivalent types.\r\n    /// </remarks>\r\n    [StructLayout(LayoutKind.Explicit)]\r\n    struct PropVariantUnion\r\n    {\r\n        /// <summary>\r\n        /// CHAR\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public sbyte cVal;\r\n\r\n        /// <summary>\r\n        /// UCHAR\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public byte bVal;\r\n\r\n        /// <summary>\r\n        /// SHORT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public short iVal;\r\n\r\n        /// <summary>\r\n        /// USHORT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public ushort uiVal;\r\n\r\n        /// <summary>\r\n        /// LONG\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public int lVal;\r\n\r\n        /// <summary>\r\n        /// ULONG\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public uint ulVal;\r\n\r\n        /// <summary>\r\n        /// INT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public int intVal;\r\n\r\n        /// <summary>\r\n        /// UINT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public uint uintVal;\r\n\r\n        /// <summary>\r\n        /// LARGE_INTEGER\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public Int64 hVal;\r\n\r\n        /// <summary>\r\n        /// ULARGE_INTEGER\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public UInt64 uhVal;\r\n\r\n        /// <summary>\r\n        /// FLOAT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public float fltVal;\r\n\r\n        /// <summary>\r\n        /// DOUBLE\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public double dblVal;\r\n\r\n        /// <summary>\r\n        /// VARIANT_BOOL\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public short boolVal;\r\n\r\n        /// <summary>\r\n        /// SCODE\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public int scode;\r\n\r\n        /// <summary>\r\n        /// CY\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public CY cyVal;\r\n\r\n        /// <summary>\r\n        /// DATE\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public double date;\r\n\r\n        /// <summary>\r\n        /// FILETIME\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public System.Runtime.InteropServices.ComTypes.FILETIME filetime;\r\n\r\n\r\n        /// <summary>\r\n        /// CLSID*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr puuid;\r\n\r\n        /// <summary>\r\n        /// CLIPDATA*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pclipdata;\r\n\r\n        /// <summary>\r\n        /// BSTR\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr bstrVal;\r\n\r\n        /// <summary>\r\n        /// BSTRBLOB\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public BSTRBLOB bstrblobVal;\r\n\r\n        /// <summary>\r\n        /// BLOB\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public BLOB blob;\r\n\r\n        /// <summary>\r\n        /// LPSTR\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pszVal;\r\n\r\n        /// <summary>\r\n        /// LPWSTR\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pwszVal;\r\n\r\n        /// <summary>\r\n        /// IUnknown*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr punkVal;\r\n\r\n        /// <summary>\r\n        /// IDispatch*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pdispVal;\r\n\r\n        /// <summary>\r\n        /// IStream*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pStream;\r\n\r\n        /// <summary>\r\n        /// IStorage*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pStorage;\r\n\r\n        /// <summary>\r\n        /// LPVERSIONEDSTREAM\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pVersionedStream;\r\n\r\n        /// <summary>\r\n        /// LPSAFEARRAY\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr parray;\r\n\r\n        /// <summary>\r\n        /// Placeholder for\r\n        /// CAC, CAUB, CAI, CAUI, CAL, CAUL, CAH, CAUH; CAFLT,\r\n        /// CADBL, CABOOL, CASCODE, CACY, CADATE, CAFILETIME,\r\n        /// CACLSID, CACLIPDATA, CABSTR, CABSTRBLOB,\r\n        /// CALPSTR, CALPWSTR, CAPROPVARIANT\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public CArray cArray;\r\n\r\n        /// <summary>\r\n        /// CHAR*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pcVal;\r\n\r\n        /// <summary>\r\n        /// UCHAR*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pbVal;\r\n\r\n        /// <summary>\r\n        /// SHORT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr piVal;\r\n\r\n        /// <summary>\r\n        /// USHORT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr puiVal;\r\n\r\n        /// <summary>\r\n        /// LONG*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr plVal;\r\n\r\n        /// <summary>\r\n        /// ULONG*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pulVal;\r\n\r\n        /// <summary>\r\n        /// INT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pintVal;\r\n\r\n        /// <summary>\r\n        /// UINT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr puintVal;\r\n\r\n        /// <summary>\r\n        /// FLOAT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pfltVal;\r\n\r\n        /// <summary>\r\n        /// DOUBLE*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pdblVal;\r\n\r\n        /// <summary>\r\n        /// VARIANT_BOOL*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pboolVal;\r\n\r\n        /// <summary>\r\n        /// DECIMAL*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pdecVal;\r\n\r\n        /// <summary>\r\n        /// SCODE*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pscode;\r\n\r\n        /// <summary>\r\n        /// CY*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pcyVal;\r\n\r\n        /// <summary>\r\n        /// DATE*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pdate;\r\n\r\n        /// <summary>\r\n        /// BSTR*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pbstrVal;\r\n\r\n        /// <summary>\r\n        /// IUnknown**\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr ppunkVal;\r\n\r\n        /// <summary>\r\n        /// IDispatch**\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr ppdispVal;\r\n\r\n        /// <summary>\r\n        /// LPSAFEARRAY*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pparray;\r\n\r\n        /// <summary>\r\n        /// PROPVARIANT*\r\n        /// </summary>\r\n        [FieldOffset(0)]\r\n        public IntPtr pvarVal;\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/PropertyKeys.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    public static class PropertyKeys\r\n    {\r\n        public static PROPERTYKEY PKEY_ItemNameDisplay = new PROPERTYKEY\r\n        {\r\n            fmtid = new Guid(\"{B725F130-47EF-101A-A5F1-02608C9EEBAC}\"),\r\n            pid = new UIntPtr(10)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_AppUserModel_Background = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{86D40B4D-9069-443C-819A-2A54090DCCEC}\"),\r\n            pid = new UIntPtr(4)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_AppUserModel_PackageInstallPath = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}\"),\r\n            pid = new UIntPtr(15)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_Tile_SmallLogoPath = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{86D40B4D-9069-443C-819A-2A54090DCCEC}\"),\r\n            pid = new UIntPtr(2)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_AppUserModel_PackageFullName = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}\"),\r\n            pid = new UIntPtr(21)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_Device_FriendlyName = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0xa45c254e, 0xdf1c, 0x4efd, {0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0}}\"),\r\n            pid = new UIntPtr(14)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_AudioEndPoint_Interface = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{a45c254e-df1c-4efd-8020-67d146a850e0}\"),\r\n            pid = new UIntPtr(2)\r\n        };\r\n\r\n        public static PROPERTYKEY PKEY_AudioEndpoint_PhysicalSpeakers = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0x1da5d803, 0xd492, 0x4edd, {0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e}}\"),\r\n            pid = new UIntPtr(3)\r\n        };\r\n\r\n        public static PROPERTYKEY DEVPKEY_Device_DeviceDesc = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0xa45c254e, 0xdf1c, 0x4efd, {0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0}}\"),\r\n            pid = new UIntPtr(2)\r\n        };\r\n\r\n        public static PROPERTYKEY DEVPKEY_Device_EnumeratorName = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0xa45c254e, 0xdf1c, 0x4efd, {0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0}}\"),\r\n            pid = new UIntPtr(24)\r\n        };\r\n\r\n        public static PROPERTYKEY DEVPKEY_DeviceClass_IconPath = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0x259abffc, 0x50a7, 0x47ce, {0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66}}\"),\r\n            pid = new UIntPtr(12)\r\n        };\r\n\r\n        public static PROPERTYKEY DEVPKEY_DeviceInterface_FriendlyName = new PROPERTYKEY\r\n        {\r\n            fmtid = Guid.Parse(\"{0x026e516e, 0xb814, 0x414b, {0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22}}\"),\r\n            pid = new UIntPtr(2)\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/RECT.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [Serializable]\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct RECT\r\n    {\r\n        public int Left;\r\n        public int Top;\r\n        public int Right;\r\n        public int Bottom;\r\n\r\n        public override string ToString() => $\"[Left={Left},Top={Top},Right={Right},Bottom={Bottom}]\";\r\n        public bool Contains(System.Drawing.Point pt) => pt.X >= Left && pt.X <= Right && pt.Y >= Top && pt.Y <= Bottom;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SFGAO.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [Flags]\r\n    enum SFGAO : uint\r\n    {\r\n        /// <summary>Objects can be copied</summary>\r\n        /// <remarks>DROPEFFECT_COPY</remarks>\r\n        CANCOPY = 0x1,\r\n        /// <summary>Objects can be moved</summary>\r\n        /// <remarks>DROPEFFECT_MOVE</remarks>\r\n        CANMOVE = 0x2,\r\n        /// <summary>Objects can be linked</summary>\r\n        /// <remarks>\r\n        /// DROPEFFECT_LINK.\r\n        ///\r\n        /// If this bit is set on an item in the shell folder, a\r\n        /// 'Create Shortcut' menu item will be added to the File\r\n        /// menu and context menus for the item.  If the user selects\r\n        /// that command, your IContextMenu::InvokeCommand() will be called\r\n        /// with 'link'.\r\n        /// That flag will also be used to determine if 'Create Shortcut'\r\n        /// should be added when the item in your folder is dragged to another\r\n        /// folder.\r\n        /// </remarks>\r\n        CANLINK = 0x4,\r\n        /// <summary>supports BindToObject(IID_IStorage)</summary>\r\n        STORAGE = 0x00000008,\r\n        /// <summary>Objects can be renamed</summary>\r\n        CANRENAME = 0x00000010,\r\n        /// <summary>Objects can be deleted</summary>\r\n        CANDELETE = 0x00000020,\r\n        /// <summary>Objects have property sheets</summary>\r\n        HASPROPSHEET = 0x00000040,\r\n\r\n        // unused = 0x00000080,\r\n\r\n        /// <summary>Objects are drop target</summary>\r\n        DROPTARGET = 0x00000100,\r\n        CAPABILITYMASK = 0x00000177,\r\n        // unused = 0x00000200,\r\n        // unused = 0x00000400,\r\n        // unused = 0x00000800,\r\n        // unused = 0x00001000,\r\n        /// <summary>Object is encrypted (use alt color)</summary>\r\n        ENCRYPTED = 0x00002000,\r\n        /// <summary>'Slow' object</summary>\r\n        ISSLOW = 0x00004000,\r\n        /// <summary>Ghosted icon</summary>\r\n        GHOSTED = 0x00008000,\r\n        /// <summary>Shortcut (link)</summary>\r\n        LINK = 0x00010000,\r\n        /// <summary>Shared</summary>\r\n        SHARE = 0x00020000,\r\n        /// <summary>Read-only</summary>\r\n        READONLY = 0x00040000,\r\n        /// <summary> Hidden object</summary>\r\n        HIDDEN = 0x00080000,\r\n        DISPLAYATTRMASK = 0x000FC000,\r\n        /// <summary> May contain children with SFGAO_FILESYSTEM</summary>\r\n        FILESYSANCESTOR = 0x10000000,\r\n        /// <summary>Support BindToObject(IID_IShellFolder)</summary>\r\n        FOLDER = 0x20000000,\r\n        /// <summary>Is a win32 file system object (file/folder/root)</summary>\r\n        FILESYSTEM = 0x40000000,\r\n        /// <summary>May contain children with SFGAO_FOLDER (may be slow)</summary>\r\n        HASSUBFOLDER = 0x80000000,\r\n        CONTENTSMASK = 0x80000000,\r\n        /// <summary>Invalidate cached information (may be slow)</summary>\r\n        VALIDATE = 0x01000000,\r\n        /// <summary>Is this removeable media?</summary>\r\n        REMOVABLE = 0x02000000,\r\n        /// <summary> Object is compressed (use alt color)</summary>\r\n        COMPRESSED = 0x04000000,\r\n        /// <summary>Supports IShellFolder, but only implements CreateViewObject() (non-folder view)</summary>\r\n        BROWSABLE = 0x08000000,\r\n        /// <summary>Is a non-enumerated object (should be hidden)</summary>\r\n        NONENUMERATED = 0x00100000,\r\n        /// <summary>Should show bold in explorer tree</summary>\r\n        NEWCONTENT = 0x00200000,\r\n        /// <summary>Obsolete</summary>\r\n        CANMONIKER = 0x00400000,\r\n        /// <summary>Obsolete</summary>\r\n        HASSTORAGE = 0x00400000,\r\n        /// <summary>Supports BindToObject(IID_IStream)</summary>\r\n        STREAM = 0x00400000,\r\n        /// <summary>May contain children with SFGAO_STORAGE or SFGAO_STREAM</summary>\r\n        STORAGEANCESTOR = 0x00800000,\r\n        /// <summary>For determining storage capabilities, ie for open/save semantics</summary>\r\n        STORAGECAPMASK = 0x70C50008,\r\n        /// <summary>\r\n        /// Attributes that are masked out for PKEY_SFGAOFlags because they are considered\r\n        /// to cause slow calculations or lack context\r\n        /// (SFGAO_VALIDATE | SFGAO_ISSLOW | SFGAO_HASSUBFOLDER and others)\r\n        /// </summary>\r\n        PKEYSFGAOMASK = 0x81044000,\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SICHINT.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [Flags]\r\n    enum SICHINT : uint\r\n    {\r\n        /// <summary>iOrder based on display in a folder view</summary>\r\n        DISPLAY = 0x00000000,\r\n        /// <summary>exact instance compare</summary>\r\n        ALLFIELDS = 0x80000000,\r\n        /// <summary>iOrder based on canonical name (better performance)</summary>\r\n        CANONICAL = 0x10000000,\r\n        /// <summary>Windows 7 and later.</summary>\r\n        TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,\r\n    };\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SIGDN.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    enum SIGDN : uint\r\n    {                                                 // lower word (& with 0xFFFF)\r\n        NORMALDISPLAY = 0x00000000,                   // SHGDN_NORMAL\r\n        PARENTRELATIVEPARSING = 0x80018001,           // SHGDN_INFOLDER | SHGDN_FORPARSING\r\n        DESKTOPABSOLUTEPARSING = 0x80028000,          // SHGDN_FORPARSING\r\n        PARENTRELATIVEEDITING = 0x80031001,           // SHGDN_INFOLDER | SHGDN_FOREDITING\r\n        DESKTOPABSOLUTEEDITING = 0x8004c000,          // SHGDN_FORPARSING | SHGDN_FORADDRESSBAR\r\n        FILESYSPATH = 0x80058000,                     // SHGDN_FORPARSING\r\n        URL = 0x80068000,                             // SHGDN_FORPARSING\r\n        PARENTRELATIVEFORADDRESSBAR = 0x8007c001,     // SHGDN_INFOLDER | SHGDN_FORPARSING | SHGDN_FORADDRESSBAR\r\n        PARENTRELATIVE = 0x80080001,                  // SHGDN_INFOLDER\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SIZE.cs",
    "content": "﻿using System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct SIZE\r\n    {\r\n        public int cx;\r\n        public int cy;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/STGM.cs",
    "content": "﻿namespace EarTrumpet.Interop\r\n{\r\n    public enum STGM\r\n    {\r\n        STGM_READ = 0,\r\n        STGM_WRITE = 1,\r\n        STGM_READWRITE = 2,\r\n        // ...\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SafeHandles/HMODULE.cs",
    "content": "﻿using Microsoft.Win32.SafeHandles;\r\n\r\nnamespace EarTrumpet.Interop.SafeHandles\r\n{\r\n    public class HMODULE : SafeHandleZeroOrMinusOneIsInvalid\r\n    {\r\n        private HMODULE() : base(ownsHandle: true)\r\n        {\r\n        }\r\n\r\n        protected override bool ReleaseHandle()\r\n        {\r\n            return Kernel32.FreeLibrary(handle);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/Interop/Shell32.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Shell32\r\n    {\r\n        public static readonly int WM_TASKBARCREATED = User32.RegisterWindowMessage(\"TaskbarCreated\");\r\n\r\n        public const int KF_FLAG_DONT_VERIFY = 0x00004000;\r\n\r\n        [Flags]\r\n        public enum AppBarState\r\n        {\r\n            ABS_AUTOHIDE = 1\r\n        }\r\n\r\n        [DllImport(\"shell32.dll\", CharSet = CharSet.Unicode, PreserveSig = false)]\r\n        [return: MarshalAs(UnmanagedType.Interface)]\r\n        public static extern IShellItem2 SHCreateItemInKnownFolder(\r\n            [MarshalAs(UnmanagedType.LPStruct)]Guid kfid,\r\n            uint dwKFFlags,\r\n            [MarshalAs(UnmanagedType.LPWStr)]string pszItem,\r\n            [MarshalAs(UnmanagedType.LPStruct)]Guid riid);\r\n\r\n        [DllImport(\"shell32.dll\", CharSet = CharSet.Unicode, PreserveSig = false)]\r\n        [return: MarshalAs(UnmanagedType.Interface, IidParameterIndex = 2)]\r\n        public static extern IShellItem2 SHCreateItemFromParsingName(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string pszPath,\r\n            IntPtr pbc,\r\n            [MarshalAs(UnmanagedType.LPStruct)]Guid riid);\r\n\r\n        [DllImport(\"shell32.dll\", PreserveSig = true)]\r\n        public static extern UIntPtr SHAppBarMessage(\r\n            AppBarMessage dwMessage,\r\n            ref APPBARDATA pData);\r\n\r\n        public enum NotifyIconMessage : int\r\n        {\r\n            NIM_ADD = 0x00000000,\r\n            NIM_MODIFY = 0x00000001,\r\n            NIM_DELETE = 0x00000002,\r\n            NIM_SETFOCUS = 0x00000003,\r\n            NIM_SETVERSION = 0x00000004,\r\n        }\r\n\r\n        public enum NotifyIconNotification : int\r\n        {\r\n            NIN_SELECT = 0x400,\r\n            NIN_KEYSELECT = 0x401,\r\n            NIN_BALLOONSHOW = 0x402,\r\n            NIN_BALLOONHIDE = 0x403,\r\n            NIN_BALLOONTIMEOUT = 0x404,\r\n            NIN_BALLOONUSERCLICK = 0x405,\r\n            NIN_POPUPOPEN = 0x406,\r\n            NIN_POPUPCLOSE = 0x407,\r\n        }\r\n\r\n        public static readonly int NOTIFYICON_VERSION_4 = 4;\r\n\r\n        [DllImport(\"shell32.dll\", PreserveSig = true, SetLastError = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        public static extern bool Shell_NotifyIconW(\r\n            NotifyIconMessage message,\r\n            ref NOTIFYICONDATAW pNotifyIconData);\r\n\r\n        [DllImport(\"shell32.dll\", PreserveSig = true)]\r\n        public static extern int Shell_NotifyIconGetRect(ref NOTIFYICONIDENTIFIER identifier, out RECT iconLocation);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/SndVolSSO.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    public class SndVolSSO\r\n    {\r\n        public enum IconId\r\n        {\r\n            Muted = 120,\r\n            SpeakerZeroBars = 121,\r\n            SpeakerOneBar = 122,\r\n            SpeakerTwoBars = 123,\r\n            SpeakerThreeBars = 124,\r\n            NoDevice = 125,\r\n        }\r\n\r\n        private static readonly string DllPath = Environment.ExpandEnvironmentVariables(@\"%SystemRoot%\\System32\\SndVolSSO.dll\");\r\n\r\n        public static string GetPath(IconId icon)\r\n        {\r\n            return $\"{DllPath},{(int)icon}\";\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/User32.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    public class User32\r\n    {\r\n        public const int WM_USER = 0x0400;\r\n        public const int WM_HOTKEY = 0x0312;\r\n        public const int WM_CONTEXTMENU = 0x007B;\r\n        public const int WM_MOUSEMOVE = 0x0200;\r\n        public const int WM_LBUTTONUP = 0x0202;\r\n        public const int WM_RBUTTONUP = 0x0205;\r\n        public const int WM_MBUTTONUP = 0x0208;\r\n        public const int WM_SETTINGCHANGE = 0x001A;\r\n        public const int SPI_SETWORKAREA = 0x002F;\r\n        public const int TTM_POPUP = 0x422;\r\n        public const int TB_GETTOOLTIPS = 0x423;\r\n\r\n        public static uint MAKEWPARAM(ushort low, ushort high) => ((uint)high << 16) | low;\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern bool RegisterHotKey(\r\n            IntPtr hWnd,\r\n            int id,\r\n            uint fsModifiers,\r\n            uint vk);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern bool UnregisterHotKey(\r\n            IntPtr hWnd,\r\n            int id);\r\n\r\n        [Flags]\r\n        public enum WindowPosFlags : uint\r\n        {\r\n            SWP_NOSIZE = 0x0001,\r\n            SWP_NOMOVE = 0x0002,\r\n            SWP_NOZORDER = 0x0004,\r\n            SWP_NOACTIVATE = 0x0010,\r\n        }\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern bool SetWindowPos(\r\n            IntPtr hWnd,\r\n            IntPtr hWndInsertAfter,\r\n            int x,\r\n            int y,\r\n            int cx,\r\n            int cy,\r\n            WindowPosFlags uFlags);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        internal static extern int SetWindowCompositionAttribute(\r\n            IntPtr hwnd,\r\n            ref WindowCompositionAttribData data);\r\n\r\n        [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        public static extern IntPtr FindWindow(\r\n            [MarshalAs(UnmanagedType.LPWStr)]string lpClassName,\r\n            string lpWindowName);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern bool GetWindowRect(\r\n            IntPtr hwnd,\r\n            out RECT lpRect);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        internal static extern int IsImmersiveProcess(\r\n            IntPtr hProcess);\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct WindowCompositionAttribData\r\n        {\r\n            public WindowCompositionAttribute Attribute;\r\n            public IntPtr Data;\r\n            public int SizeOfData;\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct AccentPolicy\r\n        {\r\n            public AccentState AccentState;\r\n            public AccentFlags AccentFlags;\r\n            public uint GradientColor;\r\n            public uint AnimationId;\r\n        }\r\n\r\n        [Flags]\r\n        public enum AccentFlags\r\n        {\r\n            None = 0x0,\r\n            // ...\r\n            DrawLeftBorder = 0x20,\r\n            DrawTopBorder = 0x40,\r\n            DrawRightBorder = 0x80,\r\n            DrawBottomBorder = 0x100,\r\n            DrawAllBorders = (DrawLeftBorder | DrawTopBorder | DrawRightBorder | DrawBottomBorder)\r\n            // ...\r\n        }\r\n\r\n        internal enum WindowCompositionAttribute\r\n        {\r\n            // ...\r\n            WCA_ACCENT_POLICY = 19,\r\n            WCA_CORNER_STYLE = 27\r\n            // ...\r\n        }\r\n\r\n        internal enum AccentState\r\n        {\r\n            ACCENT_DISABLED = 0,\r\n            ACCENT_ENABLE_GRADIENT = 1,\r\n            ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,\r\n            ACCENT_ENABLE_BLURBEHIND = 3,\r\n            ACCENT_ENABLE_ACRYLICBLURBEHIND = 4,\r\n            ACCENT_INVALID_STATE = 5\r\n        }\r\n\r\n        public const int WS_EX_TOOLWINDOW = 0x00000080;\r\n        public const int WS_MAXIMIZEBOX = 0x10000;\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct RAWINPUTDEVICE\r\n        {\r\n            public User32.HidUsagePage usUsagePage;\r\n            public User32.HidUsage usUsage;\r\n            public uint dwFlags;\r\n            public IntPtr hwndTarget;\r\n        };\r\n\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        internal struct RAWINPUTHEADER\r\n        {\r\n            public uint dwType;\r\n            public uint dwSize;\r\n            public IntPtr hDevice;\r\n            public IntPtr wParam;\r\n        };\r\n\r\n        [Flags]\r\n        internal enum RAWMOUSE_FLAGS : ushort\r\n        {\r\n            MOUSE_MOVE_RELATIVE = 0,\r\n            MOUSE_MOVE_ABSOLUTE = 1,\r\n            MOUSE_VIRTUAL_DESKTOP = 2,\r\n            // ...\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Explicit)]\r\n        internal struct RAWMOUSE\r\n        {\r\n            [FieldOffset(0)]\r\n            public RAWMOUSE_FLAGS usFlags;\r\n            // union {\r\n            [FieldOffset(4)]\r\n            public uint ulButtons;\r\n            // struct {\r\n            [FieldOffset(4)]\r\n            public ushort usButtonFlags;\r\n            [FieldOffset(6)]\r\n            public short usButtonData;\r\n            // }\r\n            // }\r\n            [FieldOffset(8)]\r\n            public uint ulRawButtons;\r\n            [FieldOffset(12)]\r\n            public int lLastX;\r\n            [FieldOffset(16)]\r\n            public int lLastY;\r\n            [FieldOffset(20)]\r\n            public uint ulExtraInformation;\r\n        }\r\n\r\n        [StructLayout(LayoutKind.Explicit)]\r\n        internal struct RAWINPUT\r\n        {\r\n            [FieldOffset(0)]\r\n            public RAWINPUTHEADER header;\r\n\r\n            [FieldOffset(16)]\r\n            public RAWMOUSE mouse;\r\n\r\n            // ...\r\n        }\r\n\r\n        public enum HidUsagePage : ushort\r\n        {\r\n            UNDEFINED = 0x00,\r\n            GENERIC = 0x01,\r\n            SIMULATION = 0x02,\r\n            VR = 0x03,\r\n            SPORT = 0x04,\r\n            GAME = 0x05,\r\n            KEYBOARD = 0x07,\r\n        }\r\n\r\n        public enum HidUsage : ushort\r\n        {\r\n            Undefined = 0x00,\r\n            Pointer = 0x01,\r\n            Mouse = 0x02,\r\n            Joystick = 0x04,\r\n            Gamepad = 0x05,\r\n            Keyboard = 0x06,\r\n            Keypad = 0x07,\r\n            SystemControl = 0x80,\r\n            Tablet = 0x80,\r\n            Consumer = 0x0C,\r\n        }\r\n\r\n        public enum GWL : int\r\n        {\r\n            // ...\r\n            GWL_STYLE = (-16),\r\n            GWL_EXSTYLE = (-20),\r\n            // ...\r\n        }\r\n\r\n        [Serializable]\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        public struct WINDOWPLACEMENT\r\n        {\r\n            public uint length;\r\n            public uint flags;\r\n            public uint showCmd;\r\n            public POINT ptMinPosition;\r\n            public POINT ptMaxPosition;\r\n            public RECT rcNormalPosition;\r\n        }\r\n\r\n        [Serializable]\r\n        [StructLayout(LayoutKind.Sequential)]\r\n        public struct POINT\r\n        {\r\n            public int x;\r\n            public int y;\r\n        }\r\n\r\n        [DllImport(\"user32.dll\", SetLastError = true, PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        internal static extern bool RegisterRawInputDevices(\r\n            IntPtr rawInputDevices,\r\n            uint numDevices,\r\n            uint size);\r\n\r\n        [DllImport(\"user32.dll\", SetLastError = true, PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.I4)]\r\n        internal static extern uint GetRawInputData(\r\n            IntPtr hRawInput,\r\n            uint uiCommand,\r\n            IntPtr pData,\r\n            ref uint pcbSize,\r\n            uint cbSizeHeader);\r\n\r\n        internal const int RIDEV_NOLEGACY = 0x00000030;\r\n        internal const int WM_INPUT = 0x00FF;\r\n        internal const int RIDEV_INPUTSINK = 0x00000100;\r\n        internal const int RID_INPUT = 0x10000003;\r\n        internal const int RIDEV_REMOVE = 0x00000001;\r\n        internal const int RIM_TYPEMOUSE = 0x0;\r\n        internal const int RI_MOUSE_WHEEL = 0x0400;\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        internal static extern bool SetForegroundWindow(IntPtr hWnd);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr GetForegroundWindow();\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true, CharSet = CharSet.Unicode)]\r\n        public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);\r\n\r\n        public static readonly int MAX_CLASSNAME_LENGTH = 256;\r\n\r\n        [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        public static extern IntPtr FindWindowEx(\r\n            IntPtr hWndParent,\r\n            IntPtr hWndChildAfter,\r\n            [MarshalAs(UnmanagedType.LPWStr)]string lpClassName,\r\n            IntPtr lpWindowName);\r\n\r\n#if X86\r\n        [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        public static extern int GetWindowLong(\r\n            IntPtr hWnd,\r\n            GWL nIndex);\r\n\r\n        [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        public static extern int SetWindowLong(\r\n            IntPtr hWnd,\r\n            GWL nIndex,\r\n            int dwNewLong);\r\n#else\r\n#error [Get/Set]WindowLong not supported on 64-bit platforms\r\n#endif\r\n\r\n        [DllImport(\"user32.dll\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        public static extern int RegisterWindowMessage(string msg);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern uint GetDpiForWindow(IntPtr hWnd);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern uint GetDpiForSystem();\r\n\r\n        public enum SystemMetrics : int\r\n        {\r\n            // ...\r\n            SM_CXICON = 11,\r\n            SM_CYICON = 12,\r\n            SM_CXSMICON = 49,\r\n            SM_CYSMICON = 50,\r\n            SM_CXVIRTUALSCREEN = 78,\r\n            SM_CYVIRTUALSCREEN = 79,\r\n            // ...\r\n        }\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern int GetSystemMetricsForDpi(SystemMetrics nIndex, uint dpi);\r\n\r\n        public enum LoadImageFlags : uint\r\n        {\r\n            // ...\r\n            LR_DEFAULTCOLOR = 0x00000000,\r\n            LR_SHARED = 0x00008000,\r\n            // ...\r\n        }\r\n\r\n        public enum IconCursorVersion : int\r\n        {\r\n            Default = 0x00030000\r\n        }\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true, SetLastError = true)]\r\n        public static extern IntPtr CreateIconFromResourceEx(\r\n            IntPtr presbits,\r\n            int dwResSize,\r\n            [MarshalAs(UnmanagedType.Bool)]bool fIcon,\r\n            IconCursorVersion dwVer,\r\n            int cxDesired,\r\n            int cyDesired,\r\n            LoadImageFlags Flags);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern int LookupIconIdFromDirectoryEx(\r\n            IntPtr presbits,\r\n            [MarshalAs(UnmanagedType.Bool)]bool fIcon,\r\n            int cxDesired,\r\n            int cyDesired,\r\n            LoadImageFlags Flags);\r\n\r\n        [Flags]\r\n        public enum GR_FLAGS : uint\r\n        {\r\n            GR_GDIOBJECTS = 0,\r\n            GR_USEROBJECTS = 1,\r\n            GR_GDIOBJECTS_PEAK = 2,\r\n            GR_USEROBJECTS_PEAK = 4\r\n        }\r\n\r\n        public static readonly IntPtr GR_GLOBAL = new IntPtr(-2);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern uint GetGuiResources(\r\n                IntPtr hProcess,\r\n                GR_FLAGS uiFlags);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);\r\n\r\n        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern int SetWindowsHookEx(\r\n            int idHook,\r\n            HookProc lpfn,\r\n            IntPtr hInstance,\r\n            int threadId);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern bool UnhookWindowsHookEx(int idHook);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        public static extern int CallNextHookEx(\r\n            int idHook,\r\n            int nCode,\r\n            IntPtr wParam,\r\n            IntPtr lParam);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        public static extern bool SetWindowPlacement(\r\n            IntPtr hWnd,\r\n            in WINDOWPLACEMENT lpwndpl);\r\n\r\n        [DllImport(\"user32.dll\", PreserveSig = true)]\r\n        [return: MarshalAs(UnmanagedType.Bool)]\r\n        public static extern bool GetWindowPlacement(\r\n            IntPtr hWnd,\r\n            out WINDOWPLACEMENT lpwndpl);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/Uxtheme.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Uxtheme\r\n    {\r\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#94\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern int GetImmersiveColorSetCount();\r\n\r\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#95\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern uint GetImmersiveColorFromColorSetEx(\r\n            uint dwImmersiveColorSet,\r\n            uint dwImmersiveColorType,\r\n            bool bIgnoreHighContrast,\r\n            uint dwHighContrastCacheMode);\r\n\r\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#96\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern uint GetImmersiveColorTypeFromName(\r\n            string name);\r\n\r\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#98\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern uint GetImmersiveUserColorSetPreference(\r\n            bool bForceCheckRegistry,\r\n            bool bSkipCheckOnFail);\r\n\r\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#100\", CharSet = CharSet.Unicode, PreserveSig = true)]\r\n        internal static extern IntPtr GetImmersiveColorNamedTypeByIndex(\r\n            uint dwIndex);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Interop/shlwapi.cs",
    "content": "﻿using System;\r\nusing System.Runtime.InteropServices;\r\nusing System.Text;\r\n\r\nnamespace EarTrumpet.Interop\r\n{\r\n    class Shlwapi\r\n    {\r\n        [DllImport(\"shlwapi.dll\", CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = true)]\r\n        internal static extern int SHLoadIndirectString(\r\n            string pszSource, \r\n            StringBuilder pszOutBuf, \r\n            int cchOutBuf, \r\n            IntPtr ppvReserved);\r\n\r\n        [DllImport(\"shlwapi.dll\", ExactSpelling = true, PreserveSig = true)]\r\n        internal static extern int PathParseIconLocationW(\r\n            [MarshalAs(UnmanagedType.LPWStr)]\r\n            StringBuilder pszIconFile);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Properties/AssemblyInfo.cs",
    "content": "using System.Reflection;\r\nusing System.Windows;\r\n\r\n[assembly: AssemblyTitle(\"EarTrumpet\")]\r\n[assembly: AssemblyCompany(\"File-New-Project\")]\r\n[assembly: AssemblyProduct(\"EarTrumpet\")]\r\n[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]"
  },
  {
    "path": "EarTrumpet/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.42000\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace EarTrumpet.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    public class Resources {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal Resources() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"EarTrumpet.Properties.Resources\", typeof(Resources).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        public static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to About {Name} add-on.\r\n        /// </summary>\r\n        public static string AboutThisAddonText {\r\n            get {\r\n                return ResourceManager.GetString(\"AboutThisAddonText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to About.\r\n        /// </summary>\r\n        public static string AboutTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"AboutTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to and.\r\n        /// </summary>\r\n        public static string ActionAdditionalText {\r\n            get {\r\n                return ResourceManager.GetString(\"ActionAdditionalText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Do.\r\n        /// </summary>\r\n        public static string ActionVerbText {\r\n            get {\r\n                return ResourceManager.GetString(\"ActionVerbText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add action.\r\n        /// </summary>\r\n        public static string AddActionText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddActionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add condition.\r\n        /// </summary>\r\n        public static string AddConditionText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddConditionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set up hotkeys and automation.\r\n        /// </summary>\r\n        public static string AddonDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddonDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Name:.\r\n        /// </summary>\r\n        public static string AddonNameText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddonNameText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open Windows Settings.\r\n        /// </summary>\r\n        public static string AddonUninstallButtonText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddonUninstallButtonText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This add-on can be removed using the Windows Settings app..\r\n        /// </summary>\r\n        public static string AddonUninstallDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddonUninstallDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Uninstall.\r\n        /// </summary>\r\n        public static string AddonUninstallTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"AddonUninstallTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Add trigger.\r\n        /// </summary>\r\n        public static string AddTriggerText {\r\n            get {\r\n                return ResourceManager.GetString(\"AddTriggerText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An app session is added, removed, starts playing sound, ....\r\n        /// </summary>\r\n        public static string AppEventTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"AppEventTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {App} {Option} on {Device}.\r\n        /// </summary>\r\n        public static string AppEventTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"AppEventTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &quot;{Volume}% volume - {Name}&quot;.\r\n        /// </summary>\r\n        public static string AppOrDeviceFormatAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"AppOrDeviceFormatAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to &quot;Muted - {Name}&quot;.\r\n        /// </summary>\r\n        public static string AppOrDeviceMutedFormatAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"AppOrDeviceMutedFormatAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Apps.\r\n        /// </summary>\r\n        public static string AppsListAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"AppsListAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is added.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_Added {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_Added\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is muted.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_Muted {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_Muted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to stops playing sound.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_NotPlayingSound {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_NotPlayingSound\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to begins playing sound.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_PlayingSound {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_PlayingSound\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is removed.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_Removed {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_Removed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is unmuted.\r\n        /// </summary>\r\n        public static string AudioAppEventKind_Unmuted {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioAppEventKind_Unmuted\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is added.\r\n        /// </summary>\r\n        public static string AudioDeviceEventKind_Added {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioDeviceEventKind_Added\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to becomes default.\r\n        /// </summary>\r\n        public static string AudioDeviceEventKind_BecomingDefault {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioDeviceEventKind_BecomingDefault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to leaves default.\r\n        /// </summary>\r\n        public static string AudioDeviceEventKind_LeavingDefault {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioDeviceEventKind_LeavingDefault\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is removed.\r\n        /// </summary>\r\n        public static string AudioDeviceEventKind_Removed {\r\n            get {\r\n                return ResourceManager.GetString(\"AudioDeviceEventKind_Removed\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to false.\r\n        /// </summary>\r\n        public static string BoolValue_False {\r\n            get {\r\n                return ResourceManager.GetString(\"BoolValue_False\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to true.\r\n        /// </summary>\r\n        public static string BoolValue_True {\r\n            get {\r\n                return ResourceManager.GetString(\"BoolValue_True\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Choose a device.\r\n        /// </summary>\r\n        public static string ChooseADeviceTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ChooseADeviceTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Apps shown above have played sound recently..\r\n        /// </summary>\r\n        public static string ChooseAnAppHelpText {\r\n            get {\r\n                return ResourceManager.GetString(\"ChooseAnAppHelpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Choose an app.\r\n        /// </summary>\r\n        public static string ChooseAnAppTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ChooseAnAppTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Close.\r\n        /// </summary>\r\n        public static string CloseButtonAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"CloseButtonAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Close.\r\n        /// </summary>\r\n        public static string CloseButtonText {\r\n            get {\r\n                return ResourceManager.GetString(\"CloseButtonText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Collapse to show only the default playback device.\r\n        /// </summary>\r\n        public static string CollapseAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"CollapseAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Community settings.\r\n        /// </summary>\r\n        public static string CommunitySettingsPageText {\r\n            get {\r\n                return ResourceManager.GetString(\"CommunitySettingsPageText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is.\r\n        /// </summary>\r\n        public static string ComparisonBoolKind_Is {\r\n            get {\r\n                return ResourceManager.GetString(\"ComparisonBoolKind_Is\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is not.\r\n        /// </summary>\r\n        public static string ComparisonBoolKind_IsNot {\r\n            get {\r\n                return ResourceManager.GetString(\"ComparisonBoolKind_IsNot\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to and.\r\n        /// </summary>\r\n        public static string ConditionAdditionalText {\r\n            get {\r\n                return ResourceManager.GetString(\"ConditionAdditionalText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configuring a filter is optional but lets you build more advanced actions. All conditions must be true before actions are carried out..\r\n        /// </summary>\r\n        public static string ConditionsHelpText {\r\n            get {\r\n                return ResourceManager.GetString(\"ConditionsHelpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Advanced Filter.\r\n        /// </summary>\r\n        public static string ConditionVerbText {\r\n            get {\r\n                return ResourceManager.GetString(\"ConditionVerbText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Exit.\r\n        /// </summary>\r\n        public static string ContextMenuExitTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ContextMenuExitTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No playback devices found.\r\n        /// </summary>\r\n        public static string ContextMenuNoDevices {\r\n            get {\r\n                return ResourceManager.GetString(\"ContextMenuNoDevices\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Send feedback.\r\n        /// </summary>\r\n        public static string ContextMenuSendFeedback {\r\n            get {\r\n                return ResourceManager.GetString(\"ContextMenuSendFeedback\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to I use this action&apos;s context menu item.\r\n        /// </summary>\r\n        public static string ContextMenuTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"ContextMenuTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to I use this action&apos;s context menu item.\r\n        /// </summary>\r\n        public static string ContextMenuTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"ContextMenuTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EarTrumpet couldn&apos;t start.\r\n        /// </summary>\r\n        public static string CriticalFailureDialogHeaderText {\r\n            get {\r\n                return ResourceManager.GetString(\"CriticalFailureDialogHeaderText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A broken font on your system is preventing EarTrumpet from starting.\r\n        ///\r\n        ///Open [https://eartrumpet.app/jmp/fixfonts] now?.\r\n        /// </summary>\r\n        public static string CriticalFailureFontLookupHelpText {\r\n            get {\r\n                return ResourceManager.GetString(\"CriticalFailureFontLookupHelpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If the default playback device is or is not.\r\n        /// </summary>\r\n        public static string DefaultDeviceCondition_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultDeviceCondition_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Device} {Option} the default device.\r\n        /// </summary>\r\n        public static string DefaultDeviceCondition_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultDeviceCondition_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Always use the default playback device.\r\n        /// </summary>\r\n        public static string DefaultDeviceText {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultDeviceText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Default shortcut.\r\n        /// </summary>\r\n        public static string DefaultHotkeyDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultHotkeyDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Management.\r\n        /// </summary>\r\n        public static string DefaultManagementGroupName {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultManagementGroupName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Default playback device.\r\n        /// </summary>\r\n        public static string DefaultPlaybackDeviceText {\r\n            get {\r\n                return ResourceManager.GetString(\"DefaultPlaybackDeviceText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cancel.\r\n        /// </summary>\r\n        public static string DeleteActionDialogNoText {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteActionDialogNoText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete this action?.\r\n        /// </summary>\r\n        public static string DeleteActionDialogText {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteActionDialogText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete.\r\n        /// </summary>\r\n        public static string DeleteActionDialogTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteActionDialogTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete.\r\n        /// </summary>\r\n        public static string DeleteActionDialogYesText {\r\n            get {\r\n                return ResourceManager.GetString(\"DeleteActionDialogYesText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to An audio device is added, removed, set as default, ....\r\n        /// </summary>\r\n        public static string DeviceEventTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"DeviceEventTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Device} {Option}.\r\n        /// </summary>\r\n        public static string DeviceEventTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"DeviceEventTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ends.\r\n        /// </summary>\r\n        public static string EarTrumpetEventKind_Shutdown {\r\n            get {\r\n                return ResourceManager.GetString(\"EarTrumpetEventKind_Shutdown\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to starts.\r\n        /// </summary>\r\n        public static string EarTrumpetEventKind_Startup {\r\n            get {\r\n                return ResourceManager.GetString(\"EarTrumpetEventKind_Startup\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edit.\r\n        /// </summary>\r\n        public static string EditText {\r\n            get {\r\n                return ResourceManager.GetString(\"EditText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EarTrumpet Actions XML.\r\n        /// </summary>\r\n        public static string EtaXmlFileText {\r\n            get {\r\n                return ResourceManager.GetString(\"EtaXmlFileText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EarTrumpet starts or ends.\r\n        /// </summary>\r\n        public static string EventTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"EventTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to  EarTrumpet {Option}.\r\n        /// </summary>\r\n        public static string EventTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"EventTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Every app.\r\n        /// </summary>\r\n        public static string EveryAppText {\r\n            get {\r\n                return ResourceManager.GetString(\"EveryAppText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Expand to show all playback devices.\r\n        /// </summary>\r\n        public static string ExpandAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"ExpandAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Export.\r\n        /// </summary>\r\n        public static string ExportHeaderText {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportHeaderText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save a copy of your actions to a file..\r\n        /// </summary>\r\n        public static string ExportHelpText {\r\n            get {\r\n                return ResourceManager.GetString(\"ExportHelpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Find a setting.\r\n        /// </summary>\r\n        public static string FindASettingText {\r\n            get {\r\n                return ResourceManager.GetString(\"FindASettingText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Foreground app.\r\n        /// </summary>\r\n        public static string ForegroundAppText {\r\n            get {\r\n                return ResourceManager.GetString(\"ForegroundAppText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Volume Mixer.\r\n        /// </summary>\r\n        public static string FullWindowTitleText {\r\n            get {\r\n                return ResourceManager.GetString(\"FullWindowTitleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Home.\r\n        /// </summary>\r\n        public static string HomeButtonText {\r\n            get {\r\n                return ResourceManager.GetString(\"HomeButtonText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Your shortcut.\r\n        /// </summary>\r\n        public static string HotkeyDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"HotkeyDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A hotkey is typed.\r\n        /// </summary>\r\n        public static string HotkeyTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"HotkeyTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (choose a hotkey).\r\n        /// </summary>\r\n        public static string HotkeyTrigger_EmptyText {\r\n            get {\r\n                return ResourceManager.GetString(\"HotkeyTrigger_EmptyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Hotkey} is typed.\r\n        /// </summary>\r\n        public static string HotkeyTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"HotkeyTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import and export.\r\n        /// </summary>\r\n        public static string ImportAndExportTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportAndExportTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Import.\r\n        /// </summary>\r\n        public static string ImportHeaderText {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportHeaderText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Restore a copy of your actions from a file..\r\n        /// </summary>\r\n        public static string ImportHelpText {\r\n            get {\r\n                return ResourceManager.GetString(\"ImportHelpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Cancel.\r\n        /// </summary>\r\n        public static string LeavingPageDialogNoText {\r\n            get {\r\n                return ResourceManager.GetString(\"LeavingPageDialogNoText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Leave without saving?.\r\n        /// </summary>\r\n        public static string LeavingPageDialogText {\r\n            get {\r\n                return ResourceManager.GetString(\"LeavingPageDialogText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save.\r\n        /// </summary>\r\n        public static string LeavingPageDialogTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"LeavingPageDialogTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Leave.\r\n        /// </summary>\r\n        public static string LeavingPageDialogYesText {\r\n            get {\r\n                return ResourceManager.GetString(\"LeavingPageDialogYesText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Legacy settings.\r\n        /// </summary>\r\n        public static string LegacySettingsPageText {\r\n            get {\r\n                return ResourceManager.GetString(\"LegacySettingsPageText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Volume Mixer.\r\n        /// </summary>\r\n        public static string LegacyVolumeMixerText {\r\n            get {\r\n                return ResourceManager.GetString(\"LegacyVolumeMixerText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to More commands.\r\n        /// </summary>\r\n        public static string MoreCommandsAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"MoreCommandsAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mouse settings.\r\n        /// </summary>\r\n        public static string MouseSettingsPageText {\r\n            get {\r\n                return ResourceManager.GetString(\"MouseSettingsPageText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Assign this app to a playback device.\r\n        /// </summary>\r\n        public static string MoveButtonAccessibleText {\r\n            get {\r\n                return ResourceManager.GetString(\"MoveButtonAccessibleText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Muted.\r\n        /// </summary>\r\n        public static string MutedText {\r\n            get {\r\n                return ResourceManager.GetString(\"MutedText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mute.\r\n        /// </summary>\r\n        public static string MuteKind_Mute {\r\n            get {\r\n                return ResourceManager.GetString(\"MuteKind_Mute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Toggle mute.\r\n        /// </summary>\r\n        public static string MuteKind_ToggleMute {\r\n            get {\r\n                return ResourceManager.GetString(\"MuteKind_ToggleMute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Unmute.\r\n        /// </summary>\r\n        public static string MuteKind_Unmute {\r\n            get {\r\n                return ResourceManager.GetString(\"MuteKind_Unmute\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Actions.\r\n        /// </summary>\r\n        public static string MyActionsText {\r\n            get {\r\n                return ResourceManager.GetString(\"MyActionsText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to New action.\r\n        /// </summary>\r\n        public static string NewActionText {\r\n            get {\r\n                return ResourceManager.GetString(\"NewActionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to It doesn&apos;t look like you have any playback devices..\r\n        /// </summary>\r\n        public static string NoDevicesPanelContent {\r\n            get {\r\n                return ResourceManager.GetString(\"NoDevicesPanelContent\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EarTrumpet: No playback devices.\r\n        /// </summary>\r\n        public static string NoDeviceTrayText {\r\n            get {\r\n                return ResourceManager.GetString(\"NoDeviceTrayText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to App volume and device preferences.\r\n        /// </summary>\r\n        public static string OpenAppsVolume_Windows10_Text {\r\n            get {\r\n                return ResourceManager.GetString(\"OpenAppsVolume_Windows10_Text\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Volume mixer.\r\n        /// </summary>\r\n        public static string OpenAppsVolume_Windows11_Text {\r\n            get {\r\n                return ResourceManager.GetString(\"OpenAppsVolume_Windows11_Text\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Sound settings.\r\n        /// </summary>\r\n        public static string OpenSoundSettingsText {\r\n            get {\r\n                return ResourceManager.GetString(\"OpenSoundSettingsText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (optional).\r\n        /// </summary>\r\n        public static string OptionalText {\r\n            get {\r\n                return ResourceManager.GetString(\"OptionalText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Playback.\r\n        /// </summary>\r\n        public static string PlaybackDeviceGroupText {\r\n            get {\r\n                return ResourceManager.GetString(\"PlaybackDeviceGroupText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Playback devices.\r\n        /// </summary>\r\n        public static string PlaybackDevicesText {\r\n            get {\r\n                return ResourceManager.GetString(\"PlaybackDevicesText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Send crash data to the EarTrumpet team.\r\n        /// </summary>\r\n        public static string PrivacyCheckboxText {\r\n            get {\r\n                return ResourceManager.GetString(\"PrivacyCheckboxText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Privacy policy.\r\n        /// </summary>\r\n        public static string PrivacyPolicyText {\r\n            get {\r\n                return ResourceManager.GetString(\"PrivacyPolicyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If a process is running or not.\r\n        /// </summary>\r\n        public static string ProcessCondition_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessCondition_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (enter a process name).\r\n        /// </summary>\r\n        public static string ProcessCondition_EmptyText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessCondition_EmptyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to When {Text} {Option}.\r\n        /// </summary>\r\n        public static string ProcessCondition_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessCondition_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Process name (e.g. notepad).\r\n        /// </summary>\r\n        public static string ProcessCondition_PromptText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessCondition_PromptText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to starts.\r\n        /// </summary>\r\n        public static string ProcessEventKind_Start {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessEventKind_Start\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to ends.\r\n        /// </summary>\r\n        public static string ProcessEventKind_Stop {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessEventKind_Stop\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is not running.\r\n        /// </summary>\r\n        public static string ProcessStateKind_NotRunning {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessStateKind_NotRunning\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to is running.\r\n        /// </summary>\r\n        public static string ProcessStateKind_Running {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessStateKind_Running\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to A process starts or ends.\r\n        /// </summary>\r\n        public static string ProcessTrigger_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessTrigger_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (enter a process name).\r\n        /// </summary>\r\n        public static string ProcessTrigger_EmptyText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessTrigger_EmptyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to When {Text} {Option}.\r\n        /// </summary>\r\n        public static string ProcessTrigger_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessTrigger_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Process name (e.g. notepad).\r\n        /// </summary>\r\n        public static string ProcessTrigger_PromptText {\r\n            get {\r\n                return ResourceManager.GetString(\"ProcessTrigger_PromptText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Coming soon.\r\n        /// </summary>\r\n        public static string ProjectADescription {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectADescription\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Coming soon.\r\n        /// </summary>\r\n        public static string ProjectATitle {\r\n            get {\r\n                return ResourceManager.GetString(\"ProjectATitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Publisher:.\r\n        /// </summary>\r\n        public static string PublisherText {\r\n            get {\r\n                return ResourceManager.GetString(\"PublisherText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Recording.\r\n        /// </summary>\r\n        public static string RecordingDeviceGroupText {\r\n            get {\r\n                return ResourceManager.GetString(\"RecordingDeviceGroupText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Recording devices.\r\n        /// </summary>\r\n        public static string RecordingDevicesText {\r\n            get {\r\n                return ResourceManager.GetString(\"RecordingDevicesText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove this action.\r\n        /// </summary>\r\n        public static string RemoveActionButtonText {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveActionButtonText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to This cannot be undone..\r\n        /// </summary>\r\n        public static string RemoveActionDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveActionDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove action.\r\n        /// </summary>\r\n        public static string RemoveActionHeadingText {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveActionHeadingText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove.\r\n        /// </summary>\r\n        public static string RemoveButtonAccessibleName {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveButtonAccessibleName\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Remove.\r\n        /// </summary>\r\n        public static string RemoveText {\r\n            get {\r\n                return ResourceManager.GetString(\"RemoveText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (required).\r\n        /// </summary>\r\n        public static string RequiredText {\r\n            get {\r\n                return ResourceManager.GetString(\"RequiredText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to No results.\r\n        /// </summary>\r\n        public static string SearchBoxNoResultsText {\r\n            get {\r\n                return ResourceManager.GetString(\"SearchBoxNoResultsText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mute or unmute an app.\r\n        /// </summary>\r\n        public static string SetAppMuteAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetAppMuteAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {App} on {Device}.\r\n        /// </summary>\r\n        public static string SetAppMuteAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetAppMuteAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set the volume of an app.\r\n        /// </summary>\r\n        public static string SetAppVolumeAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetAppVolumeAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {App} volume to {Volume} on {Device}.\r\n        /// </summary>\r\n        public static string SetAppVolumeAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetAppVolumeAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {App} volume by {Volume} on {Device}.\r\n        /// </summary>\r\n        public static string SetAppVolumeAction_LinkTextIncrement {\r\n            get {\r\n                return ResourceManager.GetString(\"SetAppVolumeAction_LinkTextIncrement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set the default playback device.\r\n        /// </summary>\r\n        public static string SetDefaultDeviceAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDefaultDeviceAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set {Device} as playback default.\r\n        /// </summary>\r\n        public static string SetDefaultDeviceAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDefaultDeviceAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Mute or unmute a device.\r\n        /// </summary>\r\n        public static string SetDeviceMuteAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceMuteAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {Device}.\r\n        /// </summary>\r\n        public static string SetDeviceMuteAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceMuteAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} on {Device}.\r\n        /// </summary>\r\n        public static string SetDeviceMuteAction_LinkTextToggle {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceMuteAction_LinkTextToggle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set a device volume.\r\n        /// </summary>\r\n        public static string SetDeviceVolumeAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceVolumeAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {Device} volume to {Volume}.\r\n        /// </summary>\r\n        public static string SetDeviceVolumeAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceVolumeAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to {Option} {Device} volume by {Volume}.\r\n        /// </summary>\r\n        public static string SetDeviceVolumeAction_LinkTextIncrement {\r\n            get {\r\n                return ResourceManager.GetString(\"SetDeviceVolumeAction_LinkTextIncrement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Decrease volume for all devices.\r\n        /// </summary>\r\n        public static string SettingsAbsoluteVolumeDownText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsAbsoluteVolumeDownText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Increase volume for all devices.\r\n        /// </summary>\r\n        public static string SettingsAbsoluteVolumeUpText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsAbsoluteVolumeUpText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to General.\r\n        /// </summary>\r\n        public static string SettingsCategoryTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsCategoryTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Configure shortcuts and get help.\r\n        /// </summary>\r\n        public static string SettingsDescriptionText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsDescriptionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open Taskbar flyout.\r\n        /// </summary>\r\n        public static string SettingsOpenEarTrumpetText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsOpenEarTrumpetText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open Mixer.\r\n        /// </summary>\r\n        public static string SettingsOpenMixerText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsOpenMixerText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Open settings.\r\n        /// </summary>\r\n        public static string SettingsOpenSettingsText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsOpenSettingsText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to EarTrumpet Settings.\r\n        /// </summary>\r\n        public static string SettingsTitle {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsTitle\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use the scroll wheel to change volume while the flyout is open.\r\n        /// </summary>\r\n        public static string SettingsUseGlobalMouseWheelHook {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsUseGlobalMouseWheelHook\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use legacy EarTrumpet icon.\r\n        /// </summary>\r\n        public static string SettingsUseLegacyEarTrumpetIcon {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsUseLegacyEarTrumpetIcon\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use logarithmic volume scale.\r\n        /// </summary>\r\n        public static string SettingsUseLogarithmicVolume {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsUseLogarithmicVolume\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Use the scroll wheel to change volume while hovering over the EarTrumpet icon.\r\n        /// </summary>\r\n        public static string SettingsUseScrollWheelInTray {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsUseScrollWheelInTray\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Settings.\r\n        /// </summary>\r\n        public static string SettingsWindowText {\r\n            get {\r\n                return ResourceManager.GetString(\"SettingsWindowText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set a local variable.\r\n        /// </summary>\r\n        public static string SetVariableAction_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVariableAction_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (set variable name).\r\n        /// </summary>\r\n        public static string SetVariableAction_EmptyText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVariableAction_EmptyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set variable {Text} to {Option}.\r\n        /// </summary>\r\n        public static string SetVariableAction_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVariableAction_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter a variable name (e.g. isInGameMode).\r\n        /// </summary>\r\n        public static string SetVariableAction_PromptText {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVariableAction_PromptText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Decrement.\r\n        /// </summary>\r\n        public static string SetVolumeKind_Decrement {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVolumeKind_Decrement\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Increment.\r\n        /// </summary>\r\n        public static string SetVolumeKind_Increment {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVolumeKind_Increment\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Set.\r\n        /// </summary>\r\n        public static string SetVolumeKind_Set {\r\n            get {\r\n                return ResourceManager.GetString(\"SetVolumeKind_Set\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Shortcuts.\r\n        /// </summary>\r\n        public static string ShortcutsPageText {\r\n            get {\r\n                return ResourceManager.GetString(\"ShortcutsPageText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Sounds.\r\n        /// </summary>\r\n        public static string SoundsControlPanelText {\r\n            get {\r\n                return ResourceManager.GetString(\"SoundsControlPanelText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Toggle mute.\r\n        /// </summary>\r\n        public static string ToggleMuteToolTip {\r\n            get {\r\n                return ResourceManager.GetString(\"ToggleMuteToolTip\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Off.\r\n        /// </summary>\r\n        public static string ToggleSwitchOffText {\r\n            get {\r\n                return ResourceManager.GetString(\"ToggleSwitchOffText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to On.\r\n        /// </summary>\r\n        public static string ToggleSwitchOnText {\r\n            get {\r\n                return ResourceManager.GetString(\"ToggleSwitchOnText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Delete.\r\n        /// </summary>\r\n        public static string ToolbarDeleteText {\r\n            get {\r\n                return ResourceManager.GetString(\"ToolbarDeleteText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Edit.\r\n        /// </summary>\r\n        public static string ToolbarEditText {\r\n            get {\r\n                return ResourceManager.GetString(\"ToolbarEditText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Save.\r\n        /// </summary>\r\n        public static string ToolbarSaveText {\r\n            get {\r\n                return ResourceManager.GetString(\"ToolbarSaveText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to or.\r\n        /// </summary>\r\n        public static string TriggerAdditionalText {\r\n            get {\r\n                return ResourceManager.GetString(\"TriggerAdditionalText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to When.\r\n        /// </summary>\r\n        public static string TriggerVerbText {\r\n            get {\r\n                return ResourceManager.GetString(\"TriggerVerbText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Collect troubleshooting data.\r\n        /// </summary>\r\n        public static string TroubleshootEarTrumpetText {\r\n            get {\r\n                return ResourceManager.GetString(\"TroubleshootEarTrumpetText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to If a local variable is true or false.\r\n        /// </summary>\r\n        public static string VariableCondition_AddText {\r\n            get {\r\n                return ResourceManager.GetString(\"VariableCondition_AddText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to (enter a variable name).\r\n        /// </summary>\r\n        public static string VariableCondition_EmptyText {\r\n            get {\r\n                return ResourceManager.GetString(\"VariableCondition_EmptyText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Variable {Text} is {Option}.\r\n        /// </summary>\r\n        public static string VariableCondition_LinkText {\r\n            get {\r\n                return ResourceManager.GetString(\"VariableCondition_LinkText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Enter a variable name (e.g. isInGameMode).\r\n        /// </summary>\r\n        public static string VariableCondition_PromptText {\r\n            get {\r\n                return ResourceManager.GetString(\"VariableCondition_PromptText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Version:.\r\n        /// </summary>\r\n        public static string VersionText {\r\n            get {\r\n                return ResourceManager.GetString(\"VersionText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Learn more.\r\n        /// </summary>\r\n        public static string WebsiteText {\r\n            get {\r\n                return ResourceManager.GetString(\"WebsiteText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Welcome to EarTrumpet.\r\n        /// </summary>\r\n        public static string WelcomeDialogHeaderText {\r\n            get {\r\n                return ResourceManager.GetString(\"WelcomeDialogHeaderText\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to Windows Legacy.\r\n        /// </summary>\r\n        public static string WindowsLegacyMenuText {\r\n            get {\r\n                return ResourceManager.GetString(\"WindowsLegacyMenuText\", resourceCulture);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/Properties/Resources.af-ZA.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Gaan Uit</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Geen terugspeeltoestel gevind nie</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Stuur terugvoering</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Volumemenger</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Volumemenger</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Dit kom voor of daar geen terugspeeltoestelle is nie.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Geen terugspeeltoestelle</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Terugspeeltoestelle</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Opneemtoestelle</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Instellings</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Klanke</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Versamel foutopsporingsdata</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>U kortpad</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Gebruik altyd verstek terugspeeltoestel</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Aangaande</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Kom meer te wete</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume}% volume - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Uitgedoof - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Programme</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Maak toe</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Vou in en vertoon slegs die verstek terugspeeltoestel</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Verstek kortpad</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Vou uit en vertoon alle terugspeel toestelle</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Algemeen</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Ken die toep toe aan 'n terugspeel toestel</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Maak taakbalkmenu oop</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Gebruik ou EarTrumpet kenteken</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Meer opdragte</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Gedemp</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Klankinstellings</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows verstek</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Aangaande {Name} byvoeging</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Naam:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Open Windows verstellings</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Hierdie byvoeging kan verwyder word via die Windows Settings toep.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Deïnstalleer</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Bestuur</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Verouderde instellings</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Uitgewer:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Stel kortpaaie op en kry hulp</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Instellings</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Kortpaaie</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Weergawe:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Soek instelling</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Geen resultate nie</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Open Menger</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Af</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Aan</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Tuis</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Binnekort beskikbaar</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Binnekort beskikbaar</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Open Instellings</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Maak toe</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Welkom by EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet kon nie begin nie</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>'n Stukkende font op u stelsel verhoed tans dat EarTrumpet aan die gang kan kom.\r\n\r\nWil u na [https://eartrumpet.app/jmp/fixfonts] gaan vir moontlike oplossings?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Demp/Ontdemp</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Privaatheidsbeleid</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Stuur foutdata na die EarTrumpet span</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ar-SA.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>خروج</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>لم يتم العثور على أجهزة تشغيل</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>أرسل تعليقاتك</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>‎‎خالط مستوى الصوت</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>‎‎خالط مستوى الصوت</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>يبدو أنه ليس لديك أي أجهزة تشغيل.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: لا توجد أجهزة تشغيل</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>أجهزة التشغيل</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>أجهزة التسجيل</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>الإعدادات</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>الأصوات</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>تجميع بيانات استكشاف الأخطاء وإصلاحها</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>اختصارك</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>استخدم دائما جهاز التشغيل الافتراضي</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>عن البرنامج</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>التعرف على المزيد</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% مستوى الصوت - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"كتم - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>التطبيقات</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>إغلاق</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>اضغط لإظهار جهاز التشغيل الافتراضي فقط</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>الاختصار الافتراضي</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>توسيع لإظهار جميع أجهزة التشغيل</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>عام</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>تعيين هذا التطبيق إلى جهاز التشغيل</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>فتح شريط المهام</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>استخدام أيقونة EarTrumpet القديمة</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>أوامر إضافية</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>الصوت مكتوم</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>إعدادات الصوت</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>اعدادات ويندوز</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>حول {Name} إضافة</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>الاسم:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>فتح إعدادات ويندوز</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>يمكن إزالة هذه الإضافة باستخدام تطبيق إعدادات ويندوز.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>إلغاء التثبيت</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>إدارة</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>الإعدادات القديمة</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>الناشر:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>ضبط الاختصارات والحصول على المساعدة</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>إعدادات إيرمتروبيت</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>الاختصارات</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>النسخة:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>البحث عن إعدادت معينة</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>لا توجد نتائج</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>فتح متحكم الصوت</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>إيقاف</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>مفعّل</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>الصفحة الرئيسية</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>سيأتي قريباً</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>سيأتي قريباً</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>فتح الإعدادات</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>إغلاق</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>مرحبا بكم في إيرترامبيت</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>تعذر بدء تشغيل الأيرومبيت</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>خط مكسور على النظام الخاص بك يمنع الأذن من البدء.\r\n\r\nافتح [https://eartrumpet.app/jmp/fixfonts] الآن؟</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>وضع الكتم</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>سياسة الخصوصية</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>إرسال بيانات تحطم إلى فريق إيرترامبيت</value>\r\n  </data>\r\n\r\n  <!-- Actions add-on -->\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>و</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>افعل</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>إضافة حدث</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>إضافة شرط</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>إعداد مفاتيح الاختصارات والتشغيل الآلي</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>إضافة مشغل</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>تمت إضافة جلسة تطبيق، تمت إزالتها، وبدأ تشغيل الصوت، ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} في {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>تمت الإضافة</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>تم كتم الصوت</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>إيقاف تشغيل الصوت</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>بدأ تشغيل الصوت</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>يتم إزالته</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>غير مكتوم</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>تمت الإضافة</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>يصبح الافتراضي</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>يترك الافتراضي</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>يتم إزالته</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>خاطئ</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>صحيح</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>هو</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>ليس</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>و</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>تكوين عامل التصفية اختياري ولكن يتيح لك بناء المزيد من الإجراءات المتقدمة. يجب أن تكون جميع الشروط صحيحة قبل تنفيذ الإجراءات.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>فلترة متقدمة</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>أنا أستخدم عنصر قائمة السياق لهذا العمل</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>أنا أستخدم عنصر قائمة السياق لهذا العمل</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>إذا كان جهاز التشغيل الافتراضي هو أو لا</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} الجهاز الافتراضي</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>جهاز التشغيل الافتراضي</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>تم إضافة جهاز صوتي، تمت إزالته، تم تعيينه بشكل افتراضي، ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>ينتهي</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>يبدأ</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>تعديل</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>إجراءات إيرمتروبيت XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>إيرمتروبيت يبدأ أو ينتهي</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> إيرمتروبيت {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>كل تطبيق</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>تصدير</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>حفظ نسخة من إجراءاتك إلى ملف.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>البيانات الأمامية</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>تم كتابة مفتاح الاختصار</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(اختر مفتاح الاختصار)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>تم كتابة {Hotkey}</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>التَّصْدِيرُ وَالْإِسْتِيرادُ</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>استيراد</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>استعادة نسخة من إجراءاتك من ملف.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>صامت</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>وضع الكتم</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>إلغاء كتم الصوت</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>الإجراءات</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>إجراء جديد</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(اختياري)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>التشغيل</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>إذا كانت العملية قيد التشغيل أو لا</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(أدخل اسم العملية)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>عندما {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>اسم العملية (مثال: الملاحظة)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>يبدأ</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>ينتهي</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>ليس قيد التشغيل</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>قيد التشغيل</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>العملية تبدأ أو تنتهي</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(أدخل اسم العملية)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>عندما {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>اسم العملية (مثال: الملاحظة)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>جارٍ التسجيل</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>إزالة</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(مطلوب)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>كتم الصوت أو إلغاء كتم التطبيق</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} على {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>تعيين مستوى صوت التطبيق</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} حجم {Volume} على {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} حجم {Volume} على {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>تعيين جهاز التشغيل الافتراضي</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>تعيين {Device} كمشغل افتراضي</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>كتم الصوت أو إلغاء كتم الجهاز</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} على {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>ضبط مستوى صوت الجهاز</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} مستوى الصوت إلى {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} مستوى الصوت بواسطة {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>تعيين متغير محلي</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(الرجاء إدخال اسم متغير)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>تعيين المتغير {Text} إلى {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>أدخل اسم متغير (على سبيل المثال isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>إنقاص</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>زيادة</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>تعيين</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>أو</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>متى</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>إذا كان المتغير المحلي صحيحا أو خاطئا</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(الرجاء إدخال اسم متغير)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>المتغير {Text} هو {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>أدخل اسم متغير (على سبيل المثال isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>حذف</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>تعديل</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>حفظ</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>اختيار جهاز</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>اختيار تطبيق</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>إلغاء</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>حذف هذا الإجراء؟</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>حذف</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>حذف</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>إلغاء</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>الخروج بدون حفظ؟</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>حفظ</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>مغادرة</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>حذف هذا الإجراء</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>لا يمكن التراجع عن هذا بعد القيام به.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>إزالة الإجراء</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>إزالة</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>التطبيقات المبينة أعلاه تم تشغيل الصوت مؤخرًا.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.bs-latn-ba.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Izlaz</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Uređaji za reprodukciju nisu pronađeni</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Pošalji povratne informacije</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mikseta glasnoće</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mikseta glasnoće</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Izgleda da nemate nijedan uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: nema uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Uređaji za reprodukciju</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Uređaji za snimanje</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Postavke</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Zvukovi</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Skupi podatke za rješavanje problema</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Vaš prečac</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Uvijek koristi zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>O aplikaciji</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Saznajte više</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% glasnoća - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Isključen zvuk - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplikacije</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zatvori</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sažmi za prikazivanje samo zadanog uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Zadani prečac</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Proširi za prikazivanje svih uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Općenito</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Dodijeli ovu aplikaciju uređaju za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Otvori prozor na traci zadataka</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Koristi originalnu EarTrumpet ikonu</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Više komandi</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Isključen zvuk</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Postavke zvuka</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Postavke Windowsa</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>O dodatku {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Ime:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Otvori postavke Windowsa</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ovaj dodatak može biti uklonjen koristeći aplikaciju Windows Postavke.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Deinstaliraj</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Upravljanje</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Naslijeđene postavke</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Izdavač:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfiguriraj postavke i potraži pomoć</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Postavke EarTrumpeta</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Prečice</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Verzija:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Potraži postavku</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Nema rezultata</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Otvori miksetu</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Isključeno</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Uključeno</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Početna stranica</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Dolazi uskoro</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Dolazi uskoro</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Otvori postavke</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Zatvori</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Dobrodošli u EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet se nije uspio pokrenuti</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Pokvaren font na Vašem sistemu onemogućava EarTrumpetu pokretanje.\r\n\r\nOtvoriti [https://eartrumpet.app/jmp/fixfonts] sad?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Isključi zvuk</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Pravila o privatnosti</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Pošalji podatke o rušenju EarTrumpet timu</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Onda</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Dodaj radnju</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Dodaj uslov</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Postavi prečace i automatizaciju</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Dodaj okidač</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Sesija aplikacije je dodana, uklonjena, započinje reproducirati zvuk, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodan</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>je isključen zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>prestaje reproducirati zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>počinje reproducirati zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je uklonjeno</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>je uključen zvuk</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodan</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>postaje zadan</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>prestaje biti zadan</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je uklonjeno</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>netačno</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>tačno</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>je</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>nije</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfiguracija filtera je opcionalno, ali omogućava naprednije akcije. Svi uvjeti moraju biti ispunjeni kako bi se akcije izvršile.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Napredni filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Koristim stavku kontekstnog izbornika ove akcije</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Koristim stavku kontekstnog izbornika ove akcije</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Zadani uređaj za reprodikciju je ili nije</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} zadani uređaj</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Audio uređaj je dodan, uklonjen, postavljen kao zadan, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>završava</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>započinje</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet XML akcija</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet započinje ili završava</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Svaka aplikacija</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Izvezi</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Spremi kopiju Vaših akcija u datoteku.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplikacija u pozadini</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Tipka je unešena</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(odaberi tipku ili više njih)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} je unešen</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Uvoz i eksport</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Uvoz</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Vrati kopiju Vaših postavki iz datoteke.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Utišaj</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Isključi zvuk</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Uključi zvuk</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Akcije</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nova akcija</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(izborno)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Reprodukcija</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Ako je proces pokrenut ili nije</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Kada {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>je pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>završava</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>nije pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>je pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Proces se započinje ili završava</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Kada {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Snimanje</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Ukloni</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(neophodno)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Isključi ili uključi zvuk aplikacije</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi glasnoću aplikacije</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnoća na {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnoća za {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Postavi {Device} kao zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Isključi ili uključi zvuk uređaja</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi glasnoću uređaja</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnoća na {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnoća za {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi lokalnu varijablu</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(postavi ime varijable)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Postavi varijablu {Text} na {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Unesi ime varijable (npr. GameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Smanjivanje</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Povećanje</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Postavi</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ili</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Kada</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Ako je lokalna varijabla istinita ili ne</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesi ime varijable)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Varijabla {Text} je {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Unesi ime varijable (npr. GameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Spremi</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Odaberi uređaj</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Odaberi aplikaciju</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Odustani</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Obrisati ovu akciju?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Odustani</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Izaći bez spremanja?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Spremi</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Izađi</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Ukloni ovu akciju</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ovo ne može biti poništeno.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Ukloni akciju</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Ukloni</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Prikazane aplikacije su nedavno reproducirale zvuk.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Smanji glasnoću za sve uređaje</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Povećaj glasnoću za sve uređaje</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Postavke glasnoće aplikacije i postavke uređaja</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mješač glasnoće</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Postavke miša</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Koristite kotačić miša za mijenjanje glasnoće prilikom držanja miša iznad EarTrumpet ikone</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Koristite kotačić miša za mijenjanje glasnoće kada je otvorena potpaleta</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ca-ES.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Sortir</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>No s'han trobat dispositius de reproducció</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Enviar comentaris</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mesclador de volum</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mesclador de volum</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Sembla que no tens dispositius de reproducció.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: No hi ha dispositius de reproducció</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositius de reproducció</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositius de grabació</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Configuració</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sons</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Recopilar dades per la solució de problemes</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>La teva drecera</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Utilitzar sempre el dispositiu de reproducció predeterminat</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Quant a</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Aprendre més</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% de volum- {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Silenciat - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplicacions</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Tancar</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Contreure per mostrar només el dispositiu de reproducció per defecte</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Drecera per defecte</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Expandir per mostrar tots els dispositius de reproducció</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>General</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Assignar aquesta aplicació a un dispositiu de reproducció</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Obrir menú flotant de la barra de tasques</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Utilitzar icona d'EarTrumpet heredada</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Més comandes</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Silenciat</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Configuració de so</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows heredat</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Sobre el complement {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nom:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Obrir configuració de Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Aquest complement pot ser remogut utilitzant l'aplicació de Configuració de Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Desinstal·lar</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Administració</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Configuració heredada</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Editor:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar dreceres i obtenir ajuda</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Configuració d'EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Dreceres</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versió:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Buscar una configuració</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Cap resultat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Obrir Mesclador</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Desactivat</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Activat</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Inici</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Proximament</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Proximament</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Obrir opcions</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Tancar</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Benvingut a EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet no s'ha pogut iniciar</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Una font invàlida del teu sistema no deixa que EarTrumpet s'iniciï.\r\nAccedir a [https://eartrumpet.app/jmp/fixfonts] ara?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Activat/Desactivar silenci</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Política de privacitat</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Enviar informació d'errors a l'equip de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Realitzar</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Afegir acció</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Afegir condició</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar tecles d'accés ràpid i automatització</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Afegir disparador</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Una sessió d'una aplicació s'afegeix, s'elimina, comença a reproduir so, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} a {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>es afegit</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>es silenciat</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>deixa de reproduir so</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>comença a reproduir so</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>es remoguda</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>es desilenciada</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>es afegida</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>es converteix en predeterminat</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>deixa de ser predeterminat</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>es remoguda</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>fals</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>cert</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>es</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>no es</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurar un filtre és opcional, però et permet construir accions més avançades. Totes les condicións han de ser veritat abans que s'executin les accions.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtre avançat</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Jo utilitzo l'element del menú contextual d'aquesta acció</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Jo utilitzo l'element del menú contextual d'aquesta acció</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si el dispositiu de reproducció per defecte es o no es</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} el dispositiu per defecte</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Dispositiu de reproducció per defecte</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un dispositiu d'àudio és afegit, remogut, establert com predeterminat, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>acaba</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>comença</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Accions d'EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet comença o finalitza</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Totes les aplicacions</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportar</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Guardar una còpia de les accions a un fitxer.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplicació en primer pla</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Una tecla de drecera és pressionada</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(escull una tecla de drecera)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} és pressionada</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importar i exportar</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importar</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaurar una còpia de les teves accions des d'un fitxer.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Silenciar</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Activar/Desactivar so</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Desilenciar</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Accions</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nova acció</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opcional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Reproducción</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si un procés s'està executant o no</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introdueix el nom del procés)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Quan {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nom del procés (ex. Bloc de notes)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>inicia</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>finalitza</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>no s'esta executant</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>s'esta executant</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un procés comença o finalitza</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introdueix el nom d'un procés)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Quan {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nom del procés (ex. Bloc de notes)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Gravació</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(requerit)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silenciar o desilenciar una aplicació</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} a {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establir volum d'una aplicació</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum a {Volume} a {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum per {Volume} a {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establir dispositiu de reproducció per defecte</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Establir {Device} com a dispositiu de reproducció per defecte</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silenciar o desilenciar un dispositiu</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} a {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establir volum d'un dispositiu</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum a {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum per {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establir una variable local</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(establir nom de la variable)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Establir variable {Text} a {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Introdueix el nom d'una variable (ex. tipusDeJoc)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Decrementar</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Incrementar</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Establir</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>o</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Quan</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si una variable local és certa o falsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introdueix el nom d'una variable)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variable {Text} és {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Introdueix el nom d'una variable (ex. tipusDeJoc)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Escull un dispositiu</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Escull una aplicació</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancel·lar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Eliminar aquesta acció?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancel·lar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Sortir sense guardar?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Sortir</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Eliminar aquesta acció</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>No es pot desfer.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Eliminar acció</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Les aplicacions mostrades a sobre han reproduït so recentment.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Disminueix el volum per a tots els dispositius</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Augmenta el volum per a tots els dispositius</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volum de l'aplicació i preferències del dispositiu</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mesclador de volum</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Configuració del ratolí</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Utilitzeu la roda de desplaçament per canviar el volum mentre passeu el cursor per sobre de la icona EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Utilitzeu la roda de desplaçament per canviar el volum mentre el control flotant està obert</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.cs-CZ.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Ukončit</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Nebyla nalezena žádná zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Odeslat zpětnou vazbu</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Směšovač hlasitosti</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Směšovač hlasitosti</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Vypadá to, že nemáte žádná zařízení pro přehrávání.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Žádná zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Zařízení pro záznam</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Nastavení</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Zvuky</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Shromáždit data pro řešení potíží</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Vaše klávesová zkratka</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Vždy používat výchozí zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>O aplikaci</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Další informace</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Hlasitost {Volume}% - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Ztlumeno - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplikace</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zavřít</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sbalit pro zobrazení pouze výchozího zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Výchozí klávesová zkratka</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Rozbalit pro zobrazení všech zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Obecné</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Přiřadit tuto aplikaci k zařízení pro přehrávání</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Otevřít vyskakovací okno hlavního panelu</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Použít původní ikonku EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Další příkazy</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Ztlumeno</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Nastavení zvuku</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Původní nastavení Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>O doplňku {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Název:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Otevřít nastavení Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tento doplněk lze odstranit pomocí aplikace Nastavení Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Odinstalovat</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Správa</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Zastaralá nastavení</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Vydavatel:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfigurovat klávesové zkratky a získat pomoc</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Nastavení EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Klávesové zkratky</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Verze:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Hledat v nastavení</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Žádné výsledky</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Otevřít směšovač</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Vypnuto</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Zapnuto</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Domů</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Již brzy</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Již brzy</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Otevřít nastavení</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Zavřít</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Vítejte v EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet se nepodařilo spustit</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Poškozené písmo ve vašem systému zabraňuje spuštění aplikace EarTrumpet.\r\n\r\nPřejete si nyní otevřít [https://eartrumpet.app/jmp/fixfonts]?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Přepnout ztlumení</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Zásady ochrany osobních údajů</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Odesílat informace o pádech týmu EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Provést</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Přidat akci</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Přidat podmínku</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Nastavit zkratky a automatizaci</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Přidat spouštěč</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Přidána relace aplikace, odstraněna, začne přehrávat zvuk, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je přidán</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>je ztlumeno</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>přestane přehrávat zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>začíná přehrávat zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je odstraněno</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>není ztlumeno</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je přidán</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>stává se výchozím</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>ponechá výchozí</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je odstraněno</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>chybný</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>pravda</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>je</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>není</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>a</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Nastavení filtru je volitelné, ale umožňuje vytvářet pokročilejší akce. Všechny podmínky musí být platné před provedením akcí.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Rozšířený filtr</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Používám kontextovou položku této akce</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Používám kontextovou položku této akce</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Pokud je nebo není výchozí přehrávací zařízení</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} výchozí zařízení</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Výchozí přehrávací zařízení</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Zvukové zařízení je přidáno, odstraněno, nastaveno jako výchozí, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>končí</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>začíná</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Upravit</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Akce EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet začíná nebo končí</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Každá aplikace</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportovat</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Uložte kopii vašich akcí do souboru.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplikace v popředí</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Klávesová zkratka je zadána</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(vyberte klávesovou zkratku)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} je zadán</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importovat a exportovat</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Nahrát</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Obnovit kopii vašich akcí ze souboru.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Ztlumit</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Přepnout ztlumení</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Zrušit ztlumení</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Akce</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nová akce</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(Volitelné)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Přehrávání</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Pokud proces běží nebo ne</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(zadejte název procesu)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Když {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Název procesu (např. poznámkový blok)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>začíná</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>končí</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>není spuštěno</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>je spuštěno</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Proces začíná nebo končí</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(zadejte název procesu)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Když {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Název procesu (např. poznámkový blok)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Nahrávání</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Odstranit</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(vyžadováno)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ztlumit nebo zrušit ztlumení aplikace</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavit hlasitost aplikace</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} hlasitost k {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} hlasitost od {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavit výchozí přehrávací zařízení</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Nastavit {Device} jako výchozí přehrávač</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ztlumit nebo zrušit ztlumení zařízení</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavit hlasitost zařízení</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} hlasitost pro {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} hlasitost od {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavit místní proměnnou</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(nastavit název proměnné)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Nastavit proměnnou {Text} na {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Zadejte název proměnné (např. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Snížení</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Zvýšení</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Nastavit</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>nebo</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Když</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Pokud je místní proměnná pravdivá nebo nepravdivá</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(zadejte název proměnné)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Proměnná {Text} je {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Zadejte název proměnné (např. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Odstranit</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Upravit</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Uložit</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Vyberte zařízení</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Vyberte aplikaci</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Zrušit</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Odstranit tuto akci?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Odstranit</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Odstranit</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Zrušit</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Opustit bez uložení?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Uložit</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Odejít</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Odstranit tuto akci</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tuto operaci nelze vrátit.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Odstranit akci</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Odstranit</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Aplikace zobrazené výše nedávno přehrály zvuk.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Snížit hlasitost pro všechna zařízení</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Zvýšit hlasitost pro všechna zařízení</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.da-DK.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Afslut</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Ingen afspilningsenheder fundet</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Send feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Lydstyrke Mixer</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Lydstyrke Mixer</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Det ser ikke ud til at du har nogen afspilningsenheder.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Ingen afspilningsenheder</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Afspilningsenheder</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Optagelsesenheder</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Indstillinger</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Lyde</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Indsaml fejlfindingsdata</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Din genvej</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Brug altid standardenheden til afspilning</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Om</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Få mere at vide</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% lydstyrke - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Lydløs - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Apps</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Luk</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fold sammen for kun at vise standard afspilningsenheden</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Standardgenvej</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Udvid for at se alle afspilningsenheder</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Generelt</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Tildel denne app til en afspilningsenhed</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Åben proceslinje menu</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Brug det gamle EarTrumpet ikon</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Flere kommandoer</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Lydløs</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Lydindstillinger</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows Legacy</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Om {Name} tilføjelsen</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Navn:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Åbn Windows Indstillinger</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Denne tilføjelse kan fjernes ved hjælp af Windows Indstillinger-appen.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Afinstallér</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Håndtering</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Legacy indstillinger</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Udgiver:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfigurer genveje og få hjælp</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Indstillinger</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Genveje</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Version:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Find indstilling</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Ingen resultater</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Åbn Mixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Fra</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Til</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Hjem</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Åbn indstillinger</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Luk</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Velkommen til EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet kunne ikke startes</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>En defekt skrifttype på dit system forhindrer EarTrumpet i at starte.\r\n\r\nÅbn [https://eartrumpet.app/jmp/fixfonts] nu?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Slå lyd til/fra</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Privatlivspolitik</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Send nedbrudsdata til EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>og</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Gør</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Tilføj handling</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Tilføj betingelse</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Opsætning af genvejstaster og automatisering</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Tilføj udløser</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En app session tilføjes, fjernes, begynder at spille lyd, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>er tilføjet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>er lydløs</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>stopper afspilningen af lyd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>begynder afspilning af lyd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>er fjernet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>er slået til</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>er tilføjet</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>bliver standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>forlader standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>er fjernet</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falsk</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>sand</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>er</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>er ikke</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>og</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Indstilling af et filter er valgfrit, men lader dig konstruere mere avancerede handlinger. Alle betingelser skal være sande før handlinger udføres.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Avanceret filtre</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Jeg bruger denne handlings kontekstmenu element</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Jeg bruger denne handlings kontekstmenu element</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis standardafspilningsenheden er eller ikke er</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} standardenheden</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Standard afspilningshastighed</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En lydenhed er tilføjet, fjernet, sat som standard, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>afslutter</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>begynder</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Redigér</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Handlinger XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet starter eller slutter</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Enhver app</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Eksportér</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Gem en kopi af dine handlinger i en fil.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Forgrundsapp</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En genvejstast er indtastet</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(vælg en genvejstast)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} er skrevet</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importer og eksporter</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Import</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Gendan en kopi af dine handlinger fra en fil.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Lydløs</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Slå lyd til/fra</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Slå lyd til</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Handlinger</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Ny handling</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(Valgfrit)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Afspilning</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis en proces kører eller ej</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angiv et procesnavn)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Når {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Procesnavn (f.eks. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>starter</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>slutter</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>kører ikke</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>kører</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En proces starter eller slutter</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angiv et procesnavn)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Når {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Procesnavn (f.eks. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Optager</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Fjern</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(Påkrævet)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Slå lyden fra/til for en app</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Indstil lydstyrken for en app</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} lydstyrke til {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} lydstyrke med {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Indstil standard afspilningsenhed</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Sæt {Device} som standard afspilningsenhed</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Slå lyden til/fra for enhed</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Indstil en enheds lydstyrke</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} lydstyrke til {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} lydstyrke med {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Angiv lokal variabel</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angiv variabelnavn)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Indstil variablen {Text} til {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Indtast et variabelnavn (f.eks. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Formindsk</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Forøgelse</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Angiv</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>eller</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Når</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis en lokal variabel er sand eller falsk</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(indtast et variabelnavn)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variablen {Text} er {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Indtast et variabelnavn (f.eks. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Slet</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Redigér</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Gem</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Vælg en enhed</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Vælg en app</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuller</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Vil du slette denne handling?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Slet</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Slet</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuller</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Vil du afslutte uden at gemme?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Gem</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Forlad</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Slet denne handling</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Denne handling kan ikke fortrydes.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Fjern handling</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Fjern</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Apps vist ovenfor har afspillet lyd for nylig.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Formindsk lydstyrken for alle enheder</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Forøg lydstyrken for alle enheder</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.de-DE.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Beenden</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Keine Wiedergabegeräte gefunden</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Feedback senden</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Lautstärkemixer</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Alter Lautstärkemixer</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Es sind keine Wiedergabegeräte vorhanden.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Keine Wiedergabegeräte</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Wiedergabegeräte</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Aufnahmegeräte</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Einstellungen</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sounds</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Daten zur Fehlerbehebung sammeln</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Deine Tastenkombination</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Immer das Standard-Wiedergabegerät verwenden</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Über</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Mehr erfahren</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} % Lautstärke - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Stumm - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Apps</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Schließen</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Minimieren, um nur das Standard-Wiedergabegerät anzuzeigen</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Standard Tastenkombination</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Erweitern, um alle Wiedergabegeräte anzuzeigen</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Allgemein</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Wiedergabegerät für diese App auswählen</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Flyout öffnen</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Altes EarTrumpet Symbol verwenden</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Weitere Befehle</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Ton aus</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Soundeinstellungen</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows Optionen</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Über {Name} Add-on</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Name:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Öffne Windows-Einstellungen</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Dieses Add-on kann über die Windows-Einstellungen entfernt werden.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Deinstallieren</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Verwaltung</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Alte Einstellungen</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Herausgeber:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tastenkombinationen und Hilfe</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet-Einstellungen</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Tastenkombinationen</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Version:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Suche eine Einstellung</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Keine Ergebnisse</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Öffne Lautstärkemixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Aus</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Ein</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Startseite</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>In Kürze verfügbar</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>In Kürze verfügbar</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Einstellungen öffnen</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Schließen</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Willkommen bei EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet konnte nicht gestartet werden</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Eine defekte Schriftart in Ihrem System verhindert den Start von EarTrumpet. \r\n\r\nMöchten Sie [https://eartrumpet.app/jmp/fixfonts] öffnen?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Stummschaltung</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Datenschutz</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Informationen zum Absturz an das EarTrumpet-Team senden</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>und</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Ausführen</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Aktion hinzufügen</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Bedingung hinzufügen</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Hotkeys und Automatisierung einrichten</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Trigger hinzufügen</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Eine App-Sitzung wurde hinzugefügt, entfernt, beginnt Ton zu spielen, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} auf {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>wurde hinzugefügt</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>ist stumm geschaltet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>stoppt die Wiedergabe von Ton</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>beginnt die Wiedergabe von Ton</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>wurde entfernt</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>ist nicht mehr gemutet</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>wurde hinzugefügt</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>wird Standard-Gerät</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>bleibt Standard-Gerät</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>wurde entfernt</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>nicht zutreffend</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>zutreffend</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>ist</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>ist nicht</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>und</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Das Konfigurieren eines Filters ist optional, ermöglicht aber das Erstellen erweiterter Aktionen. Alle Bedingungen müssen erfüllt sein, bevor die Aktionen ausgeführt werden.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Erweiterter Filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ich benutze den Kontextmenüeintrag dieser Aktion</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Ich benutze den Kontextmenüeintrag dieser Aktion</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Wenn das Standard-Wiedergabegerät ist oder nicht ist</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} das Standard-Gerät</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Standard-Wiedergabegerät</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ein Audiogerät wird hinzugefügt, entfernt, als Standard gesetzt ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>endet</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>startet</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Bearbeiten</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Aktions XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet startet oder endet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Jede App</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportieren</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Speichern Sie eine Kopie Ihrer Aktionen in einer Datei.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>App im Vordergrund</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ein Hotkey wurde eingegeben</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Wähle einen Hotkey)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} wurde eingegeben</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importieren und Exportieren</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importieren</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Wiederherstellen einer Kopie der Aktionen aus einer Datei.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Stummschalten</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Stummschaltung ein/aus</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Entstummen</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Aktionen</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Neue Aktion</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(optional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Wiedergabe</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Wenn ein Prozess ausgeführt wird oder nicht</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(einen Prozessnamen eingeben)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Wenn {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Prozessname (z.B. Notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>startet</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>endet</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>wird nicht ausgeführt</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>wird ausgeführt</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ein Prozess startet oder endet</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(einen Prozessnamen eingeben)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Wenn {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Prozessname (z.B. Notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Aufnehmen</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Entfernen</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(erforderlich)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>App stummt schalten oder nicht</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} auf {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Lege das Volumen einer App fest</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} Lautstärke zu {Volume} auf {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} Lautstärke von {Volume} auf {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Lege das Standard-Wiedergabegerät fest</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} als Standard für Wiedergabe festlegen</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Gerät stumm schalten oder nicht</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} auf {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Gerätelautstärke festlegen</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} Lautstärke zu {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} Lautstärke bis {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Lokale Variable festlegen</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Variablennamen festlegen)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Variable {Text} auf {Option} festlegen</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Gib einen Variablennamen ein (z.B. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Reduzieren</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Erhöhen</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Festlegen</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>oder</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Wenn</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Wenn eine lokale Variable wahr oder falsch ist</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Gib einen Variablennamen ein)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variable {Text} ist {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Gib einen Variablennamen ein (z.B. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Löschen</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Bearbeiten</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Speichern</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Wählen Sie ein Gerät</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Wählen Sie eine App</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Abbrechen</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Diese Aktion löschen?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Löschen</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Löschen</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Abbrechen</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Verlassen ohne zu speichern?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Speichern</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Verlassen</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Diese Aktion entfernen</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Dies kann nicht rückgängig gemacht werden.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Aktion entfernen</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Entfernen</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Die oben angezeigten Apps haben kürzlich Töne abgespielt.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Lautstärke für alle Geräte verringern</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Lautstärke für alle Geräte erhöhen</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>App-Lautstärke- und Geräteeinstellungen</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Lautstärkenmixer</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Mauseinstellungen</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Benutze das Scrollrad um die Lautstärke zu ändern, während du mit dem Mausrad über das EarTrumpet-Symbol fährst</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Benutze das Scrollrad um Lautstärke zu ändern, während das Flyout geöffnet ist</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.el-GR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Έξοδος</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Δεν εντοπίστηκαν συσκευές αναπαραγωγής ήχου</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Αποστολή σχολίων</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Μείκτης έντασης ήχου</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Μείκτης έντασης ήχου</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Φαίνεται να μην έχετε συσκευές αναπαραγωγής ήχου.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Δεν υπάρχουν συσκευές αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Συσκευές αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Συσκευές ηχογράφησης</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Ρυθμίσεις</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Ήχοι</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Συλλογή δεδομένων αντιμετώπισης προβλημάτων</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Η συντόμευσή σας</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Χρήση πάντα της προεπιλεγμένης συσκευής αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Σχετικά με</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Μάθετε περισσότερα</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% ένταση - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Σε σίγαση - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Εφαρμογές</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Κλείσιμο</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Σύμπτυξη για εμφάνιση μόνο της προεπιλεγμένης συσκευής αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Προεπιλεγμένη συντόμευση</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Ανάπτυξη για εμφάνιση όλων των συσκευών αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Γενικά</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Αντιστοιχίστε αυτήν την εφαρμογή σε μία συσκευή αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Άνοιγμα από τη γραμμή εργασιών</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Χρήση του παλαιού εικονιδίου του EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Περισσότερες εντολές</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Σε Σίγαση</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ρυθμίσεις ήχου</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Μείκτης των Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Σχετικά με το πρόσθετο {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Όνομα:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Άνοιγμα Ρυθμίσεων Των Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Αυτό το πρόσθετο μπορεί να αφαιρεθεί χρησιμοποιώντας την εφαρμογή Ρυθμίσεις των Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Απεγκατάσταση</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Διαχείριση</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Παλαιές ρυθμίσεις</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Εκδότης:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ρύθμιση συντομεύσεων και λήψη βοήθειας</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Ρυθμίσεις EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Συντομεύσεις</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Έκδοση:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Εύρεση ρύθμισης</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Κανένα αποτέλεσμα</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Άνοιγμα Μείκτη</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Ανενεργό</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Ενεργό</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Αρχική σελίδα</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Προσεχώς</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Προσεχώς</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Άνοιγμα ρυθμίσεων</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Κλείσιμο</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Καλώς ήλθατε στο EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Το EarTrumpet δεν μπόρεσε να ξεκινήσει</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Μια προβληματική γραμματοσειρά στο σύστημά σας, εμποδίζει το EarTrumpet να ξεκινήσει.\r\n\r\nΆνοιγμα του [https://eartrumpet.app/jmp/fixfonts] τώρα;</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Εναλλαγή σίγασης</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Πολιτική απορρήτου</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Αποστολή δεδομένων κατάρρευσης στην ομάδα EarTrumpet</value>\r\n  </data>\r\n\r\n  <!-- Actions add-on -->\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>και</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Κάνε</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Προσθήκη ενέργειας</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Προσθήκη συνθήκης</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ρύθμιση συντομεύσεων και αυτοματισμών</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Προσθήκη εναύσματος</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Προστέθηκε μια εφαρμογής, αφαιρέθηκε, ξεκινά η αναπαραγωγή ήχου, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} σε {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>προστέθηκε</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>είναι σε σίγαση</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>σταματά να παίζει ήχο</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>αρχίζει να παίζει ήχο</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>αφαιρέθηκε</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>είναι σε μη σίγαση</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>προστέθηκε</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>γίνεται προεπιλεγμένη</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>φεύγει από προεπιλεγμένη</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>αφαιρέθηκε</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>ψευδές</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>αληθές</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>είναι</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>δεν είναι</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>και</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Η ρύθμιση ενός φίλτρου είναι προαιρετική, αλλά σας επιτρέπει να δημιουργήσετε πιο προηγμένες ενέργειες. Όλες οι συνθήκες πρέπει να είναι αληθείς πριν από την εκτέλεση των ενεργειών.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Σύνθετο φίλτρο</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Χρησιμοποιώ το σχετικό μενού αυτής της ενέργειας</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Χρησιμοποιώ το σχετικό μενού αυτής της ενέργειας</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Εάν η προεπιλεγμένη συσκευή αναπαραγωγής είναι ή δεν είναι</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} την προεπιλεγμένη συσκευή</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Προεπιλεγμένη συσκευή αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Προστέθηκε μια συσκευή ήχου, αφαιρέθηκε, ορίστηκε ως προεπιλογή, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>λήγει</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>ξεκινά</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Επεξεργασία</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Ενέργειες Xml EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet ξεκινά ή τερματίζεται</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Κάθε εφαρμογή</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Εξαγωγή</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Αποθηκεύστε ένα αντίγραφο των ενεργειών σας σε ένα αρχείο.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Εφαρμογή προσκηνίου</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Όταν πληκτρολογείται μια συντόμευση</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(επιλέξτε ένα πλήκτρο συντόμευσης)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} πληκτρολογήθηκε</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Εισαγωγή και εξαγωγή</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Εισαγωγή</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Επαναφορά ενός αντιγράφου των ενεργειών σας από ένα αρχείο.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Σίγαση</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Εναλλαγή σίγασης</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Κατάργηση σίγασης</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Ενέργειες</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Νέα ενέργεια</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(προαιρετικό)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Αναπαραγωγή</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Εάν μια διεργασία εκτελείται ή όχι</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(εισάγετε ένα όνομα διεργασίας)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Όταν {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Όνομα διεργασίας (π.χ. σημειωματάριο)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>ξεκινά</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>λήγει</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>δεν εκτελείται</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>εκτελείται</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Μια διεργασία ξεκινά ή τερματίζεται</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(εισάγετε ένα όνομα διεργασίας)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Όταν {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Όνομα διεργασίας (π.χ. σημειωματάριο)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Εγγραφή</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Αφαίρεση</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(απαιτείται)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Σίγαση ή κατάργηση σίγασης μιας εφαρμογής</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} σε {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ορισμός έντασης ήχου μιας εφαρμογής</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} ένταση στο {Volume} στο {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} ένταση στο {Volume} στο {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ορισμός της προεπιλεγμένης συσκευής αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ορισμός του {Device} ως προεπιλογή αναπαραγωγής</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Σίγαση ή κατάργηση σίγασης μιας συσκευής</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} σε {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ορισμός έντασης συσκευής</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} ένταση στο {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} ένταση στο {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ορισμός μιας τοπικής μεταβλητής</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ορισμός ονόματος μεταβλητής)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ορίστε τη μεταβλητή {Text} σε {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Εισάγετε ένα όνομα μεταβλητής (π.χ. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Μείωση</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Αύξηση</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Όρισε</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ή</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Όταν</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Αν μια τοπική μεταβλητή είναι αληθής ή ψευδής</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(εισάγετε ένα όνομα μεταβλητής)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Η μεταβλητή {Text} είναι {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Εισάγετε ένα όνομα μεταβλητής (π.χ. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Διαγραφή</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Επεξεργασία</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Αποθήκευση</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Επιλέξτε μία συσκευή</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Επιλέξτε μια εφαρμογή</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Ακύρωση</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Διαγραφή αυτής της ενέργειας;</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Διαγραφή</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Διαγραφή</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Ακύρωση</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Έξοδος χωρίς αποθήκευση;</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Αποθήκευση</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Έξοδος</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Διαγραφή αυτής της ενέργειας</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Αυτό δεν μπορεί να αναιρεθεί.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Διαγραφή ενέργειας</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Διαγραφή</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Οι εφαρμογές που εμφανίζονται παραπάνω έχουν παίξει ήχο πρόσφατα.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.es-ES.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Salir</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>No se encontraron dispositivos de reproducción</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Enviar feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mezclador de volumen EarTrumpet</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mezclador de volumen tradicional</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Parece que no tienes dispositivos de reproducción.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: No hay dispositivos de reproducción</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de reproducción</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de grabación</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Ajustes</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sonidos</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Recopilar datos para la solución de problemas</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Su atajo</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Usar siempre el dispositivo de reproducción predeterminado</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Acerca de</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Aprende más</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume}% de volumen - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Silenciado - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplicaciones</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Cerrar</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Contraer para mostrar solo el dispositivo de reproducción predeterminado</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Atajo predeterminado</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Expandir para mostrar todos los dispositivos de reproducción</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>General</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Asignar esta aplicación a un dispositivo de reproducción</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Abrir menú flotante de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Usar icono tradicional de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Más comandos</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Silenciado</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ajustes de sonido</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows Tradicional</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Acerca del complemento {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nombre:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Abrir Configuración de Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Este complemento puede ser removido utilizando la aplicación de Configuración de Windows 10.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Desinstalar</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Administración</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Ajustes tradicionales</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Publicado por:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar atajos y obtener ayuda</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Ajustes de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Atajos</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versión:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Buscar ajustes</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Sin resultados</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Abrir Mezclador</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Desactivado</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Activado</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Inicio</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Muy pronto</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Muy pronto</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Abrir opciones</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Cerrar</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Bienvenido a EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet no pudo iniciar</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Una fuente rota en tu sistema está previniendo el inicio de EarTrumpet.\r\n\r\nDeseas abrir [https://eartrumpet.app/jmp/fixfonts] ahora?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Activar/Desactivar sonido</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Politica de privacidad</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Enviar datos de error al equipo de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>y</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Hacer</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Añadir Acción</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Añadir Condición</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar teclas de acceso rápido y automatización</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Añadir disparador</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Una sesión de una aplicación es añadida, removida, empieza a reproducir sonido, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} en {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>es añadido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>es silenciado</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>deja de reproducir sonido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>empieza a reproducir sonido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>es removido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>es desilenciado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>es añadido</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>se convierte en predeterminado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>deja de ser el predeterminado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>es removido</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falso</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>verdadero</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>es</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>no es</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>y</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurar un filtro es opcional, pero te permite armar acciones más avanzadas. Todas las condiciones deben ser verdaderas antes de que las acciones se lleven a cabo.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtro Avanzado</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Yo uso el menú de contexto de esta acción</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Yo uso el menú de contexto de esta acción</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si el dispositivo de reproducción por defecto es o no es</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} el dispositivo por defecto</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Velocidad de reproducción por defecto</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un dispositivo de audio es añadido, removido, establecido como predeterminado, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>comienza</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Acciones de EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet comienza o termina</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Todas las aplicaciones</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportar</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Guardar una copia de tus acciones a un archivo.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplicación en primer plano</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Una tecla de atajo fue presionada</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(escoja su tecla de atajo)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} fue presionada</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importar o exportar</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importar</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaura una copia de tus acciones desde un archivo.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Silenciar</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Activar/Desactivar el audio</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Desilenciar</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Acciones</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nueva acción</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opcional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Repetir</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si un proceso está ejecutándose o no</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introduzca el nombre del proceso)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Cuando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nombre del proceso (ej. bloc de notas)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>comienza</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>no está ejecutándose</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>está ejecutándose</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un proceso comienza o termina</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introduzca el nombre del proceso)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Cuando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nombre del proceso (ej. bloc de notas)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Grabando</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Remover</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(requerido)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silencia o desilencia una aplicación</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} en {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establece el volumen de una aplicación</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volumen a {Volume} en {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volumen por {Volume} en {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Poner por predeterminado la reproducción</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Establecer {Device} como reproducción predeterminada</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silencia o desilencia un dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} en {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establecer el volumen de un dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volumen a {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volumen a {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Establecer una variable local</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Asignar nombre de la variable)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Configurar variable {Text} como {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Ingresa el nombre de la variable (ej. ModoJuego)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Reducir</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Aumentar</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Configurar</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>o</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Cuando</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si la variable local es verdadera o falsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ingresa el nombre de la variable)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>La variable {Text} es {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Ingresa el nombre de la variable (ej. ModoJuego)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Borrar</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Elige un dispositivo</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Elige una aplicación</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>¿Eliminar acción?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>¿Salir sin guardar?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Salir</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Eliminar acción</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>No se puede deshacer.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Eliminar acción</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Remover</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Las aplicaciones mostradas arriba han reproducido sonido recientemente.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Disminuir volumen para todos los dispositivos</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Aumentar volumen para todos los dispositivos</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volumen de la aplicación y preferencias del dispositivo</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mezclador de volumen</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Ajustes del ratón</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Usar la rueda de desplazamiento para cambiar el volumen al pasar por encima del icono de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Usar la rueda de desplazamiento para cambiar el volumen mientras el control flotante está abierto</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.fi-FI.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Lopeta</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Toistolaitteita ei löytynyt</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Lähetä palautetta</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Äänenvoimakkuuden mikseri</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Äänenvoimakkuuden mikseri</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Näyttää siltä, että sinulla ei ole toistolaitteita.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Ei toistolaitteita</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Toistolaitteet</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Tallennuslaitteet</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Asetukset</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Äänet</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Kerää vianmääritystietoja</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Pikanäppäimesi</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Käytä aina oletustoistolaitetta</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Tietoja</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Lue lisää</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% äänenvoimakkuus - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Mykistetty - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sovellukset</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sulje</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Pienennä näyttääksesi vain oletustoistolaitteen</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Oletus pikanäppäin</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Laajenna näyttääksesi kaikki toistolaitteet</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Yleiset</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Määritä tämä sovellus toistolaitteelle</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Avaa tehtäväpalkki</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Käytä vanhaa EarTrumpet-kuvaketta</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Lisää komentoja</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Mykistetty</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ääniasetukset</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windowsin Legacy</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Tietoja {Name} lisäosasta</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nimi:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Avaa Windows-asetukset</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tämä lisäosa voidaan poistaa Windowsin asetukset-sovelluksella.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Hallinta</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Vanhat asetukset</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Julkaisija:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Määritä pikanäppäimet tai hae apua</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet asetukset</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Pikanäppäimet</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versio:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Etsi asetuksia</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Ei hakutuloksia</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Avaa mikseri</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Pois päältä</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Päällä</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Kotisivu</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Tulossa pian</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Tulossa pian</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Avaa asetukset</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Sulje</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Tervetuloa EarTrumpettiin</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpetia ei voitu käynnistää</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Järjestelmäsi rikkoutunut fontti estää EarTrumpettiä käynnistymästä.\r\n\r\nAvaa [https://eartrumpet.app/jmp/fixfonts] nyt?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Kytke mykistys</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Tietosuojakäytäntö</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Lähetä kaatumistiedot EarTrumpet tiimille</value>\r\n  </data>\r\n\r\n  <!-- Actions add-on -->\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>ja</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Suorita</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Lisää toimenpide</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Lisää ehto</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Määritä pikanäppäimet ja automaatio</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Lisää laukaisin</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Sovellus istunto on lisätty, poistettu, alkaa soittaa ääntä...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} kohteessa {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>on lisätty</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>on mykistetty</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>pysäyttää äänentoiston</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>aloittaa äänentoiston</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>on poistettu</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>on mykistämätön</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>on lisätty</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>asetetaan oletukseksi</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>jätetään oletukseksi</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>on poistettu</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>epätosi</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>tosi</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>on</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>ei ole</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>ja</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Suodattimen määrittäminen on vapaaehtoista, mutta sallii edistyneempien toimintojen luomisen. Kaikkien ehtojen on oltava tosi ennen kuin toimintoja suoritetaan.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Edistynyt suodatin</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Käytän tämän toiminnon kontekstivalikon nimikettä</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Käytän tämän toiminnon kontekstivalikon nimikettä</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jos oletussoittolaite on tai ei ole</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} oletuslaite</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Oletus toistolaite</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Äänilaite on lisätty, poistettu, asetettu oletukseksi, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>päättyy</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>käynnistyy</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Muokkaa</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Toiminnot XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet käynnistyy tai sulkeutuu</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Jokainen sovellus</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Vie</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Tallenna kopio toiminnoistasi tiedostoon.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Etualalla oleva sovellus</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Pikanäppäintä painetaan</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(valitse pikanäppäin)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} on kirjoitettu</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Tuo / Vie</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Tuo</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Palauta kopio toiminnoistasi tiedostosta.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Mykistä</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Kytke mykistys</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Poista mykistys</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Toiminnot</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Uusi toiminto</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(valinnainen)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Toisto</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jos prosessi on käynnissä tai ei</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(kirjoita prosessin nimi)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Kun {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Prosessin nimi (esim. muistilehtiö)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>käynnistyy</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>päättyy</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>ei ole käynnissä</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>on käynnissä</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Prosessi käynnistyy tai päättyy</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(anna prosessin nimi)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Kun {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Prosessin nimi (esim. muistilehtiö)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Tallennetaan</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(pakollinen)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Mykistä tai poista mykistys sovelluksessa</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} kohteessa {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Aseta sovelluksen äänenvoimakkuus</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} aseta äänenvoimakkuus {Volume} laitteella {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} äänenvoimakkuus {Volume} laitteelta {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Aseta oletussoittolaite</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Aseta {Device} oletustoistolaitteeksi</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Mykistä tai poista mykistys laitteesta</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} kohteessa {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Aseta laitteen äänenvoimakkuudeksi</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} äänenvoimakkuus {Volume} saakka</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} äänenvoimakkuutta {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Aseta paikallinen muuttuja</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(syötä muuttujan nimi)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Aseta muuttuja {Text} arvoon {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Syötä muuttujan nimi (esim. OnPeliTilassa)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Vähennä</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Lisää</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Aseta</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>tai</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Kun</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jos paikallinen muuttuja on tosi tai epätosi</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(syötä muuttujan nimi)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Muuttuja {Text} on {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Syötä muuttujan nimi (esim. OnPeliTilassa)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Muokkaa</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Tallenna</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Valitse laite</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Valitse sovellus</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Peruuta</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Poista tämä toiminto?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Peruuta</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Poistu tallentamatta?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Tallenna</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Poistu</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Poista tämä toiminto</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tätä ei voi perua.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Poista toiminto</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Poista</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Edellä esitetyt sovellukset ovat soittaneet ääntä äskettäin.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.fr-FR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Quitter</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Aucun périphérique de lecture n'a été trouvé</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Envoyer des commentaires</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mélangeur de volume EarTrumpet</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mélangeur de volume classique</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Il semblerait que vous n’ayez aucun périphérique de lecture.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Aucun périphérique de lecture</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Périphériques de lecture</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Périphériques d'enregistrement</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Paramètres / À propos</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sons</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Collecter les données de diagnostic</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Votre raccourci</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Toujours utiliser le périphérique de lecture par défaut</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>À propos</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>En savoir plus</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} pourcent du volume - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sourdine - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Applications</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fermer</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Réduire pour afficher uniquement le périphérique de lecture par défaut</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Raccourci par défaut</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Développer pour afficher tous les périphériques de lecture</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Général</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Attribuer cette application à un périphérique de lecture</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Ouvrir le menu déroulant d'EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Utiliser l'icône originale d'EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Plus de commandes</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>En sourdine</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Paramètres son</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows Classique</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>À propos du complèment {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nom:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Ouvrir les Paramètres Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ce complèment peut être désinstallé avec l'application Paramètres Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Désinstaller</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Administration</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Paramètres classiques</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Éditeur:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurer les raccourcis et obtenir de l'aide</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Raccourcis</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Version:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Trouver un paramètre</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Aucun résultat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Ouvrir le mélangeur</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Désactivé</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Activé</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Accueil</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Bientôt disponible</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Bientôt disponible</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Ouvrir les paramètres</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Fermer</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Bienvenue à EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet n'a pas pu démarrer</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Une police de caractères défectueuse empêche EarTrumpet de démarrer.\r\n\r\nVoulez-vous ouvrir [https://eartrumpet.app/jmp/fixfonts] maintenant?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Activer/désactiver le mode Muet</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Politique de confidentialité</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Envoyer les données de diagnostic à l'équipe EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>et</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Faire</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Ajouter une action</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Ajouter une condition</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurer les raccourcis clavier et l'automatisation</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Ajouter un déclencheur</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>La session du logiciel a été ajouté, supprimé, commence à jouer des sons, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} sur {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>est ajouté</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>est muet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>arrête la lecture du son</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>commence à jouer un son</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>est supprimé</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>n'est plus muet</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>est ajouté</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>devient la valeur par défaut</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>n'est plus la valeur par défaut</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>est supprimé</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>faux</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>vrai</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>est</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>n'est pas</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>et</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>La configuration d'un filtre est optionnelle, mais vous permet de construire des actions plus avancées. Toutes les conditions doivent être vraies avant que les actions ne soient réalisées.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtre avancé</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>J'utilise cette action de l'élément du menu contextuel</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>J'utilise cette action de l'élément du menu contextuel</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si le périphérique de lecture par défaut n'est ou n'est pas</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} appareil par défaut</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Appareil de lecture par défaut</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un périphérique audio est ajouté, retiré, défini par défaut, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>se termine</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>commence</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Modifier</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Action XML d'EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet démarre ou se termine</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Toutes les applications</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exporter</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Enregistrez une copie de vos actions dans un fichier.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Application au premier plan</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un raccourci clavier a été saisi</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(choisir un raccourci)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} a été saisi</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importer et Exporter</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importer</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaurer une copie de vos actions à partir d'un fichier.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Mettre en sourdine</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Activer/désactiver le mode Muet</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Réactiver le son</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Actions</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nouvelle Action</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(Facultatif)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Lecture</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si un processus est en cours d'exécution ou non</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Entrez le nom du processus)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Lorsque {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nom du processus (par exemple: notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>commence</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>fini</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>n'est pas en cours d'exécution</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>exécution en cours</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un processus commence ou se termine</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(Entrez le nom d'un processus)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Lorsque {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nom du processus (par exemple: notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Enregistrement en cours</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Supprimer</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(requis)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Couper ou réactiver le son d'une application</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} pour {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Définir le volume d'une application</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Volume de {Volume} sur {Device} pour {Option} {App}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume pour {Volume} sur {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Définir le périphérique de lecteur par défaut</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Définir {Device} comme lecteur par défaut</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Couper ou réactiver le son de l'appareil</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} sur {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Définir le volume d'un périphérique</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume à {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} volume de {Device} par {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Définir une variable locale</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(définir le nom de la variable)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Définir la variable {Text} à {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Entrez un nom de variable (par exemple modeJeuActif)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Décrémenter</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Incrémenter</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Définir</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ou</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Quand</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Si une variable locale est vraie ou fausse</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(entrez un nom de variable)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>La variable {Text} est {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Entrez un nom de variable (par exemple modeJeuActif)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Supprimer</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Modifier</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Enregistrer</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Sélectionnez un périphérique</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Sélectionner une application</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuler</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Supprimer l'action ?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Supprimer</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Supprimer</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuler</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Quitter sans enregistrer ?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Enregistrer</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Quitter</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Supprimer l'action</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ceci ne peut pas être annulé.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Supprimer l'action</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Supprimer</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Les applications montrées ci-dessus ont récemment joué un son.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Diminuer le volume pour tous les périphériques</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Augmenter le volume pour tous les périphériques</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volume des applications et préférence des appareils</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mélangeur de volume</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Paramètres de la souris</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Utiliser la molette de la souris pour modifier le volume lorsque votre curseur survole l'icône de EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Utiliser la molette de la souris pour changer le volume quand l'interface est ouverte</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Paramètres de communauté</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Utiliser l'échelle de volume logarithmique</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.he-IL.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>צא</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>לא נמצאו מכשירי השמעה</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>שלח משוב</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>מערבל עוצמה</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>מערבל עוצמה</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>נראה שאין לך שום מכשירי השמעה.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: אין מכשרי השמעה</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>מכשירי השמעה</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>מכשירי הקלטה</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>הגדרות</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>צלילים</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>ליקוט מידע לפתרון בעיות</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>קיצור הדרך שלך</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>תמיד השתמש בברירת המחדל (מכשיר השמעה)</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>אודות</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>למידע נוסף</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\" {Name} - עוצמה %{Volume}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\" {Name} - מושתק\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>יישומים</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>סגור</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>מזער והראה רק את מכשיר ההשמעה שהוא ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>קיצור ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>הרחב כדי להראות את כל מכשירי ההשמעה</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>כללי</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>הקצה את האפליקציה הזאת למכשיר השמעה</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>פתח את EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>השתמש באייקון היחודי של EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>פקודות נוספות</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>מושתק</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>הגדרות צלילים</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows המקורי</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>לגבי התוספת {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>שם:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>פתח הגדרות Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>ניתן להסיר את התוספת הזאת בעזרת אפליקציית ההגדרות של Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>הסר התקנה</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>ניהול</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>הגדרות Legacy</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>מפרסם:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>הגדר קיצורי דרך וקבל עזרה</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>הגדרות EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>קיצורי דרך</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>גירסה:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>חפש הגדרה</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>אין תוצאות</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>פתח מערבל עוצמה</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>כבוי</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>דלוק</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>ראשי</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>יגיע בקרוב</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>יגיע בקרוב</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>פתח הגדרות</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>סגור</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>ברוך הבא ל- EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet לא הצליח להתחיל</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>גופן (font) שבור במערכת שלך מונע מ EarTrumpet מלהתחיל.\r\n\r\nפתח את [https://eartrumpet.app/jmp/fixfonts] עכשיו?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>הפעל/כבה השתקה</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>מדיניות פרטיות</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>שלח מידע על קריסה לצוות של EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>וגם</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>עשה</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>הוסף פעולה</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>הוסף תנאי</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>הגדר קיצורי דרך ואוטומציה</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>הוסף טריגר</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>תהליך של אפליקציה נוסף, הוסר, מתחיל לנגן צליל, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} על {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>כאשר נוסף</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>כאשר הושתק</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>הפסיק לנגן צליל</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>התחיל לנגן צליל</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>כאשר הוסר</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>כאשר Unmuted</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>כאשר נוסף</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>נהיה ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>עוזב את ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>כאשר הוסר</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>(לא נכון) false</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>(נכון) true</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>הוא</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>אינו</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>וגם</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>להגדיר פילטר זה אופציונלי אבל נותן לך לבנות פעולות יותר מתקדמות. כל התנאים חייבים להיות נכונים (true) לפני שפעולות מתבצעות.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>פילטר מתקדם</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>אני משתמש בפריט שבתפריט הפעולות הזה</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>אני משתמש בפריט שבתפריט הפעולות הזה</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>אם מכשיר ההשמעה שהוא ברירת המחדל הוא כן או לא</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} מכשיר ההשמעה ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>מכשיר ההשמעה ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>מכשיר השמעה נוסף, הוסר, הוגדר כברירת מחדל...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>מסתיים</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>מתחיל</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>ערוך</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>פעולות XML EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet התחיל או סיים</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>כל אפליקציה</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>ייצא</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>שמור העתק של הפעולות שלך לקובץ.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>אפליקציית רקע</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>כפתור נלחץ</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(בחר קיצור דרך)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>נלחץ {Hotkey}</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>יבוא ויצוא</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>ייבוא</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>שחזר העתק של הפעולות שלך מקובץ.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>השתק</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>הפעל/כבה השתקה</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>בטל השתקה</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>פעולות</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>פעולה חדשה</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(אופציונאלי)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>השמעה</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>אם תהליך בפעולה או לא</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(הכנס שם תהליך)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>כאשר {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>שם תהליך (לדוג' notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>מתחיל</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>נגמר</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>לא מצליח לרוץ</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>הצליח לרוץ</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>תהליך התחיל או הסתיים</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(הכנס שם תהליך)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>כאשר {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>שם תהליך (לדוג' notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>מקליט</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>הסר</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(דרוש)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>השתק או בטל השתקה של אפליקציה</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} על {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>הגדר את עוצמת השמע של אפליקציה</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} עוצמה ל{Volume} על {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} עוצמה על ידי{Volume} על {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>הגדר את מכשיר ההשמעה ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>הגדר את {Device} בתור מכשיר ההשמעה ברירת המחדל</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>השתק או בטל השתקה למכשיר</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} על {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>הגדר עוצמת קול למכשיר</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} עוצמת קול ל{Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} עוצמת קול על ידי {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>הגדר משתנה מקומי (לוקאלי)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(הגדר שם משתנה)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>הגדר משתנה {Text} ל{Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>הכנס שם משתנה (לדוג' isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>הפחתה</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>גידול</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>הגדר</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>או</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>כאשר</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>אם משתנה לוקאלי מוגדר כ- true או false</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(הכנס שם משתנה)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>המשתנה {Text} הוא {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>הכנס שם משתנה (לדוג' isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>מחק</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>ערוך</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>שמור</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>בחר התקן</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>בחר אפליקציה</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>ביטול</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>מחק את הפעולה הזאת?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>מחק</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>מחק</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>ביטול</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>עזוב בלי לשמור?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>שמירה</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>יציאה</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>הסר פעולה</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>פעולה זו אינה הפיכה.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>הסר פעולה</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>הסר</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>האפליקציות הנראות למעלה השמיעו קול לאחרונה.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>הנמיך עוצמת קול לכל המכשירים</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>הגבר עוצמת לקול לכל המכשירים</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.hr-HR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Izlaz</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Uređaji za reprodukciju nisu pronađeni</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Pošalji povratnu informaciju</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mješač glasnoće</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mješač glasnoće</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Izgleda da nemate uređaje za reprodukciju.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Nema uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Uređaji za reprodukciju</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Uređaji za snimanje</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Postavke</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Zvukovi</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Sakupljaj podatke za rješavanje problema</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Vaš prečac</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Uvijek koristi zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>O aplikaciji</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Saznajte više</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% glasnoća - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Isključen zvuk - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplikacije</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zatvori</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Skupi za prikazivanje samo zadanog uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Zadani prečac</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Proširi za prikazivanje svih uređaja za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Općenito</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Pridruži ovu aplikaciju uređaju za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Otvori prozor na traki zadataka</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Koristi originalnu EarTrumpet ikonu</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Više naredbi</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Isključen zvuk</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Postavke zvuka</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Postavke Windowsa</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>O dodatku {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Ime:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Otvori postavke Windowsa</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ovaj dodatak može biti uklonjen koristeći aplikaciju Windows Postavke.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Deinstaliraj</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Upravljanje</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Postavke baštine</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Izdavač:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfiguriraj postavke i potraži pomoć</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Postavke EarTrumpeta</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Prečaci</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Verzija:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Potraži postavku</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Nema rezultata</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Otvori mješač</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Isključeno</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Uključeno</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Početna stranica</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Stiže uskoro</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Stiže uskoro</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Otvori postavke</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Zatvori</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Dobrodošli u EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet se nije uspio pokrenuti</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Pokvaren font na Vašem sistemu onemogućava EarTrumpetu pokretanje.\r\n\r\nOtvoriti [https://eartrumpet.app/jmp/fixfonts]?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Isključi zvuk</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Pravila privatnosti</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Šalji podatke o padu EarTrumpet timu</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Čini</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Dodaj akciju</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Dodaj uvjet</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Postavi prečace i automatizaciju</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Dodaj okidač</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Sesija aplikacije je dodana, uklonjena, započinje reproducirati zvuk, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodano</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>je isključen zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>prestaje reproducirati zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>počinje reproducirati zvuk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je uklonjeno</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>je uključen zvuk</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodano</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>postaje zadano</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>prestaje biti zadano</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je uklonjeno</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>laž</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>istina</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>je</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>nije</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfiguracija filtera je opcionalna, ali omogućava naprednije akcije. Svi uvjeti moraju biti ispunjeni kako bi se akcije izvršile.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Napredni filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Koristim stavku kontekstnog izbornika ove akcije</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Koristim stavku kontekstnog izbornika ove akcije</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Zadani uređaj za reprodikciju je ili nije</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} zadani uređaj</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Audio uređaj je dodan, uklonjen, postavljen kao zadan, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>gasi se</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>je pokrenut</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet XML akcija</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet je pokrenut ili ugašen</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Svaka aplikacija</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Izvezi</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Spremi kopiju Vaših akcija u datoteku.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplikacija u prvom planu</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Prečac je unesen</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(odaberi prečac)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} je unesen</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Uvezi i izvezi</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Uvezi</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Vrati kopiju Vaših akcija iz datoteke.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Isključi zvuk</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Isključi zvuk</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Uključi zvuk</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Akcije</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nova akcija</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opcionalno)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Reprodukcija</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Ako je proces pokrenut ili ne</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Kada {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>je pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>završava</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>nije pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>je pokrenut</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Proces je pokrenut ili završava</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Kada {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Snimanje</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Ukloni</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(potrebno)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Isključi ili uključi zvuk aplkacije</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi glasnoću aplikacije</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnoća na {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnoća za {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Postavi {Device} kao zadani uređaj za reprodukciju</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Uključi ili isključi zvuk uređaja</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi glasnoću uređaja</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnoća na {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnoća za {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Postavi lokalnu varijablu</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(postavi ime varijable)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Postavi varijablu {Text} na {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Unesi ime varijeable (npr. GameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Smanjivanje</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Povećanje</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Postavi</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ili</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Kada</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Ako je lokalna varijabla istina ili laž</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(unesi ime varijable)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Varijabla {Text} je {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Unesi ime varijeable (npr. GameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Spremi</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Odaberi uređaj</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Odaberi aplikaciju</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Odustani</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Obrisati ovu akciju?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Obriši</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Odustani</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Izaći bez spremanja?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Spremi</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Izađi</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Ukloni ovu akciju</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ovo ne može biti poništeno.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Ukloni akciju</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Ukloni</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Prikazane aplikacije su nedavno reproducirale zvuk.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Smanji glasnoću za sve uređaje</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Povećaj glasnoću za sve uređaje</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Postavke glasnoće aplikacije i postavke uređaja</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mješač glasnoće</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Postavke miša</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Koristite kotačić miša za mijenjanje glasnoće prilikom držanja miša iznad EarTrumpet ikone</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Koristite kotačić miša za mijenjanje glasnoće kada je otvorena potpaleta</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Postavke zajednice</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Koristi logaritamsku skalu glasnoće</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.hu-HU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Kilépés</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Nem találhatóak lejátszóeszközök</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Visszajelzés küldése</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Hangerőkeverő megnyitása</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Hangerőkeverő megnyitása</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Úgy tűnik, hogy nem találhatóak lejátszóeszközök.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Nem található lejátszóeszköz</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Lejátszóeszközök</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Felvevő eszközök</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Beállítások</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Hang</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Diagnosztikai információk összegyűjtése</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Egyéni gyorsbillentyű</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Mindig az alapértelmezett lejátszóeszköz használata</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Névjegy</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>További információ</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Name}: {Volume}%\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Némítva - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Alkalmazások</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Bezár</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Csak az alapértelmezett lejátszóeszköz megjelenítése</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Alapértelmezett gyorsbillentyű</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>További lejátszóeszköz megjelenítése</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Általános</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Az EarTrumpet hozzárendelése egy lejátszóeszközhöz</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Nyissa meg a Tálca sávot</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Régi EarTrumpet ikon használata</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>További parancsok</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Némítva</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Hangbeállítások</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Régi Windows beállítások</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>A(z) {Name} bővítmény névjegye</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Név:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Windows beállítások megnyitása</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ezt a bővítményt a Windows Gépházban tudod eltávolítani.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Eltávolítás</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Kezelés</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Régi beállítások</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Kiadó:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Gyorsbillentyűk beállítása és segítségkérés</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Az EarTrumpet Beállításai</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Gyorsbillentyűk</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Verzió:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Beállítás keresése</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Nincs találat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Hangerőkeverő megnyitása</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Ki</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Be</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Kezdőlap</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Hamarosan</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Hamarosan</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Beállítások megnyitása</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Bezár</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Üdvözli az EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Az EarTrumpet nem tudott elindulni</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Egy hibás betűtípus az Ön rendszerében megakadályozza az EarTrumpet alkalmazás elindulását.\r\n\r\nMost megnyitja a [https://eartrumpet.app/jmp/fixfonts] fájlt?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Elnémítás be- és kikapcsolása</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Adatvédelmi nyilatkozat</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Összeomlási jelentések továbbítása az EarTrumpet készítőinek</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.it-IT.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Esci</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Nessun dispositivo di riproduzione disponibile</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Invia feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mixer volume</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mixer volume</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Sembra che tu non abbia alcun dispositivo di riproduzione.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Nessun dispositivo di riproduzione</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivi di riproduzione</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivi di registrazione</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Impostazioni</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Suoni</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Raccogli dati per la risoluzione dei problemi</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Scorciatoia</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Usa sempre il dispositivo di riproduzione predefinito</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Info</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Scopri di più</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% volume - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Audio Disattivato - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>App</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Chiudi</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Riduci per mostrare solamente il dispositivo di riproduzione predefinito</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Scorciatoia predefinita</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Espandi per mostrare tutti i dispositivi di riproduzione</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Generale</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Assegna questa app a un dispositivo di riproduzione</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Apri riquadro a comparsa nella barra delle applicazioni</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Usa l'icona classica di EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Altri comandi</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Muto</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Impostazioni audio</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Vecchio menu di Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Informazioni sull'add-on {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nome:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Apri Impostazioni di Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Questo add-on può essere rimosso dall'app Impostazioni.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Disinstalla</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Gestione</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Vecchie impostazioni</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Pubblicato da:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configura le scorciatoie e ottieni aiuto</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Impostazioni EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Scorciatoie</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versione:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Cerca nelle impostazioni</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Nessun risultato</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Apri Mixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Disattivato</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Attivato</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Home</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>In arrivo</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>In arrivo</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Apri impostazioni</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Chiudi</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Benvenuto su EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Avvio di EarTrumpet non riuscito</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Un font corrotto nel tuo sistema impedisce l'avvio di EarTrumpet.\r\n\r\nAprire [https://eartrumpet.app/jmp/fixfonts] ora?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Attiva/disattiva muto</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Informativa sulla privacy</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Invia i dati sugli arresti anomali al team EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Azioni</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Aggiungi azione</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Aggiungi condizione</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configura le scorciatoie da tastiera e l'automazione</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Aggiungi trigger</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Una sessione di un'applicazione viene aggiunta, rimossa, riproduce un suono, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} su {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>è aggiunto</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>è silenziato</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>smette di riprodurre un suono</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>inizia a riprodurre un suono</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>è rimosso</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>non è più silenziato</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>è aggiunto</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>diventa il valore predefinito</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>non è più il valore predefinito</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>è rimosso</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falso</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>vero</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>è</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>non è</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurare un filtro è opzionale, ma permette di costruire azioni più avanzate. Tutte le condizioni devono essere verificate prima che le azioni siano realizzate.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtro avanzato</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uso la voce di questa azione dal menu contestuale</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Uso la voce di questa azione dal menu contestuale</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se il dispositivo di riproduzione predefinito è o non è</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} il dispositivo predefinito</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Dispositivo di riproduzione predefinito</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un dispositivo audio viene aggiunto, rimosso, impostato come predefinito, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>inizia</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Modifica</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Azioni XML di EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet si avvia o si arresta</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Tutte le app</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Esporta</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Salva una copia delle tue azioni in un file.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Applicazione in primo piano</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Viene digitata una scorciatoia da tastiera</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(scegli una scorciatoia)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} viene digitato</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importa e esporta</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importa</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Ripristina una copia delle tue azioni da un file.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Disattiva l'audio</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Attiva/disattiva l'audio</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Attiva l'audio</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Azioni</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nuova azione</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(facoltativo)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Riproduzione</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se un processo è o non è in esecuzione</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(inserisci il nome di un processo)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome del processo (ad esempio: notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>viene avviato</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>viene terminato</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>non è in esecuzione</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>è in esecuzione</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un processo si avvia o termina</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(inserisci il nome di un processo)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome del processo (ad esempio: notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Registrazione</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(necessario)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Attiva o disattiva il suono di un'applicazione</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} su {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Imposta il volume di un'applicazione</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} il volume di {App} a {Volume} su {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} il volume di {App} di {Volume} su {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Imposta il dispositivo di riproduzione predefinito</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Imposta {Device} come dispositivo di riproduzione predefinito</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Attiva o disattiva il suono di un dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} su {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Imposta il volume di un dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} al {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} del {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Imposta una variabile locale</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(imposta il nome della variabile)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Imposta la variabile {Text} come {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Inserisci un nome di variabile (ad esempio: modalitàGiocoAttiva)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Decrementa</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Incrementa</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Imposta</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>o</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Quando</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se una variabile locale è vera o falsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(inserisci il nome di una variabile)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>La variabile {Text} è {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Inserisci un nome di variabile (ad esempio: modalitàGiocoAttiva)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Modifica</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Salva</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Scegli un dispositivo</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Scegli un'applicazione</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annulla</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Eliminare questa azione?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annulla</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Uscire senza salvare?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Salvataggio</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Esci</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Elimina questa azione</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Questo non può essere annullato.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Elimina azione</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Le applicazioni mostrate sopra hanno riprodotto un suono di recente.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Diminuisci il volume per tutti i dispositivi</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Aumenta il volume per tutti i dispositivi</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Preferenze del volume dell'app e del dispositivo</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mixer volume</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Impostazioni mouse</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Usa la rotella di scorrimento per cambiare volume al passaggio sull'icona di EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Usa la rotella di scorrimento per cambiare il volume mentre il riquadro a comparsa è aperto</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Impostazioni della community</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Usa scala di volume logaritmica</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ja-JP.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>終了</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>再生デバイスが見つかりません</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>意見を送信</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 音量ミキサー</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>音量ミキサー</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>再生デバイスが接続されてないようです。</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: 再生デバイスなし</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>再生デバイス</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>録音デバイス</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 設定</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>サウンド</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>問題報告用のデータを生成</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>ショートカット</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>常に既定の再生デバイスを使用</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>このソフトの情報</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>詳細はこちら</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} 音量（％） - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>ミュート - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>アプリ</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>閉じる</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>既定の再生デバイスのみ表示</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>既定のショートカット</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>すべての再生デバイスを表示</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>一般</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>このアプリを再生デバイスに登録</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>タスクバーのポップアップを開く</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>以前の EarTrumpet アイコンを使用</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>他のコマンド</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>ミュート</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>サウンド設定</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows の機能</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>アドオン {Name} について</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>名前:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Windows の設定を開く</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>このアドオンは Windows の「設定」からアンインストールできます。</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>アンインストール</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>管理</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>以前の設定</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>提供元:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>ショートカットの設定やヘルプ</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 設定</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>ショートカット</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>バージョン:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>設定を検索</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>結果はありません</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>音量ミキサーを開く</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>無効</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>有効</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>ホーム</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>近日公開</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>近日公開</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>設定を開く</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>閉じる</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet へようこそ</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpetの起動に失敗しました</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>システム上の破損したフォントがEarTrumpet の起動を妨げています。\r\n\r\n修正情報のWebページ [https://eartrumpet.app/jmp/fixfonts] を開きますか？</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>ミュートのオン・オフ</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>プライバシー ポリシー</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>障害データをEarTrumpet チームに送信する</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>かつ</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>動作</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>動作を追加</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>条件を追加</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>ホットキーと自動化の設定</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>発動条件を追加</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>アプリセッションの追加、削除、音声再生の開始時...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} 上 {App} {Option}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>追加時</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>ミュート時</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>再生中の音声の停止時</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>音声の再生時</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>削除された時</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>ミュート解除時</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>追加時</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>既定になった時</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>既定でなくなった時</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>削除時</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>いいえ</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>はい</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>が</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>が以下ではない</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>かつ</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>フィルターの追加はなくても構いませんが、設定すればより複雑な動作が可能です。動作の実行前に、すべての条件が「はい」になる必要があります。</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>高度なフィルター</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>この動作の右クリックメニュー項目を使用</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>この動作の右クリックメニュー項目を使用</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>既定の再生デバイスか、そうでないか</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} 既定のデバイス</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>既定の再生デバイス</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>オーディオデバイスの追加、削除、既定に設定された時...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>終了時</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>開始時</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>編集</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 動作用 XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet の開始または終了時</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>すべてのアプリ</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>エクスポート</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>作成した動作をファイルに保存する。</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>前面のアプリ</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>ホットキー入力時</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ホットキーを選択)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} 入力時</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>インポートとエクスポート</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>インポート</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>動作をファイルから復元する。</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>ミュート</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>ミュートのオン・オフ</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>ミュート解除</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>動作</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>新しい動作</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(任意)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>再生</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>プロセス実行中か、そうでないか</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(プロセス名を入力)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>プロセス名 (例 notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>開始時</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>終了時</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>が実行中ではない</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>が実行中</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>プロセスの開始または終了時</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(プロセス名を入力)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>プロセス名 (例 notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>録音</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>削除</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(必須)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>アプリのミュートまたはミュート解除</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} 上 {Option} {App}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>アプリの音量を設定</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} 上 {Option} {App} の音量を {Volume} へ</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume by {Volume} on {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>既定の再生デバイスを設定</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device}を既定の再生デバイスに設定</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>デバイスのミュートまたはミュート解除</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Device} 上 {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>デバイスの音量を設定</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} の音量を {Volume} へ</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume by {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>ローカル変数を設定</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(変数名の設定)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>変数 {Text} を {Option} に設定</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>変数名を入力 (例 isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>減少</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>増加</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>設定</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>または</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>タイミング</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>ローカル変数が「はい」または「いいえ」</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(変数名を入力)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>変数 {Text} が {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>変数名を入力 (例 isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>削除</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>編集</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>保存</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>デバイスを選択</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>アプリを選択</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>キャンセル</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>この操作を削除しますか ?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>削除</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>削除</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>キャンセル</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>保存せず移動しますか ?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>保存</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>移動する</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>この操作を削除</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>この操作は元に戻せません。</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>操作の削除</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>削除</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>上記のアプリが、最近、音声を再生しました。</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>すべてのデバイスの音量を下げる</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>すべてのデバイスの音量を上げる</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ko-KR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>종료</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>재생 장치 없음</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>피드백 보내기</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>볼륨 믹서</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>볼륨 믹서</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>재생 장치가 없는 것 같습니다.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>이어트럼펫: 재생 장치 없음</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>재생 장치</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>녹음 장치</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>설정</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>소리</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>문제 해결 데이터 수집</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>사용자 설정 단축키</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>항상 기본 재생 장치를 사용</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>정보</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>더 알아보기</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% 볼륨 - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"음소거됨 - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>앱</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>닫기</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>기본 재생 장치만 표시하도록 축소</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>기본 단축키</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>모든 재생 장치를 표시하도록 확장</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>일반</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>이 앱을 재생 장치에 할당</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>작업표시줄 플라이아웃 열기</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>기존 EarTrumpet 아이콘 사용</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>더 많은 명령</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>음소거됨</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>소리 설정</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>윈도우 레거시</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>추가 기능 {Name} 정보</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>이름:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>윈도우 설정 열기</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>이 추가 기능은 윈도우 설정 앱을 사용하여 제거할 수 있습니다.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>제거</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>관리</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>레거시 설정</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>게시자:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>단축키 구성 및 도움 받기</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 설정</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>단축키</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>버전:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>설정 검색</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>검색 결과 없음</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>믹서 열기</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>끔</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>켬</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>홈</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>출시 예정</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>출시 예정</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>설정 열기</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>닫기</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>이어트럼펫을 사용해주셔서 감사합니다.</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet을 실행할 수 없습니다</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>시스템 글꼴이 손상되어 EarTrumpet을 실행할 수 없습니다.\r\n\r\n지금 [https://eartrumpet.app/jmp/fixfonts]를 여시겠습니까?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>음소거 전환</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>개인정보 취급방침</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 팀에게 오류 데이터 전송</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.nl-NL.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Afsluiten</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Geen afspeelapparaten gevonden</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Verstuur feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Volumemixer</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Volumemixer</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Het lijkt erop dat je geen afspeelapparaten hebt.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Geen afspeelapparaten</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Afspeelapparaten</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Opnameapparaten</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Instellingen</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Geluiden</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Probleemoplossingsgegevens verzamelen</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Snelkoppeling</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Altijd het standaard afspeelapparaat gebruiken</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Over</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Meer informatie</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% volume - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Gedempt - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Programma's</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sluiten</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Klap in om alleen standaard afspeelapparaat te tonen</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Standaard sneltoets</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Klap uit om alle afspeelapparaten te tonen</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Algemeen</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Koppel deze app aan een afspeelapparaat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Open taakbalkmenu</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Gebruik oud EarTrumpet-icoon</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Meer opdrachten</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Gedempt</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Geluidsinstellingen</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Oudere Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Over {Name} add-on</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Naam:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Open Windows-instellingen</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Deze add-on kan verwijderd worden in de Instellingen-app van Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Deïnstalleren</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Beheer</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Oude instellingen</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Uitgegeven door:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configureer sneltoetsen en Help</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet-instellingen</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Sneltoetsen</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versie:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Instelling vinden</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Geen resultaten</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Volumemixer openen</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Uit</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Aan</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Start</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Binnenkort beschikbaar</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Binnenkort beschikbaar</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Open instellingen</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Sluiten</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Welkom bij EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet kan niet worden gestart</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Een lettertype veroorzaakt een probleem waardoor EarTrumpet niet kan worden gestart.\r\n\r\nWil je [https://eartrumpet.app/jmp/fixfonts] openen om het probleem op te lossen?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Geluid dempen</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Privacybeleid</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Stuur foutgegevens naar het EarTrumpet-team</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>en</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Uitvoeren</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Actie toevoegen</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Voorwaarde toevoegen</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Stel sneltoetsen en automatisering in</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Trigger toevoegen</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Een app-sessie is toegevoegd, verwijderd, gestart met geluid afspelen, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} op {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>is toegevoegd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>is gedempt</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>stopt met afspelen van geluid</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>begint met afspelen van geluid</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>is verwijderd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>is gedempt</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>is toegevoegd</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>wordt standaard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>behoud standaard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>is verwijderd</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>onwaar</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>waar</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>is</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>is niet</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>en</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Een filter configureren is optioneel maar laat u meer geavanceerde acties bouwen. Alle voorwaarden moeten waar zijn voordat acties worden uitgevoerd.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Geavanceerde Filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ik gebruik het contextmenu item van deze actie</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Ik gebruik het contextmenu item van deze actie</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Als het standaard afspeelapparaat is of niet is</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} het standaardapparaat</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Standaard afspeelapparaat</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Een audio apparaat is toegevoegd, verwijderd, als standaard ingesteld, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>eindigt</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>begint</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Bewerken</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Acties XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet start of stopt</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Iedere app</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exporteer</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Sla een kopie van uw acties op in een bestand.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Voorgrond app</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Een sneltoets is getypt</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(kies een sneltoets)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} is getypt</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importeren en exporteren</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importeer</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Herstel een kopie van uw acties uit een bestand.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Dempen</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Dempen in-/uitschakelen</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Dempen opheffen</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Acties</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nieuwe actie</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(optioneel)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Playback</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Als een proces wordt uitgevoerd of niet</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(voer een procesnaam in)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Wanneer {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Proces naam (bijv. kladblok)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>start</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>eindigt</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>is niet actief</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>is actief</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Een proces begint of eindigt</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(voer een proces naam in)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Als {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Proces naam (bijv. kladblok)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Opnemen</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Verwijder</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(vereist)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>App dempen of dempen opheffen</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} op {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Stel het volume van een app in</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume naar {Volume} op {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume met {Volume} op {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Stel het standaard afspeelapparaat in</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} als standaard instellen</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Apparaat dempen of dempen opheffen</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} op {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Apparaatvolume instellen</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume naar {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume met {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Stel een lokale variabele in</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(stel naam van variabele in)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Zet variabele {Text} naar {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Voer een variabele naam in (bijv. isInGameModus)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Verlagen</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Verhogen</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Instellen</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>of</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Wanneer</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Als een lokale variabele waar of onwaar is</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(voer een variabele naam in)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variabele {Text} is {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Voer een variabele naam in (bijv. isInGameModus)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Verwijderen</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Bewerken</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Opslaan</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Kies een apparaat</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Kies een app</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuleren</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Deze actie verwijderen?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Verwijderen</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Verwijderen</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Annuleren</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Afsluiten zonder op te slaan?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Opslaan</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Afsluiten</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Deze actie verwijderen</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Dit kan niet ongedaan worden gemaakt.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Actie verwijderen</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Verwijder</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Onlangs hebben apps die hierboven getoond zijn geluid afgespeeld.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Volume voor alle apparaten verlagen</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Volume voor alle apparaten verhogen</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volume- en apparaatvoorkeuren van app</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Volumemixer</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Muisinstellingen</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Gebruik het scrollwiel om volume te veranderen terwijl de muisaanwijzer boven het EarTrumpet-icoon staat</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Gebruik het scrollwiel om volume te veranderen wanneer uitklapmenu open is</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Gemeenschap instellingen</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Gebruik logaritmische volumeschaal</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.no-NO.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Lukk</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Ingen avspillingsenheter funnet</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Gi tilbakemelding</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Volumblander</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Volumblander</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Det ser ikke ut som om du har noen avspillingsenheter.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Ingen avspillingsenheter</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Avspillingsenheter</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Opptak enheter</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Innstillinger</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Lyder</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Samle inn feilsøkingsdata</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Din snarvei</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Alltid bruk standard avspillingsenhet</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Om</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Lær mer</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% volum - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Dempet - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Apper</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Lukk</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Skjul for å bare vise standard avspillingsenhet</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Standard snarvei</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Utvid for å vise alle avspillingsenheter</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Generelt</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Tilordne dette programmet til en avspillingsenhet</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Åpne oppgavelinjen-menyen</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Bruk gamle EarTrumpet ikon</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Flere kommandoer</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Dempet</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Lydinnstillinger</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Original windows innstillinger</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Om {Name} tillegg</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Navn:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Åpne Windows-innstillinger</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Dette tillegget kan fjernes ved hjelp av Windows-innstillingsappen.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Avinstaller</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Administrasjon</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Gamle innstillinger</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Utgiver:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfigurer snarveier og få hjelp</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet innstillinger</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Snarveier</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versjon:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Finn en innstilling</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Ingen resultater</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Åpne volumkontroll</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Av</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>På</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Hjem</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Åpne innstillinger</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Lukk</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Velkommen til EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet kunne ikke starte</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>En ødelagt font på systemet ditt hindrer EarTrumpet fra å starte.\r\n\r\nÅpne [https://eartrumpet.app/jmp/fixfonts] nå?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Slå demping av/på</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Retningslinjer for personvern</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Send krasjdata til EarTrumpet-teamet</value>\r\n  </data>\r\n\r\n  <!-- Actions add-on -->\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>og</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Gjør</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Legg til handling</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Legg til betingelse</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Sett opp hurtigtaster og automatisering</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Legg til trigger</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En app-økt er lagt til, fjernet, starter avspilling av lyd, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>er lagt til</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>er dempet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>stopper avspilling av lyd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>begynner å spille lyd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>er fjernet</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>er avdempet</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>er lagt til</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>blir standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>forlater standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>er fjernet</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>usant</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>sant</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>er</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>er ikke</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>og</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfigurering av et filter er valgfritt, men lar deg bygge mer avanserte handlinger. Alle betingelser må være oppfylt før handlinger blir gjennomført.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Avansert filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Jeg bruker hurtigmenyelementet for denne handlingen</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Jeg bruker hurtigmenyelementet for denne handlingen</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis standard avspillingsenhet er eller er ikke</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} standard enhet</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Standard avspillingshastighet</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En lydenhet er lagt til, fjernet, satt som standard, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>slutter</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>starter</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Rediger</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Handlinger XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet starter eller slutter</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Alle apper</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Eksporter</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Lagre en kopi av handlingene dine i en fil.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Forgrunnsprogram</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En hurtigtast er trykket</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(velg en hurtigtast)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} er trykket</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importer og eksporter</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importer</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Gjenopprett en kopi av handlingene dine fra en fil.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Demp</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Slå demping av/på</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Skru av demping</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Handlinger</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Ny handling</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(valgfritt)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Avspilling</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis en prosess kjører eller ikke</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angi et prosessnavn)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Når {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Prosessnavn (f.eks. notisblokk)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>starter</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>slutter</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>kjører ikke</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>kjører</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En prosess starter eller slutter</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angi et prosessnavn)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Når {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Prosessnavn (f.eks. notisblokk)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Opptak</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Fjern</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obligatorisk)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Demp eller slå på lyden av en app</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Sett volumet til en app</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum til {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum med {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Angi standard avspillingsenhet</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Angi {Device} som standard for avspilling</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Demp eller slå på lyden av en enhet</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Angi en enhetsvolum</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum til {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum med {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Angi en lokal variabel</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angi variabelnavn)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Sett variabel {Text} til {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Angi et variabelnavn (f.eks. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Reduser</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Økning</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Sett</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>eller</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Når</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Hvis en lokal variabel er sann eller usann</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(angi variabelnavn)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variabelen {Text} er {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Angi et variabelnavn (f.eks. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Slett</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Rediger</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Lagre</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Velg enhet</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Velg app</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Avbryt</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Slett denne handlingen?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Slett</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Slett</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Avbryt</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Avslutte uten å lagre?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Lagre</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Forlat</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Fjern denne handlingen</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Dette kan ikke angres.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Fjern handling</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Fjern</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Apper vist ovenfor har spilt lyd nylig.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.pl-PL.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Zakończ</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Nie znaleziono żadnych urządzeń odtwarzających</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Prześlij opinię</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mikser głośności</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mikser głośności</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Wygląda na to, że nie masz żadnych urządzeń odtwarzających.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Brak urządzeń odtwarzających</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Urządzenia odtwarzające</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Urządzenia nagrywające</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Ustawienia</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Dźwięki</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Zbieraj dane pomagające w rozwiązywaniu problemów</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Twój skrót</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Zawsze używaj domyślnego urządzenia odtwarzającego</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>O programie</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Dowiedz się więcej</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% głośność - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Wyciszono - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplikacje</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zamknij</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zwiń, aby wyświetlić tylko domyślne urządzenie odtwarzające</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Domyślny skrót</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Rozwiń, aby wyświetlić wszystkie urządzenia odtwarzające</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Ogólne</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Przypisz tę aplikację do urządzenia odtwarzającego</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Otwórz nakładkę głośności paska zadań</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Używaj starej ikony aplikacji</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Więcej komend</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Wyciszono</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ustawienia dźwięku</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Ustawienia systemowe</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>O dodatku {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>NazwaІм'я:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Otwórz Ustawienia systemu Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ten dodatek może zostać usunięty przez Ustawienia systemu Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Odinstaluj</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Zarządzanie</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Ustawienia (wersja Legacy)</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Wydawca:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Skonfiguruj skróty i uzyskaj pomoc</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Ustawienia aplikacji EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Skróty</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Wersja:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Znajdź ustawienie</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Brak wyników</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Otwórz mikser</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Wyłączone</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Włączone</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Strona główna</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Wkrótce</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Wkrótce</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Otwórz ustawienia</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Zamknij</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Witaj w EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Nie udało się uruchomić EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet nie może zostać uruchomiony na Twoim komputerze z powodu uszkodzonych plików czcionek.\r\n\r\nOtworzyć [https://eartrumpet.app/jmp/fixfonts] teraz?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Wycisz</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Polityka prywatności</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Wyślij dane dot. awarii do zespołu EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Wykonaj</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Dodaj regułę</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Dodaj warunek</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Skonfiguruj klawisze skrótów i automatyzację</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Dodaj wyzwalacz</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Sesja aplikacji zostaje dodana, usunięta, odtwarza dźwięk, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>jest dodana</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>jest wyciszona</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>przestaje odtwarzać dźwięk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>rozpoczyna odtwarzać dźwięk</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>jest usunięta</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>nie jest wyciszona</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>jest dodane</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>staje się domyślnym</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>przestaje być domyślnym</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>jest usunięte</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>fałsz</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>prawda</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>jest</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>nie jest</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>i</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfigurowanie filtra jest opcjonalne, ale pozwala na tworzenie bardziej zaawansowanych reguł. Wszystkie warunki muszą być prawdziwe przed wykonaniem reguły.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtr zaawansowany</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Używam pozycji menu kontekstowego tej akcji</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Używam pozycji menu kontekstowego tej akcji</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jeśli domyślne urządzenie odtwarzania jest lub nie jest</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} domyślne urządzenie</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Domyślne urządzenie odtwarzające</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Urządzenie audio zostaje dodane, usunięte, ustawione jako domyślne, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>zostaje zakończony</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>zostaje uruchomiony</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Edytuj</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Plik XML reguł aplikacji EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Aplikacja EarTrumpet zostaje uruchomiona lub zamknięta</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Każda aplikacja</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Eksportuj</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Zapisz kopię swoich reguł do pliku.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplikacja pierwszoplanowa</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Skrót klawiszowy jest użyty</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(wybierz klawisz skrótu)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} jest użyty</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Import i eksport</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importuj</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Przywróć kopię swoich reguł z pliku.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Wycisz</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Przełącz wyciszenie</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Wyłącz wyciszenie</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Reguły</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nowa reguła</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opcjonalnie)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Odtwarzanie</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jeśli proces jest uruchomiony lub nie</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(wprowadź nazwę procesu)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Kiedy {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nazwa procesu (np. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>zostaje uruchomiony</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>zostaje zakończony</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>nie jest uruchomiony</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>jest uruchomiony</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Proces zostaje rozpoczęty lub zamknięty</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(wprowadź nazwę procesu)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Kiedy {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nazwa procesu (np. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Nagrywanie</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Usuń</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(wymagane)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Włącz lub wyłącz wyciszenie aplikacji</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ustaw poziom głośności aplikacji</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} poziom głośności na {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} poziom głośności o {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ustaw domyślne urządzenie odtwarzające</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ustaw {Device} jako domyślne urządzenie odtwarzające</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Włącz lub wyłącz wyciszenie urządzenia</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ustaw poziom głośności urządzenia</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} poziom głośności na {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} poziom głośności o {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ustaw zmienną lokalną</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ustaw nazwę zmiennej)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ustaw zmienną {Text} na {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Wprowadź nazwę zmiennej (np. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Zmniejsz</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Zwiększ</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Ustaw</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>lub</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Gdy</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Jeśli zmienna lokalna jest prawdziwa lub fałszywa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(wprowadź nazwę zmiennej)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Zmienna {Text} jest {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Wprowadź nazwę zmiennej (np. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Usuń</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Edytuj</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Zapisz</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Wybierz urządzenie</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Wybierz aplikację</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Anuluj</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Usunąć tę regułę?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Usuń</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Usuń</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Anuluj</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Wyjść bez zapisywania?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Zapisz</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Wyjdź</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Usuń tę regułę</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tego nie można cofnąć.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Usuń regułę</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Usuń</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Aplikacje pokazane powyżej odtwarzały ostatnio dźwięk.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Zmniejsz głośność dla wszystkich urządzeń</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Zwiększ głośność dla wszystkich urządzeń</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Ustawienia głośności aplikacji i urządzeń</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mikser głośności</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Ustawienia myszy</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Użyj kółka przewijania, aby zmienić głośność, gdy kursor myszy znajduje się nad ikoną EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Użyj koła przewijania, aby zmienić głośność, gdy otwarte są ustawienia w zasobniku systemowym</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Ustawienia społeczności</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Użyj logarytmicznej skali głośności</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.pt-BR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Sair</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Não foram detectados dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Enviar comentários</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mixer de Volume</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mixer de Volume</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Não há dispositivo de reprodução disponível.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Não há dispositivo de reprodução</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de gravação</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Configurações</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sons</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Coletar informações</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Atalho</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Utilizar sempre o dispositivo padrão de reprodução</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Sobre</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Mais informações</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} por cento de volume {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Mudo {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplicativos</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fechar</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fechar para visualizar apenas o dispositivo padrão de reprodução</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Atalho padrão</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Abrir para visualizar todos os dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Geral</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Associar este aplicativo a um dispositivo de reprodução</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Mostrar informações do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Usar o ícone antigo do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Mais comandos</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Mudo</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Configurações de som</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Mais configurações</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Sobre o plug-in {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nome:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Abrir Configurações do Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Este plug-in pode ser removido através das Configurações do Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Desinstalar</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Gerenciamento</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Mais configurações</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Fornecedor:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar atalhos e pedir ajuda</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Configurações do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Atalhos</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versão:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Procurar uma configuração</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Sem resultados</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Abrir Mixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Desligar</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Ligar</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Início</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Em breve</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Em breve</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Abrir configurações</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Fechar</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Bem-vindo ao EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>O EarTrumpet não pode ser iniciado</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Uma fonte danificada no sistema está impedindo a execução do EarTrumpet.\r\n\r\nDeseja abrir [https://eartrumpet.app/jmp/fixfonts] agora?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Ativar/Desativar Som</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Políticas de Privacidade</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Enviar os dados do erro para a equipe do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Faça</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Adicionar ação</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Adicionar Condições</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar teclas de atalho e automação</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Adicionar novo disparador</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uma sessão de aplicativo é adicionada, removida, inicia reprodução do som, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} no {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>foi adicionado</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>ativou mudo</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>parar a reprodução de som</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>iniciar a reprodução de som</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>foi removido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>desativou mudo</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>foi adicionado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>tornar-se padrão</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>deixar de ser padrão</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>foi removido</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falso</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>verdadeiro</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>é</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>não é</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurar um filtro é opcional, mas permite construir ações mais avançadas. Todas as condições devem ser verdadeiras para que as ações sejam realizadas.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtro Avançado</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uso esta ação no contexto do menu do item</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Uso esta ação no contexto do menu do item</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se é ou não o dispositivo de reprodução padrão</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} o dispositivo padrão</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Dispositivo de reprodução padrão</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Um dispositivo de áudio foi adicionado, removido, definido como padrão, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>inicia</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Ações em XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet inicia ou termina</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Todos os aplicativos</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportar</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Salvar cópia das suas ações em um arquivo.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplicativo em primeiro plano</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uma tecla de atalho foi pressionada</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(escolha uma tecla de atalho)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} foi pressionada</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importar / Exportar</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importar</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaurar cópia das suas ações em um arquivo.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Silenciar</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Ativar/Desativar mudo</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Tirar do silencioso</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Ações</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nova Ação</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(Opcional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Reprodução</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se um processo estiver em execução ou não</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(digite um nome do processo)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome do processo (ex.: notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>inicia</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>não está sendo executado</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>está sendo executado</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Um processo inicia ou termina</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(digite um nome do processo)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome do processo (ex.: notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Gravando</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Excluir</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obrigatório)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silencia ou retira do silencioso um aplicativo</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} no {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir o volume de um aplicativo</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} alterar volume para {Volume} no {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume em {Volume} no {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir o dispositivo de reprodução padrão</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Definir {Device} como dispositivo de reprodução padrão</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Silencia ou retira do silencioso um dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} no {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir volume do dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} alterar volume para {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume em {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Selecionar uma variável local</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(definir nome da variável)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Definir variável {Text} para {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Insira um nome de variável (ex.: noModoJogo)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Diminuir</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Aumentar</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Definir</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ou</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Quando</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Quando uma variável local tem uma condição verdadeira ou falsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(insira o nome da variável)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>A variável {Text} é {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Insira um nome de variável (ex.: noModoJogo)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Excluir</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Salvar</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Escolha um dispositivo</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Selecione um aplicativo</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Excluir ação?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Excluir</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Excluir</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Sair sem salvar?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Salvar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Sair</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Excluir está ação</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Essa ação não pode ser desfeita.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Excluir ação</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Excluir</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Os aplicativos exibidos acima reproduziram som recentemente.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Diminuir volume para todos os dispositivos</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Aumentar volume para todos os dispositivos</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Preferências do dispositivo e volume do aplicativo</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mixer de Volume</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Configurações do Mouse</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Use a roda de rolagem para alterar o volume enquanto estiver pairando sobre o ícone do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Use a roda de rolagem para alterar o volume enquanto o submenu estiver aberto</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Configurações da comunidade</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Usar a escala de volume logarítmica</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.pt-PT.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Sair</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Não foram encontrados dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Enviar comentário</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Misturador de Volume</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Misturador de Volume</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Não foram encontrados dispositivos de reprodução ativos.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Sem dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispositivos de gravação</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Definições</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sons</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Recolher dados para resolução de problemas</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Atalho</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Usar sempre o dispositivo de reprodução predefinido</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Sobre</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Mais informações</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume}% volume - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Sem Som - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplicações</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fechar</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fechar tudo e mostrar apenas o dispositivo predefinido</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Atalho predefinido</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Abrir para mostrar todos os dispositivos de reprodução</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Geral</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Atribuir esta aplicação a um dispositivo de reprodução</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Abrir menu de volume</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Usar ícone clássico do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Mais comandos</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Sem som</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Definições de som</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Opções clássicas do Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Sobre a extensão {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nome:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Abrir Definições do Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Esta extensão pode ser removida através das Definições do Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Desinstalar</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Gestão</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Definições clássicas</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Publicado por:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar atalhos e obter ajuda</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Definições do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Atalhos</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versão:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Procurar uma definição</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Sem resultados</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Abrir Misturador</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Desligado</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Ligado</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Início</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Brevemente disponível</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Brevemente disponível</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Abrir definições</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Fechar</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Bem-vindo ao EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>O EarTrumpet não conseguiu iniciar</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Existe um tipo de letra inválido no sistema que está a impedir o EarTrumpet de iniciar.\r\n\r\nAbrir [https://eartrumpet.app/jmp/fixfonts] agora?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Ativar/Desativar Som</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Políticas de Privacidade</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Enviar relatório de erros para a equipa do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Executar</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Adicionar ação</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Adicionar condição</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurar teclas de atalho e automatização</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Adicionar acionador</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uma sessão da aplicação é adicionada, removida, inicia reprodução de som, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} em {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>é adicionado</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>o som é desativado</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>para de reproduzir som</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>inicia reprodução de som</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>é removido</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>o som é ativado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>é adicionado</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>tornar-se predefinido</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>deixa de ser predefinido</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>é removido</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falso</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>verdadeiro</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>é</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>não é</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>e</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurar um filtro é opcional, mas permite construir ações mais avançadas. Todas as condições devem ser verdadeiras para que as ações sejam realizadas.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtro Avançado</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uso esta ação no contexto do menu do item</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Uso esta ação no contexto do menu do item</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se o dispositivo de reprodução é ou não o predefinido</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} o dispositivo predefinido</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Dispositivo de reprodução predefinido</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Um dispositivo de som é adicionado, removido, predefinido, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>inicia</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Ações do EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>O EarTrumpet inicia ou termina</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Todas as aplicações</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportar</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Guardar uma cópia das suas ações num ficheiro.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplicação em primeiro plano</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uma tecla de atalho foi pressionada</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(escolha uma tecla de atalho)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} foi pressionado</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importar e Exportar</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importar</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaurar uma cópia das suas ações a partir de um ficheiro.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Desativar som</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Ativar/Desativar Som</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Ativar som</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Ações</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Nova ação</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opcional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Reprodução</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se um processo estiver em execução ou não</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(insira um nome de processo)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome do processo (ex.: notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>inicia</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>termina</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>não está a ser executado</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>está a ser executado</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Um processo inicia ou termina</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(insira um nome de processo)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Quando {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nome do processo (ex.: notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>A gravar</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Remover</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obrigatório)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ativar ou desativar o som de uma aplicação</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} em {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir o volume de uma aplicação</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} alterar volume para {Volume} em {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume a {Volume} em {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Predefinir dispositivo de reprodução</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Predefinir {Device} como dispositivo de reprodução</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Activar ou desativar som de um dispositivo de som</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} em {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir volume do dispositivo</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} alterar volume para {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume a {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Definir uma variável local</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(defina o nome da variável)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Definir variável {Text} para {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Insira um nome de variável (ex.: noModoJogo)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Diminuir</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Aumentar</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Definir</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>ou</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Quando</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Se uma variável local é verdadeira ou falsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(insira um nome de variável)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>A variável {Text} é {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Insira um nome de variável (ex.: noModoJogo)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Editar</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Escolha um dispositivo</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Escolha uma aplicação</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Eliminar esta ação?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Eliminar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancelar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Sair sem guardar?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Guardar</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Sair</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Remover esta ação</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Isto não pode ser desfeito.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Remover Ação</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Remover</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>As aplicações mostradas acima reproduziram som recentemente.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Diminuir o volume em todos os dispositivos</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Aumentar o volume em todos os dispositivos</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volume das aplicações e preferências do dispositivo</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Misturador de volume</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Definições do rato</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Usar a roda do rato para alterar o volume enquanto pairar sobre o ícone do EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Usar a roda do rato para alterar o volume enquanto a lista de opções estiver aberta</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Definições da comunidade</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Usar escala de volume logarítmica</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Exit</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>No playback devices found</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Send feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Volume Mixer</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Volume Mixer</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>It doesn't look like you have any playback devices.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: No playback devices</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Playback devices</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Recording devices</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Settings</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sounds</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Collect troubleshooting data</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Your shortcut</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Always use the default playback device</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>About</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Learn more</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% volume - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Muted - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Apps</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Close</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Collapse to show only the default playback device</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Default shortcut</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Expand to show all playback devices</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>General</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Assign this app to a playback device</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Open Taskbar flyout</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Use legacy EarTrumpet icon</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>More commands</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Muted</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Sound settings</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows Legacy</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>About {Name} add-on</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Name:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Open Windows Settings</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>This add-on can be removed using the Windows Settings app.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Uninstall</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Management</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Legacy settings</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Publisher:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configure shortcuts and get help</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Settings</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Shortcuts</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Version:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Find a setting</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>No results</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Open Mixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Off</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>On</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Home</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Coming soon</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Coming soon</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Open settings</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Close</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Welcome to EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet couldn't start</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>A broken font on your system is preventing EarTrumpet from starting.\r\n\r\nOpen [https://eartrumpet.app/jmp/fixfonts] now?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Toggle mute</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Privacy policy</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Send crash data to the EarTrumpet team</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>and</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Do</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Add action</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Add condition</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Set up hotkeys and automation</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Add trigger</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>An app session is added, removed, starts playing sound, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} on {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>is added</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>is muted</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>stops playing sound</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>begins playing sound</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>is removed</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>is unmuted</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>is added</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>becomes default</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>leaves default</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>is removed</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>false</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>true</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>is</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>is not</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>and</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configuring a filter is optional but lets you build more advanced actions. All conditions must be true before actions are carried out.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Advanced Filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>I use this action's context menu item</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>I use this action's context menu item</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>If the default playback device is or is not</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} the default device</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Default playback device</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>An audio device is added, removed, set as default, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>ends</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>starts</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Edit</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Actions XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet starts or ends</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Every app</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Export</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Save a copy of your actions to a file.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Foreground app</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>A hotkey is typed</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(choose a hotkey)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} is typed</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Import and export</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Import</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restore a copy of your actions from a file.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Mute</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Toggle mute</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Unmute</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Actions</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>New action</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(optional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Playback</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>If a process is running or not</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(enter a process name)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>When {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Process name (e.g. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>starts</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>ends</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>is not running</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>is running</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>A process starts or ends</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(enter a process name)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>When {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Process name (e.g. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Recording</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Remove</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(required)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Mute or unmute an app</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} on {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Set the volume of an app</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume to {Volume} on {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volume by {Volume} on {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Set the default playback device</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Set {Device} as playback default</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Mute or unmute a device</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} on {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Set a device volume</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume to {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volume by {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Set a local variable</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(set variable name)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Set variable {Text} to {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Enter a variable name (e.g. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Decrement</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Increment</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Set</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>or</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>When</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>If a local variable is true or false</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(enter a variable name)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variable {Text} is {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Enter a variable name (e.g. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Delete</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Edit</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Save</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Choose a device</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Choose an app</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancel</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Delete this action?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Delete</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Delete</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Cancel</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Leave without saving?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Save</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Leave</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Remove this action</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>This cannot be undone.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Remove action</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Remove</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Apps shown above have played sound recently.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Decrease volume for all devices</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Increase volume for all devices</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>App volume and device preferences</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Volume mixer</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Mouse settings</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Use the scroll wheel to change volume while hovering over the EarTrumpet icon</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Use the scroll wheel to change volume while the flyout is open</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Community settings</value>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Use logarithmic volume scale</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ro-RO.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Ieșire</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Nu au fost găsite dispozitive de redare</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Trimiteți feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mixer de volum</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mixer de volum</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Se pare că nu ai nici un dispozitiv de redare.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Nu există dispozitive de redare</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispozitive de redare</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Dispozitive de înregistrare</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Setări</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sunete</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Colectează date de depanare</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Comandă rapidă</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Folosește întotdeauna dispozitivul de redare implicit</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Despre</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Află mai multe</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% volum - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Amuțit - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplicaţii</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Închide</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Restrânge pentru a afișa doar dispozitivul implicit de redare</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Comanda rapidă implicită</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Extinde pentru a arăta toate dispozitivele de redare</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>General</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Atribuie această aplicație unui dispozitiv de redare</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Deschide bara de activități</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Folosește pictograma veche a EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Mai multe comenzi</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Amuțit</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Setări de sunet</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Moştenire Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Despre supliment {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Nume:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Deschide setările Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Acest supliment poate fi eliminat folosind aplicația Windows Settings.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Dezinstalează</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Administrare</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Setări vechi</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Producător:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurați comenzi rapide și obțineți ajutor</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Setări EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Comenzi rapide</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versiune:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Găseşte o setare</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Nici un rezultat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Deschide Mixer</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Oprit</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Pornit</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Acasă</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>În curând</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>În curând</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Deschide setările</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Închide</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Bine ai venit la EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet nu a putut porni</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Font-ul stricat din sistemul tău împiedică Pornirea EarTrumpet-ului.\r\n\r\nDeschide [https://eartrumpet.app/jmp/fixfonts] acum?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Activează/dezactivează mute</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Politica de confidențialitate</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Trimite datele de eroare echipei EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>şi</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Acționează</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Adaugă acţiune</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Adauga conditie</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Configurați tastele rapide și automatizarea</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Adăugare declanșator</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>O sesiune de aplicații este adăugată, eliminată, începe redarea sunetului, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} pe {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>se adaugă</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>este amuțit</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>oprește redarea sunetului</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>începe redarea sunetului</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>se elimină</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>este neamuțit</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>se adaugă</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>devine implicit</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>părăsește implicit</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>se elimină</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>fals</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>adevărat</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>este</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>nu este</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>şi</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Configurarea unui filtru este opțională, dar vă permite să construiți acțiuni mai avansate. Toate condițiile trebuie să fie adevărate înainte ca acțiunile să fie efectuate.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Filtru avansat</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Folosesc acest element din meniul contextual al acţiunii</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Folosesc acest element din meniul contextual al acţiunii</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Dacă dispozitivul de redare implicit este sau nu</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} dispozitivul implicit</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Dispozitiv de redare implicit</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un dispozitiv audio este adăugat, eliminat, setat ca implicit, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>se termină</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>începe</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Editează</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Acțiuni EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet începe sau se termină</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Orice aplicație</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportă</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Salvați o copie a acțiunilor dvs. într-un fișier.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplicația din prim-plan</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>S-a tastat o tastă rapidă</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(alegeți o tastă rapidă)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} este tastată</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Import și export</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importați</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Restaurați o copie a acțiunilor dvs. dintr-un fișier.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Dezactivează sunet</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Activează/dezactivează sunetul</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Activați sunetul</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Acțiuni</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Acțiune nouă</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(opțional)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Redare</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Dacă un proces se execută sau nu</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introduceți un nume de proces)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Când {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nume proces (de ex. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>pornește</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>se oprește</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>nu rulează</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>se execută</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Un proces pornește sau se oprește</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introduceți un nume de proces)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Când {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Nume proces (de ex. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Se înregistrează</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Eliminare</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obligatoriu)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Dezactivați sau activați sunetul unei aplicații</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} pe {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Setați volumul unei aplicații</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum la {Volume} pe {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volum de {Volume} pe {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Setați dispozitivul implicit de redare</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Setează {Device} ca implicit pentru redare</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Dezactivați sau activați sunetul unui dispozitiv</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} pe {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Setaţi volumul dispozitivului</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum la {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volum de {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Setaţi o variabilă locală</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(setează numele variabilei)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Setează variabila {Text} la {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Introduceți un nume de variabilă (de ex. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Decrementare</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Incrementare</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Setează</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>sau</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Când</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Dacă o variabilă locală este adevărată sau falsă</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(introduceți un nume de variabilă)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variabila {Text} este {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Introduceți un nume de variabilă (de ex. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Ștergere</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Editare</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Salvare</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Alegeți un dispozitiv</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Alegeţi o aplicație</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Anulare</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Ștergeți această acțiune?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Ștergere</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Ștergere</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Anulare</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Ieșiți fără a salva?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Salvare</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Ieșire</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Eliminați această acțiune</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Această acțiune nu poate fi anulată.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Eliminați această acțiune</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Eliminare</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Aplicaţiile de mai sus au difuzat sunet recent.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Scădere volum pentru toate dispozitivele</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Mărește volumul pentru toate dispozitivele</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Volum aplicație și preferințe dispozitiv</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Mixer de volum</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Setări mouse</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Utilizați rotița de derulare pentru a schimba volumul în timp ce planați peste pictograma EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Utilizați rotița de derulare pentru a schimba volumul cât timp este deschis flyout-ul</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ru-RU.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Выход</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Не найдено устройств воспроизведения</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Отправить отзыв</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Микшер громкости EarTrumpet</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Старый микшер громкости Windows</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Не похоже, что у вас есть какое-либо устройство воспроизведения.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: нет устройств воспроизведения</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Устройства воспроизведения</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Записывающие устройства</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Параметры EarTrumpet / О приложении</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Звуки</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Сбор данных для устранения неполадок</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ваше сочетание клавиш</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Всегда использовать устройство воспроизведения по умолчанию</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>О приложении</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Узнать больше</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} процент громкости - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Без звука - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Приложения</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Закрыть</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Свернуть, чтобы показать только устройство воспроизведения по умолчанию</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Сочетание клавиш по умолчанию</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Развернуть, чтобы показать все устройства воспроизведения</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Общее</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Назначить приложению устройство воспроизведения</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Открыть всплывающее окно EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Использовать старую иконку EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Больше команд</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Без звука</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Параметры звука</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Старое меню Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>О дополнении {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Название:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Открыть Параметры Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Это дополнение может быть удалено в приложении Параметры Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Управление</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Устаревшие параметры</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Издатель:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Настроить сочетания клавиш и получить справку</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Параметры EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Сочетания клавиш</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Версия:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Найти параметр</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Нет результатов</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Открыть микшер</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Выкл</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Вкл</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Главная</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Скоро появится</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Скоро появится</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Открыть параметры</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Закрыть</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Добро пожаловать в EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Произошла ошибка при запуске EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Невозможно запустить EarTrumpet, так как один из шрифтов используемый этой программой повреждён.\r\n\r\nПерейти по ссылке [https://eartrumpet.app/jmp/fixfonts] сейчас?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Без звука</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Политика конфиденциальности</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Отправить данные об ошибке разработчикам EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>и</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Выполнить</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Добавить действие</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Добавить условие</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Настроить горячие клавиши и автоматизацию</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Добавить условие</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Сеанс приложения добавляется, удаляется, начинает воспроизводиться звук, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} на {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>добавлен</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>заглушен</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>прекращает воспроизведение звука</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>начинает воспроизведение звука</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>удалено</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>звук выключен</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>добавлено</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>стало \"по умолчанию\"</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>перестало быть \"по умолчанию\"</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>удалено</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>ложь</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>правда</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>это</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>это не</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>и</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Настройка фильтра является необязательной, но позволяет создавать более продвинутые действия. Все условия должны быть \"правдой\" перед выполнением действий.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Расширенный фильтр</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Я использую пункт контекстного меню от этого действия</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Я использую пункт контекстного меню от этого действия</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Если устройство для воспроизведения по умолчанию является/не является</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} устройство по умолчанию</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Устройство воспроизведения по умолчанию</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Аудио устройство добавлено, удалено, установлено по умолчанию, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>завершается</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>запускается</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Редактировать</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Действия EarTrumpet в формате XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Запушен\\завершен EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Каждая программа</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Экспорт</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Сохранить копию ваших действий в файл.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Активная программа</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Нажато {Hotkey}</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(выберите горячую клавишу)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Нажато {Hotkey}</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Импорт и экспорт</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Импорт</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Восстановить копию ваших действий из файла.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Без звука</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Вкл/выкл звук</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Вкл. звук</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Действия</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Новое действие</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(необязательно)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Воспроизведение</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Если процесс запущен или не запущен</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(введите название процесса)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Когда {Text} - {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Название процесса (например notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>запускается</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>завершается</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>не запущено</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>запущено</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Процесс запускается или завершается</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(введите название процесса)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Когда {Text} - {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Название процесса (например notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Запись</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(обязательно)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Выкл. или вкл. звук программы</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установить громкость программы</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} громкость {App} на {Volume} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} громкость {App} на {Volume} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установить устройство воспроизведения по умолчанию</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Установить {Device} как устройство воспроизведения по умолчанию</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Отключить или включить звук устройства</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установить громкость устройства</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} громкость на {Volume} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} громкость на {Volume} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установить локальную переменную</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(задайте имя переменной)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Установить значение {Option} для переменной {Text}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Введите имя переменной (например, isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Уменьшить</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Увеличить</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Установить</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>или</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Когда</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Если локальная переменная правда или ложь</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(введите имя переменной)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Переменная {Text} — {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Введите имя переменной (например, isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Редактировать</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Сохранить</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Выбрать устройство</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Выбрать программу</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Отмена</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Удалить это действие?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Отмена</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Закрыть без сохранения?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Сохранить</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Закрыть</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Удалить действие</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Это действие не может быть отменено.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Убрать действие</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Программы выше недавно проигрывали звук.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Уменьшить громкость для всех устройств</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Увеличить громкость для всех устройств</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Параметры устройств и громкости приложений</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Микшер громкости</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Параметры мыши</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Использовать колесо прокрутки для изменения громкости при наведении на иконку EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Использовать колесо прокрутки для изменения громкости при открытом всплывающем окне</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Параметры от сообщества</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Использовать логарифмическую шкалу громкости</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.sl-SI.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Izhod</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Ni bilo mogoče najti predvajalnih naprav</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Pošlji povratne informacije</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Mešalnik glasnosti</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Mešalnik glasnosti</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Videti je, da nimate predvajalnih naprav.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: ni predvajalnih naprav</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Predvajalne naprave</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Snemalne naprave</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Nastavitve</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Zvoki</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Zberi podatke za reševanje težav</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Vaša bližnjica</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Vedno uporabi privzeto predvajalno napravo</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>O programu</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Več informacij</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Glasnost: {Volume}% - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zvok izklopljen - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Aplikacije</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Zapri</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Strni za prikaz izključno privzete predvajalne naprave</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Privzeta bližnjica</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Razširi za prikaz vseh predvajalnih naprav</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Splošno</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Dodeli to aplikacijo predvajalni napravi</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Odpri pojavni meni opravilne vrstice</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Uporabi starejšo ikono EarTrumpeta</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Več ukazov</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Zvok izklopljen</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Nastavitve zvoka</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Starejši Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>O dodatku {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Ime:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Odpri nastavitve Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ta dodatek lahko odstranite z aplikacijo Windows Nastavitve.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Odstrani</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Upravljanje</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Stare nastavitve</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Izdajatelj:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Nastavitve bližnjic in pomoč</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Nastavitve za EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Bližnjice</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Različica:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Najdi nastavitev</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Ni rezultatov</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Odpri mešalnik</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Izklopljeno</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Vklopljeno</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Domov</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Kmalu na voljo</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Kmalu na voljo</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Odpri nastavitve</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Zapri</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Pozdravljeni v EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Programa EarTrumpet ni bilo mogoče zagnati</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Pokvarjena pisava na vašem sistemu preprečuje, da bi se EarTrumpet zagnal.\r\n\r\nAli želite zdaj odpreti [https://eartrumpet.app/jmp/fixfonts]?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Preklopi izklopljeni zvok</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Pravilnik o zasebnosti</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Pošlji podatke o sesutju programerjem EarTrumpeta</value>\r\n  </data>\r\n\r\n  <!-- Actions add-on -->\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>in</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Izvedi</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Dodaj dejanje</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Dodaj pogoj</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Nastavi bližnjične tipke in avtomatizacijo</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Dodaj sprožilec</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Seja aplikacije se doda, odstrani, začne predvajati zvok, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodana</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>je utišano</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>preneha predvajati zvok</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>začne predvajati zvok</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je odstranjena</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>je utišana</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>je dodana</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>postane privzeta</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>preneha biti privzeta</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>je odstranjena</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>false</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>true</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>je</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>ni</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>in</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfiguracija filtra ni obvezna, vendar vam omogoča oblikovanje naprednejših dejanj. Vsi pogoji morajo biti true, preden dejanja izvedejo.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Napredni filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Uporabljam element kontekstnega menija tega dejanja</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Uporabljam element kontekstnega menija tega dejanja</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Če privzeta naprava za predvajanje je ali ni</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} privzeta naprava</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Privzeta predvajalna naprava</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Zvočna naprava je dodana, odstranjena, nastavljena na privzeto, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>konča</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>začne</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Trumpet Dejanja XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet se začne ali konča</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Vsaka aplikacija</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Izvozi</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Shranite kopijo vaših dejanj v datoteko.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Aplikacija v ospredju</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Bližnjična tipka je pritisnjena</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(izberi bližnjično tipko)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} je pritisnjena</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Uvoz in izvoz</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Uvoz</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Shranite kopijo vaših dejanj v datoteko.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Utišaj</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Preklopi za utišanje</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Vklopi zvok</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Dejanja</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Novo dejanje</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(neobvezno)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Predvajanje</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Če proces teče ali ne</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(vnesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Ko se {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. beležnica)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>začne</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>konča</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>se ne izvaja</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>se izvaja</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Proces začne ali konča</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(vnesite ime procesa)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Ko se {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Ime procesa (npr. beležnica)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Snemanje</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Odstrani</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obvezno)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Vklopi ali izklopi zvok aplikacije</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavi glasnost aplikacije</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnost na {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} glasnost za {Volume} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavi privzeto predvajalno napravo</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Nastavi {Device} za privzeto predvajalno napravo</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Vklopi ali izklopi zvok naprave</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} na {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavi lastnost naprave</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnost na {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} glasnost za {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Nastavite lokalno spremenljivko</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(nastavite ime spremenljivke)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Nastavit spremenljivko {Text} na {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Vnesite ime spremenljivke (npr. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Zmanjšaj</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Povečaj</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Nastavi</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>or</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Ob dejanju</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Ko je lokalna spremenljivka true ali false</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(vnesite ime spremenljivke)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Spremenljivka {Text} je {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Vnesite ime spremenljivke (npr. isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Izbriši</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Uredi</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Shrani</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Izberi napravo</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Izberi aplikacijo</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Prekliči</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Izbriši to dejanje?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Izbriši</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Izbriši</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Prekliči</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Zapri brez shranjevanja?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Shrani</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Zapri</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Odstrani to dejanje</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>To dejanje ne more biti razveljavljeno.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Odstrani dejanje</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Odstrani</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Zgoraj prikazane aplikacije so pred kratkim predvajale zvok.</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.sv-SE.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Avsluta</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Hittade inga uppspelningsenheter</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Skicka feedback</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Volymmixer</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Volymmixer</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Det ser inte ut som att du har några uppspelningsenheter.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Inga uppspelningsenheter</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Uppspelningsenheter</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Inspelningsenheter</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Inställningar</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Ljud</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Samla in felsökningsdata</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Din genväg</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Använd alltid standardenheten för uppspelning</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Om</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Lär dig mer</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume} % volym - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Ljud av - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Appar</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Stäng</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Dra samman för att visa endast standardenheten för uppspelning</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Standardgenväg</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Utöka för att visa alla uppspelningsenheter</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Allmänt</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Tilldela denna app till en uppspelningsenhet</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Öppna aktivitetfältsmenyn</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Använd den äldre EarTrumpet-ikonen</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Fler kommandon</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Ljud av</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ljudinställningar</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows-originalinställningar</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Om tillägget {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Namn:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Öppna Windows-inställningar</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Detta tillägg kan tas bort i appen för Windows-inställningar.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Avinstallera</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Hantering</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Äldre inställningar</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Utgivare:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Konfigurera genvägar och få hjälp</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet-inställningar</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Genvägar</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Version:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Hitta en inställning</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Inga resultat</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Öppna volymkontroll</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Av</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>På</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Hem</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Kommer snart</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Öppna inställningar</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Stäng</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Välkommen till EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet kunde inte starta</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Ett trasigt teckensnitt på ditt system hindrar EarTrumpet från att starta.\r\n\r\nÖppna [https://eartrumpet.app/jmp/fixfonts] nu?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Ljud av/på</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Integritetspolicy</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Skicka kraschdata till EarTrumpet-teamet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>och</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Gör</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Lägg till åtgärd</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Lägg till villkor</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ställ in snabbtangenter och automatisering</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Lägg till trigger</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En app-session har lagts till, tagits bort, börjar spela upp ljud...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>är tillagd</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>är tystad</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>slutar spela ljud</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>börjar spela upp ljud</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>är borttaget</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>har ljud på</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>är tillagd</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>blir standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>lämnar standard</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>är borttaget</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>falsk</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>sant</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>är</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>är inte</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>och</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Konfigurera ett filter är valfritt, men det låter dig bygga mer avancerade åtgärder. Alla villkor måste vara sanna innan åtgärder utförs.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Avancerat filter</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Jag använder den här åtgärdens innehållsmenyobjekt</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Jag använder den här åtgärdens innehållsmenyobjekt</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Om standardenheten för uppspelning är eller inte är</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} standardenhet</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Standardenhet för uppspelning</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En ljudenhet har lagts till, tagits bort, ange som standard, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>slutar</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>börjar</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Redigera</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet XML-åtgärder</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet startar eller slutar</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Alla appar</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Exportera</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Spara en kopia av dina åtgärder till en fil.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Förgrundsapp</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En snabbtangent har tryckts ner</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(välj en snabbtangent)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} har tryckts ner</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Importera och exportera</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Importera</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Återställer dina åtgärder från en fil.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Tyst</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Växla tyst</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Ljud på</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Åtgärder</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Ny åtgärd</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(valfri)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Uppspelning</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Om en process körs eller inte</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ange ett processnamn)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>När {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Processnamn (t.ex. anteckningar)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>börjar</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>slutar</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>körs ej</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>körs</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>En process startar eller slutar</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ange ett processnamn)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>När {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Processnamn (t.ex. anteckningar)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Spelar in</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Ta bort</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(obligatorisk)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Tysta eller på med ljudet för en app</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ange volymen för en app</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volym till {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} volym av {Volume} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ställ in standardenhet för uppspelning</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ange {Device} som standardenhet för uppspelning</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Tysta eller på med ljudet för en enhet</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} på {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ställ in enhetsvolym</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volym till {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} volym av {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Ställ in en lokal variabel</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ange variabelnamn)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Ställ in variabel {Text} till {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Ange ett variabelnamn (t.ex isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Minskning</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Ökning</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Ange</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>eller</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>När</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Om en lokal variabel är sann eller falskt</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ange ett variabelnamn)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Variabel {Text} är {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Ange ett variabelnamn (t.ex isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Ta bort</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Redigera</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Spara</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Välj en enhet</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Välj en app</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Avbryt</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Ta bort åtgärden?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Ta bort</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Ta bort</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Avbryt</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Lämna utan att spara?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Spara</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Lämna</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Ta bort åtgärd</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Detta kan inte ångras.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Ta bort åtgärd</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Ta bort</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Appar som visas ovan har spelat upp ljud nyligen.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Minska volymen för alla enheter</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Öka volymen för alla enheter</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.ta-IN.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>வெளியேறு</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>இயக்கல் சாதனம் எதுவும் கண்டறியப்படவில்லை</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>பின்னூட்டம் மையம்</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>ஒலியளவு மிக்சர்</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>ஒலியளவு மிக்சர்</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>உங்களிடம் எந்த இயக்கல் சாதனங்களும் இல்லை போல் தெரிகிறது.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: இயக்கல் சாதனங்கள் எதுவுமில்லை</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>இயக்கல் சாதனங்கள்</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>பதிவு சாதனங்கள்</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>அமைப்புகள்</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>ஒலிகள்</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>சிக்கல்தீர்த்தல் தரவைச் சேகரி</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>உங்கள் விசை குறுக்குவழி</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>எப்போதும் இயல்புநிலை சாதனத்தைப் பயன்படுத்து</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>பற்றி</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>மேலும் அறிக</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% ஒலியளவு - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"முடக்கப்பட்டது - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>பயன்பாடுகள்</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>மூடு</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>இயல்புநிலை இயக்கல் சாதனத்தை மட்டும் காண்பிக்கச் சுருக்கு</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>இயல்புநிலை விசை குறுக்குவழி</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>எல்லா இயக்கல் சாதனங்களைக் காண்பிக்க விரிவாக்கு</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>பொது</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>இப்பயன்பாட்டை ஒரு இயக்கல் சாதனத்திற்கு பேற்றுரிமையாளராக்கு</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>பணிப்பட்டி பலகையைத் திற</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Legacy EarTrumpet படவுருவை பயன்படுத்து</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>மேலும் கட்டளைகள்</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>ஒலியடக்கு</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>ஒலி அமைப்புகள்</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows legacy</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>{Name} நீட்டிப்பைப் பற்றி</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>பெயர்:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Windows அமைப்புகளைத் திற</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>இந்த நீட்டிப்பை Windows அமைப்புகளில் அகற்றலாம்.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>நிறுவல்நீக்கு</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>மேலாண்மை</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Legacy அமைப்புகள்</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>வெளியீட்டாளர்:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>விசை குறுக்குவழிகளை அமைக்கவும் மற்றும் உதவி பெறவும்</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet அமைப்புகள்</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>குறுக்குவழி</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>பதிப்பு:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>ஒரு அமைப்பைக் கண்டறி</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>முடிவுகள் இல்லை</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>மிக்சரை திற</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>அணை</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>இயக்கு</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>முகப்பு</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>விரைவில் வருகிறது</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>விரைவில் வருகிறது</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>அமைப்புகளைத் திற</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>மூடு</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet இற்கு வருக</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpetஐ தொடங்க முடியவில்லை</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>உங்கள் கணினியில் ஒரு உடைந்த எழுத்துரு EarTrumpet தொடங்குவதிலிருந்து தடுக்கிறது.\r\n\r\nஇப்போது [https://eartrumpet.app/jmp/fixfonts] திறக்கவா?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>ஒலியடங்கை இயக்கு/அணை</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>தனியுரிமைக் கொள்கை</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet குழுவிற்குச் செயலிழப்புத் தரவை அனுப்பவும்</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.th-TH.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>ออกจากโปรแกรม</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>ไม่พบอุปกรณ์เล่นกลับ</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>ส่งคำติชม</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>วอลลุ่มมิกเซอร์</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>วอลลุ่มมิกเซอร์</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>ดูเหมือนว่าคุณไม่มีอุปกรณ์เล่นกลับ</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpe: ไม่มีอุปกรณ์เล่นกลับ</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>อุปกรณ์เล่นกลับ</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>อุปกรณ์บันทึกเสียง</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>ตั้งค่า</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>เสียง</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>เก็บข้อมูลการแก้ปัญหา</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>ทางลัดของคุณ</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>ใช้อุปกรณ์ค่าเริ่มต้นทุกครั้ง</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>เกี่ยวกับ</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>เรียนรู้เพิ่มเติม</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% เสียง - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"ปิดเสียง - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>แอป</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>ปิด</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>ย่อและแสดงอุปกรณ์ค่าเริ่มต้นอย่างเดียว</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>ทางลัดค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>ขยายและแสดงทุกอุปกรณ์เล่นกลับ</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>ทั่วไป</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>ให้แอปนี้ใช้อุปกรณ์เล่นกลับนั้</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>เปิดแถบงานบินออก</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>ใช้ไอคอน EarTrumpet แบบเก่า</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>คำสั่งเพิ่มเติม</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>ปิดเสียง</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>ตั้งค่าเสียง</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>วินโดว์เลกาซี่</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>เกี่ยวกับส่วนขยาย {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>ชื่อ:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>เปิดการตั้งค่าในวินโดว์</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>ส่วนเสริมนี้สามารถลบได้โดยใช้แอปตั้งค่าของวินโดว์</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>ถอนการติดตั้ง</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>การจัดการ</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>การตั้งค่าเลกาซี่</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>ผู้เผยแพร่</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>ตั้งค่าทางลัดแลัขอความช่ายเหลือ</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>การตั้งค่า EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>ทางลัด</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>เวอร์ชั่น:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>ค้นหาการตั้งค่า</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>ไม่มีผลลัพธ์</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>เปิด มิกเซอร์</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>ปิด</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>เปิด</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>หน้าหลัก</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>เร็วๆ นี้</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>เร็วๆ นี้</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>เปิดการตั้งค่า</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>ปิด</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>ขอต้อนัรบสู่ EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>ไม่สามารถเริ่ม EarTrumpet ได้</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>มีฟอนต์ที่พังในระบบของคุณที่ทำให้ EarTrumpet ไม่สามารถเริ่มได้\r\n\r\nเปิด [https://eartrumpet.app/jmp/fixfonts] ตอนนี้ไหม?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>สลับปิดเสียง</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>นโยบายความเป็นส่วนตัว</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>ส่งข้อมูลการพังของแอปไปที่ทีมของ EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>และ</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>ทำ</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>เพิ่มการกระทำ</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>เพิ่มเงื่อนไข</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>ตั้งค่าปุ่มลัดและระบบอัตโนมัติ</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>เพิ่มตัวกระตุ้น</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>เมื่อแอปเซสชั่นได้เพิ่มเข้า, เอาออก, เริ่มเล่นเสียง, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} บน {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>ได้เพิ่ม</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>ได้ปิดเสียง</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>หยุดเล่นเสียง</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>เริ่มเล่นเสียง</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>ได้เอาออก</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>ได้เปิดเสียง</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>ได้เพิ่ม</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>ให้เป็นค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>ปล่อยให้เป็นค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>ได้เอาออก</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>ไม่จริง</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>จริง</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>เป็น</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>ไม่ใช่</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>และ</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>ตั้งค่าการกรองมันไม่จำเป็นแต่มันทำให้คุณสร้างการกระทำขั้นสูงได้ เงื่อนไขควรตั้งเป็นจริงก่อนการดำเนินการ</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>ตัวกรองขั้นสูง</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>ฉันใช้การกระทำนี้ในเมนู</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>ฉันใช้การกระทำนี้ในเมนู</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>ถ้าอุปกรณ์เล่นกลับเป็นหรือไม่เป็น</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} อุปกรณ์ค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>อุปกรณ์เล่นกลับเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>อุปกรณ์เสียงได้ถูกเพิ่ม, เอาออก, ตั้งเป็นค่าเริ่มต้น, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>จบ</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>เริ่ม</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>แก้ไข</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>XML การกระทำของ EarTrumpet</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet เริ่มหรือจบ</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>ทุกแอป</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>ส่งออก</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>บันทึกสำเนาการกระทำของคุณไปในไฟล์</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>แอปเบื้องหน้า</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>ปุ่มลัดถูกกด</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(เลือกปุ่มลัด)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} ถูกกด</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>นำเข้าและส่งออก</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>นำเข้า</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>กู้คืนสำเนาการกระทำของคุณจากไฟล์</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>ปิดเสียง</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>สลับปิดเสียง</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>เปิดเสียง</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>การกระทำ</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>เพิ่มการกระทำ</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(เพิ่มเติม)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>เล่น</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>ถ้ากระบวนการวิ่งหรือไม่</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ใช่ชื่อของกระบวนการ)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>เมื่อ {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>ชื่อกระบวนการ (เช่น notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>เริ่ม</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>จบ</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>ไม่ทำงาน</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>ทำงาน</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>กระบวนการเริ่มหรือจบ</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ใช่ชื่อของกระบวนการ)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>เมื่อ {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>ชื่อกระบวนการ (เช่น notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>กำลังบันทึก</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>เอาออก</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(จำเป็น)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>ปิดหรือเปิดเสียงแอป</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} บน {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>ปรับความดังของแอป</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} ปรับเสียงไป {Volume} บน {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} ปรับเสียงให้ {Volume} บน {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>ตั้งให้เป็นอุปกรณ์ค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>ตั้ง {Device} นี้เป็นตัวเล่นเสียงค่าเริ่มต้น</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>ปิดหรือเปิดเสียงอุปกรณ์</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} บน {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>ปรับเสียงของอุปกรณ์</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} ปรับเสียงไป {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} ปรับเสียงให้ {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>ตั้งตัวแปรภายใน</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ตั้งชื่อตัวแปร)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>ตั้งตัวแปร {Text} เป็น {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>ใส่ชื่อตัวแปร (เช่น โหมดเกมส์)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>ลดลง</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>เพิ่มขึ้น</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>ตั้ง</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>หรือ</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>เมื่อ</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>ถ้าตัวแปรภายในเป็นจริงหรือไม่จริง</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(ใส่ชื่อตัวแปร)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>ตัวแปร {Text} เป็น {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>ใส่ชื่อตัวแปร (เช่น โหมดเกมส์)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>ลบ</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>แก้ไข</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>บันทึก</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>เลือกอุปกรณ์</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>เลือกแอป</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>ยกเลิก</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>ลบการกระทำนี้ไหม?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>ลบ</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>ลบ</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>ยกเลิก</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>ออกโดยไม่บันทึก?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>บันทึก</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>ออก</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>ลบการกระทำนี้</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>การกระทำนี้ไม่สามารถยกเลิกได้</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>เอาการกระทำออก</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>เอาออก</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>แอปที่แสดงข้างบนได้เล่นเสียงล่าสุด</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>ลดเสียงทุกอุปกรณ์</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>เพิ่มเสียงทุกอุปกรณ์</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.tr-TR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Çıkış</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Oynatma aygıtı bulunamadı</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Geri bildirim gönder</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Ses Karıştırıcısı</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Ses Karıştırıcısı</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Herhangi bir oynatma aygıtınız yok gibi görünüyor.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Oynatma aygıtı bulunamadı</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Oynatma aygıtları</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Kayıt aygıtları</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Ayarlar</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Sesler</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Sorun giderme verilerini toplama</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Kısayolunuz</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Her zaman varsayılan oynatma aygıtını kullan</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Hakkında</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Daha fazla bilgi edin</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Volume}% Ses seviyesi - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Name} - Susturulmuş\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Uygulamalar</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Kapat</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Yalnızca varsayılan oynatma cihazını göstermek için daralt</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Varsayılan kısayol</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Tüm oynatma cihazlarını görmek için genişlet</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Genel</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Bu uygulamayı bir oynatma cihazına atayın</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Görev çubuğu açılır penceresini aç</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Ses seviyesi yerine EarTrumpet ikonunu kullan</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Daha fazla komut</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Susturulmuş</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Ses ayarları</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows ses ayarları</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>{Name} eklentisi hakkında</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>İsim:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Windows ayarlarını aç</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Bu eklenti Windows Ayarları uygulaması kullanılarak kaldırılabilir.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Kaldır</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Yönetim</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Eski ayarlar</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Yayımcı:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Kısayolları yapılandırın ve yardım alın</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Ayarları</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Kısayollar</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Versiyon:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Bir ayar bulun</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Sonuç yok</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Karıştırıcıyı aç</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Kapalı</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Açık</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Ana sayfa</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Yakında</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Yakında</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Ayarları aç</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Kapat</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet'a hoş geldiniz</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet başlatılamadı</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Sisteminizde bozuk bir yazı tipi eartrumpet'in başlamasını engelliyor.\r\n\r\n[https://eartrumpet.app/jmp/fixfonts] açmak ister misiniz?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Sesi kapat</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Gizlilik politikası</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Çökme verisini EarTrumpet ekibine gönder</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>ve</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Yap</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Eylem ekle</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Koşul ekle</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Kısayol tuşlarını ve otomasyonu ayarlama</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Tetikleyici Ekle</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Bir uygulama oturumu eklenir, kaldırılır, ses çıkarmaya başlarsa, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} aygıtında {App} uygulamasını {Option}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>eklendiğinde</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>susturulduğunda</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>ses çıkarmayı durdurduğunda</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>ses çıkarmaya başladığında</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>kaldırıldığında</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>sesi açıldığında</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>eklendiğinde</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>varsayılan olduğunda</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>varsayılan olmaktan çıktığında</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>kaldırıldığında</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>hayır</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>evet</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>şöyleyse</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>şöyle değilse</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>ve</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Bir filtre ayarlamak isteğe bağlıdır fakat daha gelişmiş eylemler yapmanıza olanak sağlar. Eylemler başlatılmadan önce tüm koşullar doğru olmalı.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Gelişmiş Filtre</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Ben bu eylemin bağlam menüsünü kullandığımda</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Ben bu eylemin bağlam menüsünü kullandığımda</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Eğer varsayılan kayıttan yürütme aygıtı şöyle ise/değilse</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device}{Option} varsayılan cihaz</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Varsayılan kayıttan yürütme aygıtı</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Bir ses aygıtı eklendiğinde, kaldırılıldığında, varsayılan olarak ayarlandığında, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>biterken</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>başlarken</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Düzenle</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Eylemler XMLsi</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet başlayınca veya durunca</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Her uygulama</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Dışa aktar</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Eylemlerinizin kopyasını bir dosyaya kaydedin.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Ön plandaki uygulama</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Bir kısayola basıldığında</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(bir kısayol tuşu seçin)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} yazıldı</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>İçe/dışa aktar</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>İçe aktar</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Eylemlerinizin kopyasını bir dosyadan yükleyin.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Sustur</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Susturmayı tetikle</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Sesini aç</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Eylemler</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Yeni eylem</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(isteğe bağlı)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Kayıttan yürütme</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Eğer bir işlem çalışıp çalışmıyorsa</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(bir işlem ismi girin)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Eğer {Text} {Option} ise</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>İşlem ismi (örn. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>başlarken</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>biterken</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>çalışmıyorsa</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>çalışıyorsa</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Bir işlem başladığında veya durduğunda</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(bir işlem ismi girin)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Eğer {Text} {Option} ise</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>İşlem ismi (örn. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Kayıt</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Kaldır</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(gerekli)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bir uygulamayı sustur veya sesini aç</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} aygıtında {Option} {App}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bir uygulamanın sesini ayarla</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} ses yüksekliğini {Device} aygıtında {Volume} olarak {Option}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{App} ses yüksekliğini {Device} aygıtında {Volume} kadar {Option}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Varsayılan kayıttan yürütme aygıtını ayarla</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} aygıtını kayıttan yürütme aygıtı olarak ayarla</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bir uygulamayı sustur veya sesini aç</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Device} aygıtında {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bir aygıt ses yüksekliği ayarlayın</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} ses seviyesini {Volume} değerine {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Device} ses seviyesini {Volume} kadar {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bir yerel değişken ayarlayın</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(değişken adı ayarlayın)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Text} değişkeni: {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Bir değişken adı girin (örn. oyunModunda)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Azaltma</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Yükseltme</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Ayarla</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>veya</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Eğer</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Bir yerel değişken doğru veya yanlışsa</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(bir değişken adı girin)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Text} değişkeni: {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Bir değişken adı girin (örn. oyunModunda)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Sil</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Düzenle</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Kaydet</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Bir aygıt seçin</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Bir uygulama seçin</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>İptal</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Bu eylemi silmek mi istiyorsunuz?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Sil</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Sil</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>İptal</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Kaydetmeden mi çıkacaksınız?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Kaydet</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Çık</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Bu eylemi kaldır</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Bu işlem geri alınamaz.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Eylemi kaldır</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Kaldır</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Yukarıda gösterilen uygulamlar yakın zamanda ses çıkardılar.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Ses seviyesini tüm aygıtlar için düşür</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Ses seviyesini tüm aygıtlar için yükselt</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.uk-UA.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Вийти</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Пристроїв для відтворення не знайдено</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Надіслати відгук</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Мікшер гучності EarTrumpet</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Мікшер гучності Legacy</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Здається, у вас немає пристроїв для відтворення.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: незнайдено пристроїв для відтворення</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Пристрої для відтворення</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Пристрої для запису</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Налаштування/ Про нас EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Звук</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Зібрати дані для усунення неполадок</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ваш ярлик</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Завжди використовувате пристрій відтворення за замовчуванням</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Про</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Дізнатися більше</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>{Volume} відсоток гучності - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>Звук вимкнено- {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Додатки</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Закрити</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Згорнути, показати лише пристрій для відтворення за замовчуванням</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Ярлик за замовчуванням</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Відобразити всі пристрої для відтворення</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Загальне</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Застосувати цей додаток до пристрою для відтворення</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Відкрити меню EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Використовувати значок legacy EarTrumpet</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Більше команд</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Без звуку</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Параметри звуку</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Старе меню Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Про додаток {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Ім'я:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Відкрити меню налаштування Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Цей додаток може бути видалено за допомогою меню налаштування Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Управління</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Застарілі параметри</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Видавець:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Налаштувати сполучення клавіш та отримати допомогу</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Сполучення клавіш</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Версія:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Знайти налаштування</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Немає результатів</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Відкрити мікшер</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Викл</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Вкл</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Головна</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>З'явиться незабаром</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>З'явиться незабаром</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Відкрити налаштування</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Закрити</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Ласкаво просимо до EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Неможливо запустити EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Пошкоджений шрифт не дозволяє запустити EarTrumpet.\r\n\r\nПерейти за посиланням [https://eartrumpet.app/jmp/fixfonts]?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Вимкнути звук</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Політика конфіденційності</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Надіслати дані помилки команді EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>і</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Виконати</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Додати дію</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Додати умову</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Налаштувати гарячі клавіші та автоматизацію</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Додати тригер</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Сесія програми додана, видалена, почне відтворюватись звук, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} на {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>додано</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>заглушено</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>зупиняє відтворення звуку</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>починає відтворення звуку</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>видалено</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>заглушено</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>додано</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>стає типовим</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>лишається типовим</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>видалено</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>хиба</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>істина</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>є</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>не є</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>та</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Налаштування фільтру є необов'язковим, але дозволяє створювати більш просунуті дії. Всі умови повинні бути виконаними до того, як дії будуть виконані.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Розширений фільтр</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Я використовую в контекстному меню дії</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Я використовую в контекстному меню дії</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Якщо пристрій відтворення за замовчуванням або ні</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} пристрій за замовчуванням</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Стандартний пристрій відтворення</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Аудіопристрій додано, видалено, встановлено як типовий...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>завершується</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>запускається</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Редагувати</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Actions XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet запускається або закривається</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Кожна програма</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Експорт</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Збережіть копію ваших дій у файл.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Програма переднього плану</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Натиснуто гарячу клавішу</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(вибрати гарячу клавішу)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} введено</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Імпорт та експорт</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Імпорт</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Відновити копію ваших дій з файлу.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Вимкнути звук</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Вкл/викл звук</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Увімкнути звук</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Дії</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Нова дія</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(необов'язково)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Відтворення</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Якщо процес виконується чи ні</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(введіть назву процесу)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Коли {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Назва процесу (напр. notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>запускається</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>завершується</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>не виконується</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>виконується</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Процес запускається або завершується</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(введіть назву процесу)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Коли {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Ім'я процесу (напр. notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Запис</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(обов'язково)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Вимкнути або увімкнути звук застосунку</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Встановити гучність програми</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} гучність до {Volume} у {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} гучність {Volume} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Встановити стандартний пристрій відтворення</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Встановити {Device} як стандартний пристрій відтворення</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Вимкнути або увімкнути звук пристрою</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} на {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установити гучність пристрою</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} гучність до {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} гучність на {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Установити локальну змінну</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(задати назву змінної)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Встановити змінну {Text} до {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Введіть ім'я змінної (наприклад isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Зменшити</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Збільшити</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Встановити</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>або</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Коли</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Якщо локальна змінна є істиною або хибною</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(задати назву змінної)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Змінна {Text} є {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Введіть назву змінної (наприклад isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Редагувати</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Зберегти</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Обрати пристрій</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Вибрати програму</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Скасувати</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Видалити цю дію?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Скасувати</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Закрити без збереження?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Зберегти</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Залишити</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Видалити цю дію</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Цю дію не можна скасувати.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Видалити дію</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Видалити</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Останнім часом показані додатки грали звук.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Зменшити гучність для всіх пристроїв</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Збільшити гучність для всіх пристроїв</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Гучність та налаштування пристроїв</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Мікшер гучності</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Параметри миші</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Використовувати колесо прокрутки для зміни гучності при наведенні на значок EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Використовувати колесо прокрутки для зміни гучності при активному випадаючому вікні</value>\r\n  </data>\r\n  <data name=\"CommunitySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Налаштування спільноти</value>\r\n    <comment>Settings area that holds settings for community requested features</comment>\r\n  </data>\r\n  <data name=\"SettingsUseLogarithmicVolume\" xml:space=\"preserve\">\r\n    <value>Використовувати логарифмічну шкалу гучності</value>\r\n    <comment>Community setting: Changes the volume slider value scale to/from linear and logarithmic scale.\r\n</comment>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.vi-VN.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>Thoát</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>Không tìm thấy bất kỳ thiết bị phát lại nào</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>Gửi phản hồi</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>Trình phối âm</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>Trình phối âm</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>Có vẻ như bạn không có thiết bị phát lại nào cả.</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: Không có thiết bị phát lại</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>Thiết bị phát lại</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>Thiết bị thu âm</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>Cài đặt</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>Âm thanh</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Thu thập dữ liệu chẩn đoán</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Phím tắt của bạn</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>Luôn dùng thiết bị phát lại mặc định</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>Thông tin về ứng dụng</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>Tìm hiểu thêm</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"Âm lượng {Volume}% - {Name}\"</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>\"{Name} - Bị tắt tiếng\"</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>Ứng dụng</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Đóng</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>Thu nhỏ để chỉ hiển thị thiết bị phát lại mặc định</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>Phím tắt mặc định</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>Mở rộng để hiển thị tất cả thiết bị phát lại</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>Chung</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>Gán ứng dụng này với một thiết bị phát lại</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>Mở flyout ở thanh tác vụ ra</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>Dùng biểu tượng EarTrumpet cũ</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>Thêm lệnh</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>Đã tắt tiếng</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>Cài đặt âm thanh</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Cài đặt cũ của Windows</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>Thông tin về phần mở rộng {Name}</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>Tên:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>Mở cài đặt Windows</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>Phần mở rộng này có thể gỡ ra được từ ứng dụng Cài đặt Windows.</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>Gỡ cài đặt</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>Quản lý</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>Cài đặt cũ</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>Nhà phát hành:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>Cấu hình phím tắt và tìm sự trợ giúp</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>Cài đặt EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>Phím tắt</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>Phiên bản:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>Tìm cài đặt</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>Không có kết quả</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>Mở trình phối âm</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>Tắt</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>Bật</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>Trang chính</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>Sắp có</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>Sắp có</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>Mở cài đặt</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>Đóng</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>Chào mừng bạn đến với EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet không thể khởi chạy</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>Một phông chữ trên máy bạn đang ngăn cản EarTrumpet khởi chạy.\r\n\r\nMở [https://eartrumpet.app/jmp/fixfonts] ngay?</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>Bật tắt âm lượng</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>Chính sách riêng tư</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>Gửi dữ liệu sự cố tới đội EarTrumpet</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>và</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>Thực hiện khi</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>Thêm hành động</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>Thêm điều kiện</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>Thiết lập phím nóng và tự động hóa</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>Thêm điều kiện kích hoạt</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Một phiên của ứng dụng được thêm, loại bỏ, bắt đầu phát âm thanh, ...</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} ở {Device}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>được thêm</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>bị tắt tiếng</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>dừng phát âm</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>bắt đầu phát âm</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>bị gỡ ra</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>bỏ tắt tiếng</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>được thêm</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>trở thành mặc định</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>không trở thành mặc định</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>bị gỡ ra</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>sai</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>đúng</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>là</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>không phải là</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>và</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>Bạn không cần thiết phải cấu hình bộ lọc nhưng nó cho phép thiết lập nhiều hành động nâng cao hơn. Tất cả các điều kiện phải là đúng trước khi các hành động có thể được thực hiện.</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>Bộ lọc nâng cao</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Tôi sử dụng mục trình đơn ngữ cảnh của hành động này</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Tôi sử dụng mục trình đơn ngữ cảnh của hành động này</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Nếu thiết bị phát lại mặc định là hoặc không phải là</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} thiết bị mặc định</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>Thiết bị phát lại mặc định</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Một thiết bị âm thanh được thêm, loại bỏ, đặt làm mặc định, ...</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>thoát</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>khởi chạy</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>Chỉnh sửa</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>Hành động EarTrumpet XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet khởi chạy hoặc thoát ra</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>Mỗi ứng dụng</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>Xuất</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>Lưu một bản sao của các hành động của bạn thành một tệp.</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>Ứng dụng ở đằng trước</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Một phím nóng được nhấn</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(chọn một phím nóng)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} được nhấn</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>Nhập và Xuất</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>Nhập</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>Khôi phục bản sao của các hành động của bạn từ một tệp.</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>Tắt tiếng</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>Bật tắt âm lượng</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>Bỏ tắt tiếng</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>Các hành động</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>Hành động mới</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(tùy chọn)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Phát lại</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Nếu một tiến trình đang chạy hoặc không chạy</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(nhập tên tiến trình)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Khi {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Tên tiến trình (Ví dụ: notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>bắt đầu</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>kết thúc</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>không chạy</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>đang chạy</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>Một tiến trình bắt đầu chạy hoặc kết thúc</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(nhập tên tiến trình)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>Khi {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>Tên tiến trình (Ví dụ: notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>Thu âm</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>Loại bỏ</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(bắt buộc)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bật hoặc tắt âm ứng dụng</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} {Option} ở {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Đặt âm lượng của ứng dụng</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} âm lượng của {App} thành {Volume} ở thiết bị {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} âm lượng của {App} thành {Volume} ở thiết bị {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>Đặt thiết bị phát lại mặc định</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Đặt {Device} làm thiết bị phát lại mặc định</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>Bật hoặc tắt âm thiết bị</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} ở {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>Đật âm lượng cho thiết bị</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} âm lượng của {Device} thành {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} âm lượng của {Device} thành {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>Đặt biến cục bộ</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(đặt tên cho biến)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>Đặt biến {Text} thành {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>Nhập tên biến (Ví dụ: isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>Giảm</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>Tăng</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>Đặt</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>hoặc</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>Khi</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>Nếu biến cục bộ đúng hay sai</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(nhập tên biến)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>Biến {Text} là {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>Nhập tên biến (Ví dụ: isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>Xóa</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>Chỉnh sửa</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>Lưu</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>Chọn thiết bị</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>Chọn ứng dụng</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>Hủy</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>Xóa hành động này?</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>Xóa</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>Xóa</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>Hủy</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>Bạn thoát mà không lưu?</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>Lưu</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>Thoát</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>Loại bỏ hành động này</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>Tác vụ này sẽ không thể hoàn lại được.</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>Loại bỏ hành động</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>Loại bỏ</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>Các ứng dụng được hiển thị ở trên đã phát âm thanh gần đây.</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>Giảm âm lượng mọi thiết bị</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>Tăng âm lượng mọi thiết bị</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>Âm lượng của từng ứng dụng và tùy chọn thiết bị</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>Bộ chỉnh âm</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>Cài đặt chuột</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>Cuộn chuột để chỉnh âm lượng khi đưa con trỏ lên biểu tượng EarTrumpet</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>Cuộn chuột để chỉnh âm lượng khi phần menu mở rộng đang hiển thị</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.zh-CN.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>退出</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>找不到播放设备</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>提交反馈</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>音量合成器</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>音量合成器</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>似乎没有任何播放设备。</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet: 没有播放设备</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>播放设备</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>录制设备</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>设置</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>声音</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>收集故障排除数据</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>你的快捷键</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>始终使用默认播放设备</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>关于</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>了解更多</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>音量 {Volume}% - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>静音 - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>应用</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>关闭</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>折叠并仅显示默认播放设备</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>默认快捷键</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>展开显示所有播放设备</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>通用</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>指定此应用的播放设备</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>打开任务栏浮出面板</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>使用经典 EarTrumpet 图标</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>更多命令</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>静音</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>声音设置</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows 旧版声音设置</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>关于 {Name} 加载项</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>名称:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>打开 Windows 设置</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>此加载项可通过 Windows「设置」应用移除。</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>卸载</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>管理</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>旧版设置</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>发布者:</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>配置快捷键与获取帮助</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 设置</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>快捷键</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>版本:</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>查找设置</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>没有结果</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>打开音量合成器</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>关</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>开</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>主页</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>即将推出</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>即将推出</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>打开设置</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>关闭</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>欢迎使用 EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 无法启动</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>您的系统上存在损坏的字体，使得 EarTrumpet 无法启动。\r\n\r\n是否现在打开 [https://eartrumpet.app/jmp/fixfonts] 以获取相关信息？</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>静音/取消静音</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>隐私策略</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>将崩溃数据发送给 EarTrumpet 团队</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>和</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>执行</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>添加动作</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>添加条件</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>设置热键与自动化</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>添加触发器</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>某应用会话被添加、移除、开始播放声音……</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{App} 在 {Device} 上 {Option}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>被添加</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>被静音</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>停止播放声音</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>开始播放声音</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>被移除</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>被取消静音</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>被添加</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>成为默认设备</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>不再是默认设备</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>被移除</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>false</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>true</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>是</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>不是</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>和</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>配置过滤器是可选的，但此功能可以帮你实现更高级的动作。当所有条件都为真时，动作才能执行。</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>高级筛选</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>我点击此动作对应的上下文菜单项</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>我点击此动作对应的上下文菜单项</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>当某设备是或不是默认播放设备</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} 默认设备</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>默认播放设备</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>某音频设备被添加、移除、设为默认设备……</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>结束</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>启动</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>编辑</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet Actions XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 启动或结束</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>所有应用</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>导出</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>将你的动作保存到文件。</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>前台应用</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>某热键被按下</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(请设置热键)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Hotkey} 被按下</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>导入和导出</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>导入</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>从文件中恢复你的动作。</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>静音</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>静音/取消静音</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>取消静音</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>动作</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>新建动作</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(可选)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>播放</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>当某进程正在运行或没有运行</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(请输入进程名称)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>当 {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>进程名称 (例如：notepad)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>启动</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>结束</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>没有运行</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>正在运行</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>某进程启动或结束</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(请输入进程名称)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>当 {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>进程名称 (例如：notepad)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>录制</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>移除</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(必填)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>将某应用静音或取消静音</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>在 {Device} 上将 {App} {Option}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>调整某应用的音量</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>在 {Device} 上将 {App} 的音量 {Option} 为 {Volume}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>在 {Device} 上将 {App} 的音量 {Option} {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>设置默认播放设备</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>将 {Device} 设置为默认播放设备</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>将某设备静音或取消静音</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>将 {Device} {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>将 {Device} {Option}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>调整某设备音量</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>将 {Device} 的音量 {Option} 为 {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>将 {Device} 的音量 {Option} {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>设置某局部变量</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(请设置变量名称)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>将变量 {Text} 设置为 {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>输入变量名称 (例如：isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>调低</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>调高</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>调整</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>或</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>当</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>当某局部变量值为 true 或 false</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(请输入变量名称)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>变量 {Text} 值为 {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>输入变量名称 (例如：isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>删除</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>编辑</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>保存</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>选择设备</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>选择应用</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>取消</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>删除此动作？</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>删除</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>删除</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>取消</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>不保存就离开吗？</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>保存</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>离开</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>移除此动作</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>此操作无法撤消。</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>移除动作</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>移除</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>以上应用最近播放过声音。</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>降低所有设备的音量</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>提高所有设备的音量</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows10_Text\" xml:space=\"preserve\">\r\n    <value>应用音量和设备首选项</value>\r\n  </data>\r\n  <data name=\"OpenAppsVolume_Windows11_Text\" xml:space=\"preserve\">\r\n    <value>音量合成器</value>\r\n  </data>\r\n  <data name=\"MouseSettingsPageText\" xml:space=\"preserve\">\r\n    <value>鼠标设置</value>\r\n  </data>\r\n  <data name=\"SettingsUseScrollWheelInTray\" xml:space=\"preserve\">\r\n    <value>鼠标指针悬停在 EarTrumpet 图标上时，使用滚轮调节音量</value>\r\n  </data>\r\n  <data name=\"SettingsUseGlobalMouseWheelHook\" xml:space=\"preserve\">\r\n    <value>浮出面板打开时，使用滚轮调节音量</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/Properties/Resources.zh-TW.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\r\n              <xsd:attribute ref=\"xml:space\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ContextMenuExitTitle\" xml:space=\"preserve\">\r\n    <value>結束</value>\r\n  </data>\r\n  <data name=\"ContextMenuNoDevices\" xml:space=\"preserve\">\r\n    <value>找不到播放裝置</value>\r\n  </data>\r\n  <data name=\"ContextMenuSendFeedback\" xml:space=\"preserve\">\r\n    <value>傳送意見回饋</value>\r\n  </data>\r\n  <data name=\"FullWindowTitleText\" xml:space=\"preserve\">\r\n    <value>音量混音程式</value>\r\n  </data>\r\n  <data name=\"LegacyVolumeMixerText\" xml:space=\"preserve\">\r\n    <value>音量混音程式</value>\r\n  </data>\r\n  <data name=\"NoDevicesPanelContent\" xml:space=\"preserve\">\r\n    <value>您似乎沒有任何播放裝置。</value>\r\n  </data>\r\n  <data name=\"NoDeviceTrayText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet：沒有可播放音效的裝置</value>\r\n  </data>\r\n  <data name=\"PlaybackDevicesText\" xml:space=\"preserve\">\r\n    <value>播放裝置</value>\r\n  </data>\r\n  <data name=\"RecordingDevicesText\" xml:space=\"preserve\">\r\n    <value>錄音裝置</value>\r\n  </data>\r\n  <data name=\"SettingsWindowText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 設置 / 關於</value>\r\n  </data>\r\n  <data name=\"SoundsControlPanelText\" xml:space=\"preserve\">\r\n    <value>聲音</value>\r\n  </data>\r\n  <data name=\"TroubleshootEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>收集疑難排解資料</value>\r\n  </data>\r\n  <data name=\"HotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>你的快捷鍵</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceText\" xml:space=\"preserve\">\r\n    <value>總是使用預設播放裝置</value>\r\n  </data>\r\n  <data name=\"AboutTitle\" xml:space=\"preserve\">\r\n    <value>關於</value>\r\n  </data>\r\n  <data name=\"WebsiteText\" xml:space=\"preserve\">\r\n    <value>瞭解更多</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>音量 {Volume}% - {Name}</value>\r\n  </data>\r\n  <data name=\"AppOrDeviceMutedFormatAccessibleText\" xml:space=\"preserve\">\r\n    <value>靜音 - {Name}</value>\r\n  </data>\r\n  <data name=\"AppsListAccessibleText\" xml:space=\"preserve\">\r\n    <value>應用程式</value>\r\n  </data>\r\n  <data name=\"CloseButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>關閉</value>\r\n  </data>\r\n  <data name=\"CollapseAccessibleText\" xml:space=\"preserve\">\r\n    <value>摺疊畫面，只顯示預設播放裝置</value>\r\n  </data>\r\n  <data name=\"DefaultHotkeyDescriptionText\" xml:space=\"preserve\">\r\n    <value>預設快速鍵</value>\r\n  </data>\r\n  <data name=\"ExpandAccessibleText\" xml:space=\"preserve\">\r\n    <value>展開畫面，顯示所有播放裝置</value>\r\n  </data>\r\n  <data name=\"SettingsCategoryTitle\" xml:space=\"preserve\">\r\n    <value>一般設定</value>\r\n  </data>\r\n  <data name=\"MoveButtonAccessibleText\" xml:space=\"preserve\">\r\n    <value>指定此應用使用的播放裝置</value>\r\n  </data>\r\n  <data name=\"SettingsOpenEarTrumpetText\" xml:space=\"preserve\">\r\n    <value>打開 EarTrumpet 浮動框</value>\r\n  </data>\r\n  <data name=\"SettingsUseLegacyEarTrumpetIcon\" xml:space=\"preserve\">\r\n    <value>使用經典 EarTrumpet 圖標</value>\r\n  </data>\r\n  <data name=\"MoreCommandsAccessibleText\" xml:space=\"preserve\">\r\n    <value>更多指令</value>\r\n  </data>\r\n  <data name=\"MutedText\" xml:space=\"preserve\">\r\n    <value>已靜音</value>\r\n  </data>\r\n  <data name=\"OpenSoundSettingsText\" xml:space=\"preserve\">\r\n    <value>系統音效設定</value>\r\n  </data>\r\n  <data name=\"WindowsLegacyMenuText\" xml:space=\"preserve\">\r\n    <value>Windows 傳統音效設定</value>\r\n  </data>\r\n  <data name=\"AboutThisAddonText\" xml:space=\"preserve\">\r\n    <value>關於{Name} 擴展</value>\r\n  </data>\r\n  <data name=\"AddonNameText\" xml:space=\"preserve\">\r\n    <value>姓名:</value>\r\n  </data>\r\n  <data name=\"AddonUninstallButtonText\" xml:space=\"preserve\">\r\n    <value>開啟 Windows 設定</value>\r\n  </data>\r\n  <data name=\"AddonUninstallDescriptionText\" xml:space=\"preserve\">\r\n    <value>這個擴展可以透過 Windows 設定刪除。</value>\r\n  </data>\r\n  <data name=\"AddonUninstallTitle\" xml:space=\"preserve\">\r\n    <value>解除安裝</value>\r\n  </data>\r\n  <data name=\"DefaultManagementGroupName\" xml:space=\"preserve\">\r\n    <value>管理</value>\r\n  </data>\r\n  <data name=\"LegacySettingsPageText\" xml:space=\"preserve\">\r\n    <value>傳統設定</value>\r\n  </data>\r\n  <data name=\"PublisherText\" xml:space=\"preserve\">\r\n    <value>發行者：</value>\r\n  </data>\r\n  <data name=\"SettingsDescriptionText\" xml:space=\"preserve\">\r\n    <value>設定捷徑並尋求幫助</value>\r\n  </data>\r\n  <data name=\"SettingsTitle\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 設定</value>\r\n  </data>\r\n  <data name=\"ShortcutsPageText\" xml:space=\"preserve\">\r\n    <value>捷徑</value>\r\n  </data>\r\n  <data name=\"VersionText\" xml:space=\"preserve\">\r\n    <value>版本：</value>\r\n  </data>\r\n  <data name=\"FindASettingText\" xml:space=\"preserve\">\r\n    <value>尋找設定</value>\r\n  </data>\r\n  <data name=\"SearchBoxNoResultsText\" xml:space=\"preserve\">\r\n    <value>沒有結果</value>\r\n  </data>\r\n  <data name=\"SettingsOpenMixerText\" xml:space=\"preserve\">\r\n    <value>開啟混音程式</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOffText\" xml:space=\"preserve\">\r\n    <value>關閉</value>\r\n  </data>\r\n  <data name=\"ToggleSwitchOnText\" xml:space=\"preserve\">\r\n    <value>開啟</value>\r\n  </data>\r\n  <data name=\"HomeButtonText\" xml:space=\"preserve\">\r\n    <value>首頁</value>\r\n  </data>\r\n  <data name=\"ProjectADescription\" xml:space=\"preserve\">\r\n    <value>即將推出</value>\r\n  </data>\r\n  <data name=\"ProjectATitle\" xml:space=\"preserve\">\r\n    <value>即將推出</value>\r\n  </data>\r\n  <data name=\"SettingsOpenSettingsText\" xml:space=\"preserve\">\r\n    <value>打開設定</value>\r\n  </data>\r\n  <data name=\"CloseButtonText\" xml:space=\"preserve\">\r\n    <value>關閉</value>\r\n  </data>\r\n  <data name=\"WelcomeDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>歡迎使用 EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureDialogHeaderText\" xml:space=\"preserve\">\r\n    <value>無法啟動 EarTrumpet</value>\r\n  </data>\r\n  <data name=\"CriticalFailureFontLookupHelpText\" xml:space=\"preserve\">\r\n    <value>您的系統中有字型檔案毀損，造成 EarTrumpet 無法啟動。\r\n\r\n是否要開啟 [https://eartrumpet.app/jmp/fixfonts]？</value>\r\n  </data>\r\n  <data name=\"ToggleMuteToolTip\" xml:space=\"preserve\">\r\n    <value>切換靜音</value>\r\n  </data>\r\n  <data name=\"PrivacyPolicyText\" xml:space=\"preserve\">\r\n    <value>隱私政策</value>\r\n  </data>\r\n  <data name=\"PrivacyCheckboxText\" xml:space=\"preserve\">\r\n    <value>傳送當機報告給 EarTrumpet 團隊</value>\r\n  </data>\r\n  <data name=\"ActionAdditionalText\" xml:space=\"preserve\">\r\n    <value>且</value>\r\n  </data>\r\n  <data name=\"ActionVerbText\" xml:space=\"preserve\">\r\n    <value>就進行下列動作</value>\r\n  </data>\r\n  <data name=\"AddActionText\" xml:space=\"preserve\">\r\n    <value>新增動作</value>\r\n  </data>\r\n  <data name=\"AddConditionText\" xml:space=\"preserve\">\r\n    <value>新增條件</value>\r\n  </data>\r\n  <data name=\"AddonDescriptionText\" xml:space=\"preserve\">\r\n    <value>設定熱鍵與自動化動作</value>\r\n  </data>\r\n  <data name=\"AddTriggerText\" xml:space=\"preserve\">\r\n    <value>新增觸發器</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>開始或結束使用應用程式、開始播放音效…</value>\r\n  </data>\r\n  <data name=\"AppEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} 上的 {App} {Option}</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Added\" xml:space=\"preserve\">\r\n    <value>已新增</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Muted\" xml:space=\"preserve\">\r\n    <value>已靜音</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_NotPlayingSound\" xml:space=\"preserve\">\r\n    <value>停止播放音效</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_PlayingSound\" xml:space=\"preserve\">\r\n    <value>開始播放音效</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>已移除</value>\r\n  </data>\r\n  <data name=\"AudioAppEventKind_Unmuted\" xml:space=\"preserve\">\r\n    <value>已取消靜音</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Added\" xml:space=\"preserve\">\r\n    <value>已新增</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_BecomingDefault\" xml:space=\"preserve\">\r\n    <value>成為預設裝置</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_LeavingDefault\" xml:space=\"preserve\">\r\n    <value>不再是預設裝置</value>\r\n  </data>\r\n  <data name=\"AudioDeviceEventKind_Removed\" xml:space=\"preserve\">\r\n    <value>已移除</value>\r\n  </data>\r\n  <data name=\"BoolValue_False\" xml:space=\"preserve\">\r\n    <value>false</value>\r\n  </data>\r\n  <data name=\"BoolValue_True\" xml:space=\"preserve\">\r\n    <value>true</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_Is\" xml:space=\"preserve\">\r\n    <value>是</value>\r\n  </data>\r\n  <data name=\"ComparisonBoolKind_IsNot\" xml:space=\"preserve\">\r\n    <value>不是</value>\r\n  </data>\r\n  <data name=\"ConditionAdditionalText\" xml:space=\"preserve\">\r\n    <value>且</value>\r\n  </data>\r\n  <data name=\"ConditionsHelpText\" xml:space=\"preserve\">\r\n    <value>您不一定需要設定過濾器，但此功能可讓您做更進階的動作規劃。所有條件必須都是 true 時才會觸發動作。</value>\r\n  </data>\r\n  <data name=\"ConditionVerbText\" xml:space=\"preserve\">\r\n    <value>進階過濾器</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>我使用這個動作的右鍵選單項目</value>\r\n  </data>\r\n  <data name=\"ContextMenuTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>我使用這個動作的右鍵選單項目</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_AddText\" xml:space=\"preserve\">\r\n    <value>若預設播放裝置是或不是某裝置…</value>\r\n  </data>\r\n  <data name=\"DefaultDeviceCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option} 預設裝置</value>\r\n  </data>\r\n  <data name=\"DefaultPlaybackDeviceText\" xml:space=\"preserve\">\r\n    <value>預設播放裝置</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>新增、移除音訊裝置，或將其設為預設值、…</value>\r\n  </data>\r\n  <data name=\"DeviceEventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>{Device} {Option}</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Shutdown\" xml:space=\"preserve\">\r\n    <value>結束</value>\r\n  </data>\r\n  <data name=\"EarTrumpetEventKind_Startup\" xml:space=\"preserve\">\r\n    <value>開始</value>\r\n  </data>\r\n  <data name=\"EditText\" xml:space=\"preserve\">\r\n    <value>編輯</value>\r\n  </data>\r\n  <data name=\"EtaXmlFileText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 動作 XML</value>\r\n  </data>\r\n  <data name=\"EventTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>EarTrumpet 啟動或結束時</value>\r\n  </data>\r\n  <data name=\"EventTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value> EarTrumpet {Option}</value>\r\n  </data>\r\n  <data name=\"EveryAppText\" xml:space=\"preserve\">\r\n    <value>每套應用程式</value>\r\n  </data>\r\n  <data name=\"ExportHeaderText\" xml:space=\"preserve\">\r\n    <value>匯出</value>\r\n  </data>\r\n  <data name=\"ExportHelpText\" xml:space=\"preserve\">\r\n    <value>將您目前設定好的動作匯出到檔案。</value>\r\n  </data>\r\n  <data name=\"ForegroundAppText\" xml:space=\"preserve\">\r\n    <value>前台應用程式</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>自定義快捷鍵</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(請按熱鍵)</value>\r\n  </data>\r\n  <data name=\"HotkeyTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>按下 {Hotkey}</value>\r\n  </data>\r\n  <data name=\"ImportAndExportTitle\" xml:space=\"preserve\">\r\n    <value>匯入與匯出</value>\r\n  </data>\r\n  <data name=\"ImportHeaderText\" xml:space=\"preserve\">\r\n    <value>匯入</value>\r\n  </data>\r\n  <data name=\"ImportHelpText\" xml:space=\"preserve\">\r\n    <value>從檔案寫回您之前設定好的動作。</value>\r\n  </data>\r\n  <data name=\"MuteKind_Mute\" xml:space=\"preserve\">\r\n    <value>靜音</value>\r\n  </data>\r\n  <data name=\"MuteKind_ToggleMute\" xml:space=\"preserve\">\r\n    <value>切換靜音</value>\r\n  </data>\r\n  <data name=\"MuteKind_Unmute\" xml:space=\"preserve\">\r\n    <value>取消靜音</value>\r\n  </data>\r\n  <data name=\"MyActionsText\" xml:space=\"preserve\">\r\n    <value>動作</value>\r\n  </data>\r\n  <data name=\"NewActionText\" xml:space=\"preserve\">\r\n    <value>新增動作</value>\r\n  </data>\r\n  <data name=\"OptionalText\" xml:space=\"preserve\">\r\n    <value>(非必填)</value>\r\n  </data>\r\n  <data name=\"PlaybackDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>播放</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_AddText\" xml:space=\"preserve\">\r\n    <value>當處理程序正在或不在執行中</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(輸入進程名稱)</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>當 {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>進程名稱 (例如記事本)</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Start\" xml:space=\"preserve\">\r\n    <value>啟動</value>\r\n  </data>\r\n  <data name=\"ProcessEventKind_Stop\" xml:space=\"preserve\">\r\n    <value>結束</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_NotRunning\" xml:space=\"preserve\">\r\n    <value>沒有在運行</value>\r\n  </data>\r\n  <data name=\"ProcessStateKind_Running\" xml:space=\"preserve\">\r\n    <value>正在運行</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_AddText\" xml:space=\"preserve\">\r\n    <value>進程開始或結束</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_EmptyText\" xml:space=\"preserve\">\r\n    <value>(輸入進程名稱)</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_LinkText\" xml:space=\"preserve\">\r\n    <value>當 {Text} {Option}</value>\r\n  </data>\r\n  <data name=\"ProcessTrigger_PromptText\" xml:space=\"preserve\">\r\n    <value>進程名稱 (例如記事本)</value>\r\n  </data>\r\n  <data name=\"RecordingDeviceGroupText\" xml:space=\"preserve\">\r\n    <value>錄音</value>\r\n  </data>\r\n  <data name=\"RemoveText\" xml:space=\"preserve\">\r\n    <value>移除</value>\r\n  </data>\r\n  <data name=\"RequiredText\" xml:space=\"preserve\">\r\n    <value>(必需的)</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>將應用程式靜音或取消靜音</value>\r\n  </data>\r\n  <data name=\"SetAppMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} 於 {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>設置應用程式的音量</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {App} 音量至 {Volume} 於 {Device}</value>\r\n  </data>\r\n  <data name=\"SetAppVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {App} 音量至 {Volume} 於 {Device}</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_AddText\" xml:space=\"preserve\">\r\n    <value>設定預設播放裝置</value>\r\n  </data>\r\n  <data name=\"SetDefaultDeviceAction_LinkText\" xml:space=\"preserve\">\r\n    <value>將 {Device} 設為預設播放裝置</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_AddText\" xml:space=\"preserve\">\r\n    <value>靜音或取消靜音設備</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceMuteAction_LinkTextToggle\" xml:space=\"preserve\">\r\n    <value>{Option} 於 {Device}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_AddText\" xml:space=\"preserve\">\r\n    <value>設定設備音量</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkText\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} 音量到 {Volume}</value>\r\n  </data>\r\n  <data name=\"SetDeviceVolumeAction_LinkTextIncrement\" xml:space=\"preserve\">\r\n    <value>{Option} {Device} 音量到 {Volume}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_AddText\" xml:space=\"preserve\">\r\n    <value>設定區域變數</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_EmptyText\" xml:space=\"preserve\">\r\n    <value>(設定變數名稱)</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_LinkText\" xml:space=\"preserve\">\r\n    <value>將變數 {Text} 設定為 {Option}</value>\r\n  </data>\r\n  <data name=\"SetVariableAction_PromptText\" xml:space=\"preserve\">\r\n    <value>輸入變數名稱 (例如 isInGameMode)</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Decrement\" xml:space=\"preserve\">\r\n    <value>遞減</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Increment\" xml:space=\"preserve\">\r\n    <value>遞增</value>\r\n  </data>\r\n  <data name=\"SetVolumeKind_Set\" xml:space=\"preserve\">\r\n    <value>設定</value>\r\n  </data>\r\n  <data name=\"TriggerAdditionalText\" xml:space=\"preserve\">\r\n    <value>或</value>\r\n  </data>\r\n  <data name=\"TriggerVerbText\" xml:space=\"preserve\">\r\n    <value>當</value>\r\n  </data>\r\n  <data name=\"VariableCondition_AddText\" xml:space=\"preserve\">\r\n    <value>當局部變數值是 true 或 false</value>\r\n  </data>\r\n  <data name=\"VariableCondition_EmptyText\" xml:space=\"preserve\">\r\n    <value>(自定文件變量名稱)</value>\r\n  </data>\r\n  <data name=\"VariableCondition_LinkText\" xml:space=\"preserve\">\r\n    <value>變數 {Text} 為 {Option}</value>\r\n  </data>\r\n  <data name=\"VariableCondition_PromptText\" xml:space=\"preserve\">\r\n    <value>輸入變數名稱 (例如 isInGameMode)</value>\r\n  </data>\r\n  <data name=\"ToolbarDeleteText\" xml:space=\"preserve\">\r\n    <value>刪除</value>\r\n  </data>\r\n  <data name=\"ToolbarEditText\" xml:space=\"preserve\">\r\n    <value>編輯</value>\r\n  </data>\r\n  <data name=\"ToolbarSaveText\" xml:space=\"preserve\">\r\n    <value>儲存</value>\r\n  </data>\r\n  <data name=\"ChooseADeviceTitle\" xml:space=\"preserve\">\r\n    <value>選擇一個裝置</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppTitle\" xml:space=\"preserve\">\r\n    <value>選擇應用程式</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogNoText\" xml:space=\"preserve\">\r\n    <value>取消</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogText\" xml:space=\"preserve\">\r\n    <value>要刪除此動作嗎？</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogTitle\" xml:space=\"preserve\">\r\n    <value>刪除</value>\r\n  </data>\r\n  <data name=\"DeleteActionDialogYesText\" xml:space=\"preserve\">\r\n    <value>刪除</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogNoText\" xml:space=\"preserve\">\r\n    <value>取消</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogText\" xml:space=\"preserve\">\r\n    <value>確定要不儲存就離開嗎？</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogTitle\" xml:space=\"preserve\">\r\n    <value>儲存</value>\r\n  </data>\r\n  <data name=\"LeavingPageDialogYesText\" xml:space=\"preserve\">\r\n    <value>離開</value>\r\n  </data>\r\n  <data name=\"RemoveActionButtonText\" xml:space=\"preserve\">\r\n    <value>移除此動作</value>\r\n  </data>\r\n  <data name=\"RemoveActionDescriptionText\" xml:space=\"preserve\">\r\n    <value>此動作無法復原。</value>\r\n  </data>\r\n  <data name=\"RemoveActionHeadingText\" xml:space=\"preserve\">\r\n    <value>移除動作</value>\r\n  </data>\r\n  <data name=\"RemoveButtonAccessibleName\" xml:space=\"preserve\">\r\n    <value>移除</value>\r\n  </data>\r\n  <data name=\"ChooseAnAppHelpText\" xml:space=\"preserve\">\r\n    <value>以上是近期有播放過聲音的應用程式。</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeDownText\" xml:space=\"preserve\">\r\n    <value>降低所有裝置的音量</value>\r\n  </data>\r\n  <data name=\"SettingsAbsoluteVolumeUpText\" xml:space=\"preserve\">\r\n    <value>提高所有裝置的音量</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "EarTrumpet/README.md",
    "content": "# EarTrumpet Technical Documentation\r\n## Overview\r\nEarTrumpet is a Windows Presentation Foundation (WPF) app consisting of a notification area icon with a context menu, flyout and a volume mixer window. Changing the default device is available on the context menu. Hotkeys can be assigned in settings to invoke the flyout, volume mixer or open settings. The flyout and volume mixer have effectively the same controls, in both cases there is a hidden popup on each app session (type <kbd>space</kbd> or right click) that reveal sliders for each item in the app group (e.g. multiple Firefox sessions running).\r\n\r\nEarTrumpet uses the Windows Multimedia Device API to replace the system volume experience, enabling richer control of apps and devices through a modern UI with independent app controls.\r\n\r\nThe flyout is created at startup and held ready for display. The volume mixer and settings windows are single-instance and created on demand.\r\n\r\n## EarTrumpet.DataModel.AppInformation\r\n`AppInformationFactory` produces `IAppInfo` object from a process id (PID). Data (display name, icon location, background color, etc.) is uniquely extracted from desktop and modern apps. \r\n\r\n### Zombie processes\r\nLingering processes--processes that are dead but not yet cleaned up by the system--could show up in EarTrumpet.\r\n\r\n#### Edge Content Process Repro\r\n1. Start Legacy Edge, navigate to Youtube Page 1.\r\n2. Add a tab and navigate to Youtube Page 2.\r\n3. Close Page 1 tab.\r\n\r\nObserve: Zombie process is still in EarTrumpet.\r\n\r\n## EarTrumpet.DataModel.Audio\r\n### IAudioDeviceManager\r\nManages an automatically updating observable collection of devices with a default device.\r\n\r\n### IAudioDevice\r\nRepresents an audio device and its associated apps.\r\n\r\n### IAudioDeviceSession\r\nRepresents an app with an open audio session.\r\n\r\n## EarTrumpet.DataModel.Storage\r\nSettings are stored in a key/value store that is backed by Windows Storage or the registry, if the app is packaged or not respectively. `StorageFactory.GetSettings()` is used to retrieve and persist settings.\r\n\r\n### Windows Storage reliablity\r\nWe have observed a high rate of failures (via telemetry) from the `Windows.Storage.ApplicationData.Current.LocalSettings.Values` API.\r\n\r\n## EarTrumpet.DataModel\r\n### SystemSettings\r\nAccesses the user-configurable Windows settings that represent the user's personalization, accessibility, and globalization settings.\r\n\r\n### ProcessWatcherService\r\n`ProcessWatcherService` uses a background thread to wait (via `WaitForMultipleObjects`) on a list of process handles--processes EarTrumpet has audio sessions for--and waits to be signalled. This thread only waits for 5 seconds at a time, then dispatches notifications for any terminated processes.\r\n\r\n## EarTrumpet.DataModel.WindowsAudio\r\nThe Windows audio implementation of `IAudioDeviceManager` and related interfaces.\r\n\r\n### Persisted output devices\r\nWindows has the facility to set the persisted playback device on a per-application basis. This setting is persisted however it is not reliably applied at startup. EarTrumpet mitigates this for the user by manually setting the persisted playback device.\r\n\r\n### Peak values\r\nTo provide good performance, audio metering is sampled on a background thread, and then dispatched on the foreground thread as a batch.\r\n\r\n## EarTrumpet.Diagnosis\r\n### Bugsnag\r\nWe use Bugsnag as our error reporting service. Secure (TLS) connections are made to notify.bugsnag.com at notification time.\r\n\r\n### CircularBufferTraceListener\r\nContains a small internal buffer of log messages that are only shown at the users' request.\r\n\r\n### ErrorReporter\r\nEncapsulates the Bugsnag connection and manages the metadata that is sent at notification time.\r\n\r\n### LocalDataExporter\r\nTransforms an `IAudioDeviceManager` into a string for debug purposes at the users' request.\r\n\r\n### SnapshotData\r\nContains metadata dictionaries populated during crash notification or at the users' request.\r\n\r\n## EarTrumpet.Extensibility\r\nContains support for loading add-on assemblies.\r\n\r\nAdd-ons must implement a single `IAddonLifecycle` in an external add-on assembly.\r\n\r\n## EarTrumpet.Extensibility.Hosting\r\n`AddonManager` uses an `AddonResolver` to load all applicable add-ons into an `AddonHost` (`AddonManager.Host`) where they can be accessed directly.\r\n\r\n### Assembly loading\r\n`AppDomain.CurrentDomain.AssemblyResolve` locates dependent assemblies residing in add-on directories.\r\n\r\n### Version selection\r\nAdd-ons are placed in the `Versions\\[EarTrumpet version]` folder. An add-on can support multiple versions of EarTrumpet in one package.\r\n\r\nIf an compatible EarTrumpet version can't be found, the add-on won't be loaded. See `AddonResolver` for more details.\r\n\r\n## EarTrumpet.Extensibility.Shared\r\nHosts **required** static global data.\r\n\r\n### ServiceBus\r\nUsed for cross add-on communication. An add-on could register at `ApplicationLifecycleEvent.Startup` and another could retrieve the service at `ApplicationLifecycleEvent.Startup2`.\r\n\r\n## EarTrumpet.Interop\r\nContains Platform Invoke (P/Invoke) declarations and interfaces.\r\n\r\n## EarTrumpet.Interop.Helpers\r\nContains P/Invoke wrappers.\r\n\r\n## EarTrumpet.Interop.MMDeviceAPI\r\nContains core audio COM interfaces and declarations, generated from `mmdevapi.idl`. This is done by exporting to a Type Library (TLB), importing into Visual Studio, and then copying the generated artifacts. \r\n\r\n## EarTrumpet.UI\r\n## EarTrumpet.UI.Helpers\r\n### ShellNotifyIcon\r\n`Shell_NotifyIcon` is called directly because `System.Windows.Forms.NotifyIcon` does not support the newer `NOTIFICATIONDATAW` structure containing the `guidItem` member. This allows the Windows Shell to migrate notification icon settings when the app install location changes.\r\n\r\n#### Listening to mouse wheel scroll events\r\nThe `Shell_NotifyIcon` API, as of Windows 10 1903, doesn't emit scroll events. To capture scroll events, EarTrumpet uses the following scheme:\r\n\r\n1. Windows Shell generates `WM_MOUSEMOVE` message in response to cursor movement.\r\n2. EarTrumpet calls `RegisterRawInputDevices` to request `WM_INPUT` (global raw mouse input) messages.\r\n3. `WM_INPUT` messages are processed until the cursor leaves the tray icon bounds (as defined by `Shell_NotifyIconGetRect`).\r\n\r\n## EarTrumpet.UI.Themes\r\nContains WPF XAML resources used to configure the UI to resemble Windows themed UI.\r\n\r\nEarTrumpet supports all the Windows theme configurations:\r\n- High contrast\r\n- Light or dark theme (system or app)\r\n- Accent color (applied only to dark theme)\r\n- Transparency (applied to all sans high contrast)\r\n\r\nHistorical insufficient solutions:\r\n- Split Styles and DataTemplates\r\n- Replacing a `ResourceDictionary` of Brushes\r\n\r\n`Theme:Brush` applies colors at runtime using a special declaration in XAML.\r\n\r\n### Brush\r\nTheme brush values are specified on elements in XAML:\r\n```xml\r\n<TextBlock Theme:Brush.Foreground=\"SystemAccent\" />\r\n```\r\n\r\nThe simplest value is a static color: `Red` or `#FFaabbcc` or `SystemAccentDark1`. These colors will apply to all theme configurations.\r\n\r\nValues can be set for Light, Dark and HighContrast configurations:\r\n```\r\nLight=LightChromeWhite, Dark=DarkChromeWhite, HighContrast=Highlight\r\n```\r\n\r\nThe same value can also be written as:\r\n```\r\nTheme={Theme}ChromeWhite, HighContrast=Highlight\r\n```\r\n\r\n`{Theme}` is a variable that is replaced with `Light` or `Dark` as applicable.\r\n\r\nThe color channel alpha may be optionally modified using a value between `0.0-1.0`:\r\n```\r\nColor/<TransparencySetting:On|Off>\r\nColor/<TransparencySetting:On>/<TransparencySetting:Off>\r\n```\r\n\r\nExample:\r\n```\r\nLight=LightChromeWhite/0.8\r\nLight=LightChromeWhite/0.8/1\r\n```\r\n\r\nThis allows colors to be opaque when transparency isn't being used.\r\n\r\nBrush values reference colors located by:\r\n- `System.Windows.Media.ColorConverter.ConvertFromString(\"*ColorName*\")` (.e.g `#aa000000`)\r\n- `EarTrumpet.Interop.ImmersiveSystemColors.Lookup(\"*ColorName*\")` API (e.g. `SystemAccent1`)\r\n- `System.Windows.Media.Colors.*ColorName*` (e.g. `Red`)\r\n- `System.Windows.Media.SystemColors.*ColorName*` (e.g. `HotTrack`, for high contrast)\r\n- A reference like `<Theme:Ref Key=\"*ColorName*\">` in `App.xaml`.\r\n\r\n#### Theme Manager references\r\nComplex brush values can be built up using nested `<Theme:Ref.Rules>` and then referenced like a static color.\r\n\r\nThe `Rules` collection is traversed, evaluating each `Rule` using the following scheme:\r\n1. Evaluate `On` condition\r\n  - If True: Use `Value` or evaluate `Rules`\r\n  - If False: Continue to next `Rule`\r\n\r\nOnce a `Rules` collection is entered, it must terminate with a `Value` or continue to a deeper `Rules` collection, not go back to the parent looking for a match.\r\n\r\nIf no rule is found at the end, this is an programming error. Ensure that the last rule is `On=Any` (the default) to prevent this.\r\n\r\n#### Theme:Options.Source\r\nSet at the top level window and may be `App` or `System`. This specifies the theme configuration source (from `SystemSettings`). Taskbar and flyout UI use the `System` theme, while other top-level windows use the `App` theme.\r\n\r\n#### Theme:Options.Scope\r\nThis is used to specify different colors between the flyout and other experiences irrespective of theme configuration.\r\n\r\nAdding scope requires that the same tokens (Light, Dark, HighContrast) be specified equally for both scopes (even if they are the same).\r\n\r\nExample:\r\n```\r\nFlyout:Theme=Red, Flyout:HighContrast=HotTrack, :Theme=Blue, :HighContrast=HotTrack\r\n```\r\n\r\nIn this instance the flyout will use the red color, while other surfaces will use blue. High contrast will always be `HotTrack`.\r\n\r\n#### Theme:OS\r\nContains OS-specific dependency properties (only `IsWindows11` at this time) used for theming across multiple OS versions.\r\n\r\n#### Adding a new Theme:Brush.*Property*\r\nBecause Brush uses Reflection, properties are identified by string name only. This is to avoid having to special case certain elements when a property exists with the same name on many common types of elements.\r\n\r\nAdding a new brush should be accomplished by copying a block in `Brush.cs`.\r\n\r\n### Moving audio sessions between devices\r\nThe view-model layer virtualizes moving sessions across devices. This virtualization is necessary for the case where the user moves a session that has an `Inactive` state. In this case, Windows will not move the session to the new device until the next time the stream becomes `Active`, resulting in incorrect placement in the UI.\r\n\r\n## Build\r\nEarTrumpet only targets x86. Some P/Invokes will need to be updated if targeting x64 or other platforms.\r\n\r\nSee [Compiling](../COMPILING.md) for more information.\r\n\r\n### Prebuild script: prebuild.ps1\r\nUpdates `AssemblyInfo.cs` (binary file version info) and the package `AppxManifest.xml` are kept in sync. `Version.txt` is the source of truth for the version.\r\n\r\n## Debugging\r\nEarTrumpet can be debugged via the `EarTrumpet` project, or via the `EarTrumpet.Package` project, which is slower but enables debugging the packaged app.\r\n\r\n### VSDebug configuration\r\n`VSDebug` mode enables the following features over `Debug` mode:\r\n- `TemporaryAppItemViewModel` is marked with a red background color.\r\n- Avoid the app identity check which causes a handled startup exception.\r\n\r\n## Miscellaneous test reminders\r\n- Taskbar top/left/right/bottom (consider RTL!)\r\n- Taskbar auto-hide\r\n- Per-monitor DPI (Settings > change the scale for only one display on a multi-display system)\r\n- Theme pivots: light/dark, Use accent color, Use transparency\r\n- High contrast\r\n- UIAutomation / accessibility\r\n- Keyboard, Touch, Mouse input\r\n- Move taskbar to non-primary display (different DPI)\r\n- Move an audio session that is not currently playing sound\r\n- Remote desktop\r\n- Device add/remove\r\n"
  },
  {
    "path": "EarTrumpet/UI/Behaviors/ButtonEx.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Behaviors\r\n{\r\n    public class ButtonEx\r\n    {\r\n        public enum ClickActionKind\r\n        {\r\n            None,\r\n            Maximize,\r\n            Minimize,\r\n            Close\r\n        }\r\n\r\n        // ClickAction: Caption button commands.\r\n        public static ClickActionKind GetClickAction(DependencyObject obj) => (ClickActionKind)obj.GetValue(ClickActionProperty);\r\n        public static void SetClickAction(DependencyObject obj, ClickActionKind value) => obj.SetValue(ClickActionProperty, value);\r\n        public static readonly DependencyProperty ClickActionProperty =\r\n        DependencyProperty.RegisterAttached(\"ClickAction\", typeof(ClickActionKind), typeof(ButtonEx), new PropertyMetadata(ClickActionKind.None, ClickActionChanged));\r\n        private static void ClickActionChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var btn = (Button)dependencyObject;\r\n            var kind = (ClickActionKind)e.NewValue;\r\n            btn.Click += (_, __) =>\r\n            {\r\n                Debug.Assert(kind == (ClickActionKind)e.NewValue);\r\n                switch (kind)\r\n                {\r\n                    case ClickActionKind.Close:\r\n                        Window.GetWindow(btn)?.Close();\r\n                        break;\r\n                    case ClickActionKind.Minimize:\r\n                    case ClickActionKind.Maximize:\r\n                        var window = Window.GetWindow(btn);\r\n                        if (window != null)\r\n                        {\r\n                            window.WindowState = kind == ClickActionKind.Minimize ? WindowState.Minimized :\r\n                                        (window.WindowState == WindowState.Maximized) ? WindowState.Normal : WindowState.Maximized;\r\n                        }\r\n                        break;\r\n                    default: throw new NotImplementedException();\r\n                }\r\n            };\r\n        }\r\n\r\n        // ClickPopup: Attach Popup to Button.Click.\r\n        public static Popup GetClickPopup(DependencyObject obj) => (Popup)obj.GetValue(ClickPopupProperty);\r\n        public static void SetClickPopup(DependencyObject obj, Popup value) => obj.SetValue(ClickPopupProperty, value);\r\n        public static readonly DependencyProperty ClickPopupProperty =\r\n        DependencyProperty.RegisterAttached(\"ClickPopup\", typeof(Popup), typeof(ButtonEx), new PropertyMetadata(null, ClickPopupChanged));\r\n        private static void ClickPopupChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var popup = (Popup)e.NewValue;\r\n            var btn = (Button)dependencyObject;\r\n\r\n            btn.Click += (_, __) =>\r\n            {\r\n                var dpiX = Window.GetWindow(btn).DpiX();\r\n                var dpiY = Window.GetWindow(btn).DpiY();\r\n\r\n                popup.Opacity = 0;\r\n                popup.DataContext = btn.DataContext;\r\n                popup.UpdateLayout();\r\n                popup.Child.UpdateLayout();\r\n                popup.IsOpen = true;\r\n                popup.Dispatcher.BeginInvoke((Action)(() =>\r\n                {\r\n                    popup.Opacity = 1;\r\n                    popup.HorizontalOffset = -1 * (popup.Child.RenderSize.Width / dpiX) / 2;\r\n                    popup.VerticalOffset = -1 * (popup.Child.RenderSize.Height / dpiY) / 2;\r\n                    Keyboard.Focus(popup.Child.FindVisualChild<Control>());\r\n                }),\r\n                System.Windows.Threading.DispatcherPriority.DataBind, null);\r\n            };\r\n        }\r\n        \r\n        // IsToolBarButton: Fix up some issues with ContextMenu binding.\r\n        public static bool GetIsToolBarButton(DependencyObject obj) => (bool)obj.GetValue(IsToolBarButtonProperty);\r\n        public static void SetIsToolBarButton(DependencyObject obj, bool value) => obj.SetValue(IsToolBarButtonProperty, value);\r\n        public static readonly DependencyProperty IsToolBarButtonProperty =\r\n        DependencyProperty.RegisterAttached(\"IsToolBarButton\", typeof(bool), typeof(ButtonEx), new PropertyMetadata(false, IsToolBarButtonChanged));\r\n        private static void IsToolBarButtonChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            Debug.Assert((bool)e.NewValue);\r\n\r\n            var btn = (Button)dependencyObject;\r\n            btn.Click += (_, __) =>\r\n            {\r\n                var dt = (ToolbarItemViewModel)btn.DataContext;\r\n                if (dt.Menu != null)\r\n                {\r\n                    btn.ContextMenu.Opened += (___, _____) =>\r\n                    {\r\n                        // Remove exit animation.\r\n                        ((Popup)btn.ContextMenu.Parent).PopupAnimation = PopupAnimation.None;\r\n                    };\r\n                    btn.ContextMenu.PlacementTarget = btn;\r\n                    btn.ContextMenu.Placement = PlacementMode.Bottom;\r\n                    btn.ContextMenu.IsOpen = true;\r\n                }\r\n            };\r\n            btn.PreviewMouseRightButtonDown += (_, __) =>\r\n            {\r\n                var dt = (ToolbarItemViewModel)btn.DataContext;\r\n                if (dt.Menu == null)\r\n                {\r\n                    btn.ContextMenu = null;\r\n                }\r\n            };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Behaviors/ComboBoxEx.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace EarTrumpet.UI.Behaviors\r\n{\r\n    public class ComboBoxEx\r\n    {\r\n        private static readonly int MaxSearchBoxResultItems = 5;\r\n\r\n        // Since we don't use SelectionChanged, this handler makes item click work using mouse events.\r\n        public static bool GetItemClickEnabled(DependencyObject obj) => (bool)obj.GetValue(ItemClickEnabledProperty);\r\n        public static void SetItemClickEnabled(DependencyObject obj, bool value) => obj.SetValue(ItemClickEnabledProperty, value);\r\n        public static readonly DependencyProperty ItemClickEnabledProperty =\r\n        DependencyProperty.RegisterAttached(\"ItemClickEnabled\", typeof(bool), typeof(ComboBoxEx), new PropertyMetadata(false, ItemClickEnabledChanged));\r\n\r\n        private static void ItemClickEnabledChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            Debug.Assert((bool)e.NewValue == true);\r\n            var comboBoxItem = ((ComboBoxItem)dependencyObject);\r\n            comboBoxItem.PreviewMouseLeftButtonDown += OnComboBoxItemPreviewMouseLeftButtonDown;\r\n        }\r\n\r\n        private static void OnComboBoxItemPreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)\r\n        {\r\n            var comboBoxItem = (ComboBoxItem)sender;\r\n            var comboBox = comboBoxItem.FindVisualParent<ComboBox>();\r\n            var item = (SettingsSearchItemViewModel)comboBoxItem.DataContext;\r\n            InvokeSearchItem(item, comboBox);\r\n        }\r\n\r\n        // Alternate to ItemsSource that hooks up other event handlers, and also implemenets replacement text search.\r\n        public static object GetSearchItemsSource(DependencyObject obj) => (object)obj.GetValue(SearchItemsSourceProperty);\r\n        public static void SetSearchItemsSource(DependencyObject obj, object value) => obj.SetValue(SearchItemsSourceProperty, value);\r\n        public static readonly DependencyProperty SearchItemsSourceProperty =\r\n        DependencyProperty.RegisterAttached(\"SearchItemsSource\", typeof(object), typeof(ComboBoxEx), new PropertyMetadata(null, SearchItemsSourceChanged));\r\n\r\n        private static void SearchItemsSourceChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var comboBox = ((ComboBox)dependencyObject);\r\n            comboBox.AddHandler(TextBox.TextChangedEvent, new TextChangedEventHandler(OnTextChanged));\r\n            comboBox.PreviewKeyUp += OnPreviewKeyUp;\r\n        }\r\n\r\n        private static void OnPreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)\r\n        {\r\n            var comboBox = (ComboBox)sender;\r\n            var textBox = comboBox.FindVisualChild<TextBox>();\r\n\r\n            if (e.Key == System.Windows.Input.Key.Enter)\r\n            {\r\n                var item = (SettingsSearchItemViewModel)comboBox.SelectedItem;\r\n                if (item == null)\r\n                {\r\n                    item = DoSearch((SettingsViewModel)GetSearchItemsSource(comboBox), textBox.Text).FirstOrDefault();\r\n                }\r\n\r\n                InvokeSearchItem(item, comboBox);\r\n            }\r\n        }\r\n\r\n        private static void OnTextChanged(object sender, TextChangedEventArgs e)\r\n        {\r\n            var comboBox = (ComboBox)sender;\r\n            var textBox = comboBox.FindVisualChild<TextBox>();\r\n\r\n            if (!string.IsNullOrWhiteSpace(textBox.Text))\r\n            {\r\n                // Save and restore the selection because changing the ItemsSource will select an item, \r\n                // causing SelectAll behavior which then results in ovewritten/dropped keys.\r\n                var selectionStart = textBox.SelectionStart;\r\n                var selectionLength = textBox.SelectionLength;\r\n\r\n                comboBox.ItemsSource = DoSearch((SettingsViewModel)GetSearchItemsSource(comboBox), textBox.Text);\r\n                comboBox.IsDropDownOpen = true;\r\n\r\n                textBox.Select(selectionStart, selectionLength);\r\n            }\r\n            else\r\n            {\r\n                ClearComboBox(comboBox);\r\n            }\r\n        }\r\n\r\n        private static IEnumerable<SettingsSearchItemViewModel> DoSearch(SettingsViewModel viewModel, string text)\r\n        {\r\n            var results = new List<SettingsSearchItemViewModel>();\r\n\r\n            foreach (var cat in viewModel.Categories)\r\n            {\r\n                foreach (var page in cat.Pages)\r\n                {\r\n                    if (page.Title.IndexOf(text, StringComparison.InvariantCultureIgnoreCase) > -1)\r\n                    {\r\n                        results.Add(new SettingsSearchItemViewModel\r\n                        {\r\n                            DisplayName = page.Title,\r\n                            Glyph = page.Glyph,\r\n                            Invoke = () => viewModel.InvokeSearchResult(cat, page),\r\n                            SearchText = text,\r\n                        });\r\n\r\n                        if (results.Count >= MaxSearchBoxResultItems)\r\n                        {\r\n                            return results;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (results.Count == 0)\r\n            {\r\n                results.Add(new SettingsSearchItemViewModel\r\n                {\r\n                    DisplayName = Properties.Resources.SearchBoxNoResultsText,\r\n                    Invoke = () => { },\r\n                });\r\n            }\r\n            return results;\r\n        }\r\n\r\n        private static void InvokeSearchItem(SettingsSearchItemViewModel item, ComboBox comboBox)\r\n        {\r\n            ClearComboBox(comboBox);\r\n            item?.Invoke();\r\n        }\r\n\r\n        private static void ClearComboBox(ComboBox comboBox)\r\n        {\r\n            comboBox.Text = null;\r\n            comboBox.ItemsSource = null;\r\n            comboBox.IsDropDownOpen = false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Behaviors/FrameworkElementEx.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Behaviors\r\n{\r\n    public class FrameworkElementEx\r\n    {\r\n        public enum FlowDirectionKind\r\n        {\r\n            Auto,\r\n            Unset\r\n        }\r\n\r\n        // FlowDirection: Set RTL in XAML.\r\n        public static FlowDirectionKind GetFlowDirection(DependencyObject obj) => (FlowDirectionKind)obj.GetValue(FlowDirectionProperty);\r\n        public static void SetFlowDirection(DependencyObject obj, FlowDirectionKind value) => obj.SetValue(FlowDirectionProperty, value);\r\n        public static readonly DependencyProperty FlowDirectionProperty =DependencyProperty.RegisterAttached(\r\n            \"FlowDirection\", typeof(FlowDirectionKind), typeof(FrameworkElementEx), new PropertyMetadata(FlowDirectionKind.Unset, OnFlowDirectionChanged));\r\n\r\n        private static void OnFlowDirectionChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            Debug.Assert((FlowDirectionKind)e.NewValue == FlowDirectionKind.Auto);\r\n            ((FrameworkElement)dependencyObject).FlowDirection = SystemSettings.IsRTL ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;\r\n        }\r\n\r\n        // DisplaySettingsChanged: Get UI notification of DisplaySettingsChanged.\r\n        public static ICommand GetDisplaySettingsChanged(DependencyObject obj) => (ICommand)obj.GetValue(DisplaySettingsChangedProperty);\r\n        public static void SetDisplaySettingsChanged(DependencyObject obj, ICommand value) => obj.SetValue(DisplaySettingsChangedProperty, value);\r\n        public static readonly DependencyProperty DisplaySettingsChangedProperty = DependencyProperty.RegisterAttached(\r\n            \"DisplaySettingsChanged\", typeof(ICommand), typeof(FrameworkElementEx), new PropertyMetadata(null, OnDisplaySettingsChangedChanged));\r\n\r\n        private static void OnDisplaySettingsChangedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            Microsoft.Win32.SystemEvents.DisplaySettingsChanged += (_, __) =>\r\n            {\r\n                // DisplaySettingsChanged has been observed to call back on a worker thread.\r\n                dependencyObject.Dispatcher.BeginInvoke((Action)(() => ((ICommand)e.NewValue)?.Execute(null)));\r\n            };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Behaviors/ScrollViewerEx.cs",
    "content": "﻿using System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace EarTrumpet.UI.Behaviors\r\n{\r\n    public static class ScrollViewerEx\r\n    {\r\n        // ScrollToTopOnChanged: Scroll to top on any object change.\r\n        public static object GetScrollToTopOnChanged(DependencyObject obj) => (object)obj.GetValue(ScrollToTopOnChangedProperty);\r\n        public static void SetScrollToTopOnChanged(DependencyObject obj, object value) => obj.SetValue(ScrollToTopOnChangedProperty, value);\r\n        public static readonly DependencyProperty ScrollToTopOnChangedProperty =\r\n        DependencyProperty.RegisterAttached(\"ScrollToTopOnChanged\", typeof(object), typeof(ScrollViewerEx), new PropertyMetadata(null, ScrollToTopOnChanged));\r\n        private static void ScrollToTopOnChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            ((ScrollViewer)dependencyObject).ScrollToVerticalOffset(0);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Behaviors/TextBoxEx.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace EarTrumpet.UI.Behaviors\r\n{\r\n    public class TextBoxEx\r\n    {\r\n        // ClearText: Clear TextBox or the parent ComboBox.\r\n        public static bool GetClearText(DependencyObject obj) => (bool)obj.GetValue(ClearTextProperty);\r\n        public static void SetClearText(DependencyObject obj, bool value) => obj.SetValue(ClearTextProperty, value);\r\n        public static readonly DependencyProperty ClearTextProperty =\r\n        DependencyProperty.RegisterAttached(\"ClearText\", typeof(bool), typeof(TextBoxEx), new PropertyMetadata(false, ClearTextChanged));\r\n\r\n        private static void ClearTextChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if ((bool)e.NewValue == true)\r\n            {\r\n                var parent = dependencyObject.FindVisualParent<ComboBox>();\r\n                if (parent != null)\r\n                {\r\n                    parent.Text = \"\";\r\n                    parent.SelectedItem = null;\r\n                }\r\n                else\r\n                {\r\n                    // Ignore !IsLoaded to cleverly allow IsPressed=False to be our trigger but also\r\n                    // don't clear TextBoxes when they are initially created.\r\n                    var textBox = ((TextBox)dependencyObject);\r\n                    if (textBox.IsLoaded)\r\n                    {\r\n                        textBox.Text = \"\";\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/AppPopup.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.Views;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Forms;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class AppPopup : Popup\r\n    {\r\n        public AppPopup()\r\n        {\r\n            Opened += OnOpened;\r\n        }\r\n\r\n        // This is effectively custom placement, but not using PlacementMode.Custom.\r\n        // - Display popup over target\r\n        // - Calculate offset dynamically based on whether the popup is on a device or an app.\r\n        // - Consider the monitor WorkArea when positioning, and do not cover the taskbar other other docked windows.\r\n        private void OnOpened(object sender, EventArgs e)\r\n        {\r\n            var root = ((FrameworkElement)Child);\r\n            if (root == null)\r\n            {\r\n                throw new ArgumentException(\"Child\");\r\n            }\r\n\r\n            var container = (FrameworkElement)PlacementTarget;\r\n            if (container == null)\r\n            {\r\n                throw new ArgumentException(\"PlacementTarget\");\r\n            }\r\n\r\n            var relativeTo = Window.GetWindow(this);\r\n\r\n            Point offsetFromWindow = container.TranslatePoint(new Point(0, 0), relativeTo);\r\n            if ((string)container.Tag != DeviceView.DeviceListItemKey)\r\n            {\r\n                var headerHeight = (double)App.Current.Resources[\"Mutable_DeviceTitleCellHeight\"];\r\n                var popupBorderSize = (Thickness)App.Current.Resources[\"PopupBorderThickness\"];\r\n                var volumeListMargin = (Thickness)App.Current.Resources[\"VolumeAppListMargin\"];\r\n\r\n                // Adjust for the title bar, top border and top margin on the app list.\r\n                offsetFromWindow.Y -= (headerHeight + volumeListMargin.Bottom + popupBorderSize.Top);\r\n            }\r\n\r\n            Child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\r\n\r\n            var screen = Screen.FromHandle(relativeTo.GetHandle());\r\n            var scaledWorkArea = new Rect(screen.WorkingArea.Left / this.DpiX(),\r\n                                          screen.WorkingArea.Top / this.DpiY(),\r\n                                          screen.WorkingArea.Width / this.DpiX(),\r\n                                          screen.WorkingArea.Height / this.DpiY());\r\n\r\n            var popupHeight = root.DesiredSize.Height;\r\n            var popupOriginYScreenCoordinates = (relativeTo.PointToScreen(new Point(0, 0)).Y / this.DpiY()) + offsetFromWindow.Y;\r\n            // If we flow off the bottom\r\n            if (popupOriginYScreenCoordinates + popupHeight > scaledWorkArea.Bottom)\r\n            {\r\n                popupOriginYScreenCoordinates = scaledWorkArea.Bottom - popupHeight;\r\n\r\n                // If we also flow off the top\r\n                if (popupOriginYScreenCoordinates < scaledWorkArea.Top)\r\n                {\r\n                    popupOriginYScreenCoordinates = scaledWorkArea.Top;\r\n                    popupHeight = scaledWorkArea.Bottom - scaledWorkArea.Top;\r\n                }\r\n            }\r\n\r\n            Width = ((FrameworkElement)PlacementTarget).ActualWidth;\r\n            Height = popupHeight;\r\n            Placement = PlacementMode.Absolute;\r\n            HorizontalOffset = (relativeTo.PointToScreen(new Point(0, 0)).X / this.DpiX()) + offsetFromWindow.X;\r\n            VerticalOffset = popupOriginYScreenCoordinates;\r\n\r\n            Child.Focus();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/ImageEx.cs",
    "content": "﻿using EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Text;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Interop;\r\nusing System.Windows.Media;\r\nusing System.Windows.Media.Imaging;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class ImageEx : Image\r\n    {\r\n        public IAppIconSource SourceEx { get => (IAppIconSource)GetValue(SourceExProperty); set => SetValue(SourceExProperty, value); }\r\n        public static readonly DependencyProperty SourceExProperty = DependencyProperty.Register(\r\n          \"SourceEx\", typeof(IAppIconSource), typeof(ImageEx), new PropertyMetadata(null, new PropertyChangedCallback(OnSourceExChanged)));\r\n\r\n        private uint _dpi;\r\n        private static readonly string _windowsPath = Environment.GetFolderPath(Environment.SpecialFolder.Windows);\r\n        private static readonly string _systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);\r\n\r\n        public ImageEx()\r\n        {\r\n            DpiChanged += OnDpiChanged;\r\n            Loaded += (_, __) => OnSourceExChanged();\r\n        }\r\n\r\n        private void OnDpiChanged(object sender, DpiChangedEventArgs e)\r\n        {\r\n            if (IsLoaded)\r\n            {\r\n                var nextDpi = GetWindowDpi();\r\n                if (nextDpi != _dpi)\r\n                {\r\n                    _dpi = nextDpi;\r\n                    OnSourceExChanged();\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnSourceExChanged()\r\n        {\r\n            if (SourceEx != null && IsLoaded)\r\n            {\r\n                Source = LoadImage(SourceEx.IconPath, SourceEx.IsDesktopApp);\r\n            }\r\n        }\r\n\r\n        private ImageSource LoadImage(string path, bool isDesktopApp)\r\n        {\r\n            if (!string.IsNullOrWhiteSpace(path))\r\n            {\r\n                try\r\n                {\r\n                    path = Environment.ExpandEnvironmentVariables(path.TrimStart('@'));\r\n\r\n                    var scale = GetWindowDpi() / (double)96;\r\n                    if (!isDesktopApp)\r\n                    {\r\n                        return LoadShellIcon(path, isDesktopApp, (int)(Width * scale), (int)(Height * scale));\r\n                    }\r\n                    else\r\n                    {\r\n                        var iconPath = new StringBuilder(path);\r\n                        int iconIndex = Shlwapi.PathParseIconLocationW(iconPath);\r\n\r\n                        if (iconIndex != 0)\r\n                        {\r\n                            using (var icon = IconHelper.LoadIconResource(iconPath.ToString(), Math.Abs(iconIndex), (int)(Width * scale), (int)(Height * scale)))\r\n                            {\r\n                                Trace.WriteLine($\"ImageEx LoadImage {icon?.Size.Width}x{icon?.Size.Height} {path}\");\r\n                                return Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            // libmpv-based applications, like Plex, may set an invalid indirect icon path\r\n                            // https://github.com/mpv-player/mpv/issues/7269\r\n                            // (e.g. C:\\Program Files\\Plex\\Plex.exe,-IDI_ICON1)\r\n                            //\r\n                            // The legacy volume mixer falls back to enumerating icons in the image and\r\n                            // selecting an icon that 'best fits the current display device'. We will\r\n                            // mimic this behavior by stripping off the invalid resource identifier and\r\n                            // asking the shell for an appropriate icon.\r\n\r\n                            if (path.Contains(\",-\"))\r\n                            {\r\n                                path = path.Remove(path.LastIndexOf(\",-\"));\r\n                            }\r\n                            return LoadShellIcon(path, isDesktopApp, (int)(Width * scale), (int)(Height * scale));\r\n                        }\r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Trace.WriteLine($\"ImageEx LoadImage Failed: {path} {ex}\");\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        public static ImageSource LoadShellIcon(string path, bool isDesktopApp, int cx, int cy)\r\n        {\r\n            path = CanonicalizePath(path);\r\n\r\n            IShellItem2 shellItem;\r\n            try\r\n            {\r\n                shellItem = Shell32.SHCreateItemInKnownFolder(FolderIds.AppsFolder, Shell32.KF_FLAG_DONT_VERIFY, path, typeof(IShellItem2).GUID);\r\n            }\r\n            catch(Exception)\r\n            {\r\n                if (!isDesktopApp)\r\n                {\r\n                    Trace.WriteLine($\"ImageEx LoadShellIcon SHCreateItemInKnownFolder failed for non-desktop app ({path}).\");\r\n                }\r\n                shellItem = Shell32.SHCreateItemFromParsingName(path, IntPtr.Zero, typeof(IShellItem2).GUID);\r\n            }\r\n\r\n            ((IShellItemImageFactory)shellItem).GetImage(new SIZE { cx = cx, cy = cy }, SIIGBF.SIIGBF_RESIZETOFIT, out var bmp);\r\n            try\r\n            {\r\n                var ret = Imaging.CreateBitmapSourceFromHBitmap(bmp, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());\r\n                Trace.WriteLine($\"ImageEx LoadShellIcon {cx}x{cy} {path}\");\r\n                return ret;\r\n            }\r\n            finally\r\n            {\r\n                Gdi32.DeleteObject(bmp);\r\n            }\r\n        }\r\n\r\n        private static string CanonicalizePath(string path)\r\n        {\r\n            if (Path.GetDirectoryName(path).StartsWith(_systemPath, StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n                path = Path.Combine(_windowsPath, \"sysnative\", path.Substring(_systemPath.Length + 1));\r\n            }\r\n\r\n            //\r\n            // Microsoft includes garbage CortanaUI app assets (\\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\\Cortana.UI\\Assets\\App)\r\n            // so replace the appid with one that has better (than nothing) assets.\r\n            //\r\n            // Ref: https://github.com/File-New-Project/EarTrumpet/issues/1259\r\n            //\r\n            if (path.Equals(\"MicrosoftWindows.Client.CBS_cw5n1h2txyewy!CortanaUI\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n                path = \"MicrosoftWindows.Client.CBS_cw5n1h2txyewy!PackageMetadata\";\r\n            }\r\n\r\n            return path;\r\n        }\r\n\r\n        private uint GetWindowDpi() => User32.GetDpiForWindow(((HwndSource)PresentationSource.FromVisual(this)).Handle);\r\n        private static void OnSourceExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((ImageEx)d).OnSourceExChanged();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/ListView.cs",
    "content": "﻿using System;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class ListView : System.Windows.Controls.ListView\r\n    {\r\n        public event EventHandler<object> ItemInvoked;\r\n\r\n        protected override DependencyObject GetContainerForItemOverride() => new ListViewItem(this);\r\n\r\n        public void InvokeItem(ListViewItem listViewItem)\r\n        {\r\n            var viewModel = ItemContainerGenerator.ItemFromContainer(listViewItem);\r\n            ItemInvoked?.Invoke(this, viewModel);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/ListViewItem.cs",
    "content": "﻿using System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class ListViewItem : System.Windows.Controls.ListViewItem\r\n    {\r\n        private readonly ListView _parent;\r\n\r\n        public ListViewItem(ListView parent)\r\n        {\r\n            _parent = parent;\r\n        }\r\n\r\n        protected override void OnMouseUp(MouseButtonEventArgs e)\r\n        {\r\n            _parent.InvokeItem(this);\r\n            base.OnMouseUp(e);\r\n        }\r\n\r\n        protected override void OnKeyDown(KeyEventArgs e)\r\n        {\r\n            if (e.Key == Key.Enter)\r\n            {\r\n                _parent.InvokeItem(this);\r\n            }\r\n            base.OnKeyDown(e);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/MenuItemTemplateSelector.cs",
    "content": "﻿using EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class MenuItemTemplateSelector : ItemContainerTemplateSelector\r\n    {\r\n        public override DataTemplate SelectTemplate(object item, ItemsControl parentItemsControl)\r\n        {\r\n            var key = \"\";\r\n            if (item is ContextMenuSeparator)\r\n            {\r\n                key = \"ContextMenuSeparatorTemplate\";\r\n            }\r\n            else if (item is ContextMenuItem && ((ContextMenuItem)item).Children != null)\r\n            {\r\n                key = \"ContextMenuSubItemTemplate\";\r\n            }\r\n            else if (item is ContextMenuItem )\r\n            {\r\n                key = \"ContextMenuItemTemplate\";\r\n            }\r\n            else throw new NotImplementedException();\r\n\r\n            return (DataTemplate)parentItemsControl.FindResource(key);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/SearchBox.xaml",
    "content": "﻿<TextBox x:Class=\"EarTrumpet.UI.Controls.SearchBox\"\r\n         xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n         xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n         xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n         xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n         xmlns:bcl=\"clr-namespace:System;assembly=mscorlib\"\r\n         xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n         xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n         xmlns:vm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n         Style=\"{StaticResource {x:Type TextBox}}\">\r\n    <TextBox.Resources>\r\n        <DataTemplate DataType=\"{x:Type vm:SettingsSearchBoxResultsViewModel}\">\r\n            <ctl:ListView HorizontalAlignment=\"Stretch\"\r\n                          ItemContainerStyle=\"{StaticResource HoverListItemStyle}\"\r\n                          ItemInvoked=\"{Event:Binding Invoked}\"\r\n                          ItemsSource=\"{Binding Results}\"\r\n                          Style=\"{StaticResource {x:Type ListView}}\" />\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:SettingsSearchBoxResultsItemViewModel}\">\r\n            <Grid Height=\"44\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"32\" />\r\n                    <ColumnDefinition Width=\"*\" />\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <TextBlock FontSize=\"15\" Text=\"{Binding Glyph}\">\r\n                    <TextBlock.Style>\r\n                        <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                            <Setter Property=\"Theme:Brush.Foreground\" Value=\"SystemAccent\" />\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent, HighContrast=HighlightText\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </TextBlock.Style>\r\n                </TextBlock>\r\n                <TextBlock Grid.Column=\"1\"\r\n                           VerticalAlignment=\"Center\"\r\n                           FontSize=\"15\"\r\n                           Text=\"{Binding DisplayName}\">\r\n                    <TextBlock.Style>\r\n                        <Style TargetType=\"TextBlock\">\r\n                            <Setter Property=\"Theme:Brush.Foreground\" Value=\"Text\" />\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </TextBlock.Style>\r\n                </TextBlock>\r\n            </Grid>\r\n\r\n        </DataTemplate>\r\n    </TextBox.Resources>\r\n    <TextBox.Template>\r\n        <ControlTemplate TargetType=\"TextBox\">\r\n            <Border x:Name=\"border\"\r\n                    Theme:Brush.Background=\"{TemplateBinding Theme:Brush.Background}\"\r\n                    Theme:Brush.BorderBrush=\"{TemplateBinding Theme:Brush.BorderBrush}\"\r\n                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                    SnapsToDevicePixels=\"True\">\r\n                <Grid>\r\n                    <TextBlock Name=\"PromptText\"\r\n                               Margin=\"9,4\"\r\n                               Theme:Brush.Foreground=\"GrayText\"\r\n                               FontSize=\"14\"\r\n                               FontWeight=\"SemiBold\"\r\n                               Text=\"{x:Static resx:Resources.FindASettingText}\" />\r\n                    <Grid>\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"*\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                        </Grid.ColumnDefinitions>\r\n                        <ScrollViewer x:Name=\"PART_ContentHost\"\r\n                                      Margin=\"4,0\"\r\n                                      Focusable=\"false\"\r\n                                      VerticalContentAlignment=\"Center\"\r\n                                      HorizontalScrollBarVisibility=\"Hidden\"\r\n                                      VerticalScrollBarVisibility=\"Hidden\" />\r\n                        <TextBlock Name=\"SearchGlyph\"\r\n                                   Grid.Column=\"1\"\r\n                                   Margin=\"6,0\"\r\n                                   HorizontalAlignment=\"Right\"\r\n                                   Theme:Brush.Foreground=\"GrayText\"\r\n                                   FontSize=\"12\"\r\n                                   FontWeight=\"SemiBold\"\r\n                                   Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                   Text=\"&#xE721;\"\r\n                                   Visibility=\"Collapsed\" />\r\n\r\n                        <Button x:Name=\"ClearButton\"\r\n                                Grid.Column=\"1\"\r\n                                Style=\"{StaticResource BaseOverlayButton}\">\r\n                            <TextBlock x:Name=\"ClearButtonTextBlock\"\r\n                                       Margin=\"8\"\r\n                                       HorizontalAlignment=\"Center\"\r\n                                       VerticalAlignment=\"Center\"\r\n                                       Theme:Brush.Foreground=\"Theme=SearchClearGlyph, HighContrast=GrayText\"\r\n                                       FontSize=\"10\"\r\n                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                       Text=\"&#xE8BB;\" />\r\n                            <Button.Triggers>\r\n                                <EventTrigger RoutedEvent=\"Button.Click\">\r\n                                    <BeginStoryboard>\r\n                                        <Storyboard>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ClearButton\" Storyboard.TargetProperty=\"(FrameworkElement.Tag)\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"Clear\" />\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"00:00:00.1\" Value=\"\" />\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </EventTrigger>\r\n                            </Button.Triggers>\r\n                        </Button>\r\n                    </Grid>\r\n                    <Popup x:Name=\"Popup\"\r\n                           AllowsTransparency=\"False\"\r\n                           Placement=\"Bottom\"\r\n                           PopupAnimation=\"None\"\r\n                           StaysOpen=\"False\">\r\n                        <Border x:Name=\"SubmenuBorder\"\r\n                                Theme:Brush.Background=\"Theme={Theme}ChromeLow, HighContrast=Window\"\r\n                                Theme:Brush.BorderBrush=\"Light=LightChromeHigh, Dark=ControlDarkAppButtonTextDisabled/0.9, HighContrast=ControlText\"\r\n                                BorderThickness=\"1\"\r\n                                SnapsToDevicePixels=\"True\">\r\n                            <Grid>\r\n                                <ContentControl Content=\"{Binding}\" />\r\n                            </Grid>\r\n                        </Border>\r\n                    </Popup>\r\n                </Grid>\r\n            </Border>\r\n            <ControlTemplate.Triggers>\r\n                <Trigger SourceName=\"ClearButton\" Property=\"Tag\" Value=\"Clear\">\r\n                    <Setter Property=\"Text\" Value=\"\" />\r\n                </Trigger>\r\n                <Trigger Property=\"Text\" Value=\"{x:Static bcl:String.Empty}\">\r\n                    <Setter TargetName=\"ClearButton\" Property=\"Visibility\" Value=\"Collapsed\" />\r\n                    <Setter TargetName=\"SearchGlyph\" Property=\"Visibility\" Value=\"Visible\" />\r\n                </Trigger>\r\n                <Trigger SourceName=\"ClearButton\" Property=\"IsMouseOver\" Value=\"True\">\r\n                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=SystemAccent\" />\r\n                </Trigger>\r\n                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"True\">\r\n                    <Setter TargetName=\"ClearButton\" Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent\" />\r\n                    <Setter TargetName=\"ClearButtonTextBlock\" Property=\"Theme:Brush.Foreground\" Value=\"Theme=LightChromeWhite\" />\r\n                </Trigger>\r\n                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightChromeBlackMedium, Dark=ControlDarkSelectBorderRest, HighContrast=ControlText\" />\r\n                </Trigger>\r\n                <Trigger SourceName=\"ClearButton\" Property=\"IsPressed\" Value=\"True\">\r\n                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                </Trigger>\r\n                <Trigger Property=\"IsKeyboardFocused\" Value=\"True\">\r\n                    <Setter TargetName=\"border\" Property=\"Theme:Brush.Background\" Value=\"Theme=ApplicationBackgroundLightTheme\" />\r\n                    <Setter TargetName=\"border\" Property=\"Theme:Brush.BorderBrush\" Value=\"SystemAccent\" />\r\n                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextLightTheme\" />\r\n                </Trigger>\r\n            </ControlTemplate.Triggers>\r\n        </ControlTemplate>\r\n    </TextBox.Template>\r\n</TextBox>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Controls/VolumeSlider.cs",
    "content": "﻿using System;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Controls\r\n{\r\n    public class VolumeSlider : Slider\r\n    {\r\n        public float PeakValue1\r\n        {\r\n            get { return (float)this.GetValue(PeakValue1Property); }\r\n            set { this.SetValue(PeakValue1Property, value); }\r\n        }\r\n        public static readonly DependencyProperty PeakValue1Property = DependencyProperty.Register(\r\n          \"PeakValue1\", typeof(float), typeof(VolumeSlider), new PropertyMetadata(0f, new PropertyChangedCallback(PeakValueChanged)));\r\n\r\n        public float PeakValue2\r\n        {\r\n            get { return (float)this.GetValue(PeakValue2Property); }\r\n            set { this.SetValue(PeakValue2Property, value); }\r\n        }\r\n        public static readonly DependencyProperty PeakValue2Property = DependencyProperty.Register(\r\n          \"PeakValue2\", typeof(float), typeof(VolumeSlider), new PropertyMetadata(0f, new PropertyChangedCallback(PeakValueChanged)));\r\n\r\n        private Border _peakMeter1;\r\n        private Border _peakMeter2;\r\n        private Thumb _thumb;\r\n        private Point _lastMousePosition;\r\n\r\n        public VolumeSlider() : base()\r\n        {\r\n            PreviewTouchDown += OnTouchDown;\r\n            PreviewMouseDown += OnMouseDown;\r\n            TouchUp += OnTouchUp;\r\n            MouseUp += OnMouseUp;\r\n            TouchMove += OnTouchMove;\r\n            MouseMove += OnMouseMove;\r\n            MouseWheel += OnMouseWheel;\r\n            Loaded += OnLoaded;\r\n        }\r\n\r\n        private void OnLoaded(object sender, RoutedEventArgs e)\r\n        {\r\n            _thumb = (Thumb)GetTemplateChild(\"SliderThumb\");\r\n            _peakMeter1 = (Border)GetTemplateChild(\"PeakMeter1\");\r\n            _peakMeter2 = (Border)GetTemplateChild(\"PeakMeter2\");\r\n        }\r\n\r\n        protected override Size ArrangeOverride(Size arrangeBounds)\r\n        {\r\n            var ret = base.ArrangeOverride(arrangeBounds);\r\n            SizeOrVolumeOrPeakValueChanged();\r\n            return ret;\r\n        }\r\n\r\n        private static void PeakValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            ((VolumeSlider)d).SizeOrVolumeOrPeakValueChanged();\r\n        }\r\n\r\n        private void SizeOrVolumeOrPeakValueChanged()\r\n        {\r\n            if (_peakMeter1 != null)\r\n            {\r\n                _peakMeter1.Width = Math.Max(0, (ActualWidth - _thumb.ActualWidth) * PeakValue1 * (Value / 100f));\r\n            }\r\n\r\n            if (_peakMeter2 != null)\r\n            {\r\n                _peakMeter2.Width = Math.Max(0, (ActualWidth - _thumb.ActualWidth) * PeakValue2 * (Value / 100f));\r\n            }\r\n        }\r\n\r\n        private void OnTouchDown(object sender, TouchEventArgs e)\r\n        {\r\n            VisualStateManager.GoToState((FrameworkElement)sender, \"Pressed\", true);\r\n\r\n            SetPositionByControlPoint(e.GetTouchPoint(this).Position);\r\n            CaptureTouch(e.TouchDevice);\r\n\r\n            e.Handled = true;\r\n        }\r\n\r\n        private void OnMouseDown(object sender, MouseButtonEventArgs e)\r\n        {\r\n            if (e.LeftButton == MouseButtonState.Pressed)\r\n            {\r\n                _lastMousePosition = e.GetPosition(this);\r\n                VisualStateManager.GoToState((FrameworkElement)sender, \"Pressed\", true);\r\n\r\n                if (!_thumb.IsMouseOver)\r\n                {\r\n                    SetPositionByControlPoint(_lastMousePosition);\r\n                }\r\n\r\n                CaptureMouse();\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        private void OnTouchUp(object sender, TouchEventArgs e)\r\n        {\r\n            VisualStateManager.GoToState((FrameworkElement)sender, \"Normal\", true);\r\n\r\n            ReleaseTouchCapture(e.TouchDevice);\r\n            e.Handled = true;\r\n        }\r\n\r\n        private void OnMouseUp(object sender, MouseButtonEventArgs e)\r\n        {\r\n            if (IsMouseCaptured)\r\n            {\r\n                // If the point is outside of the control, clear the hover state.\r\n                Rect rcSlider = new Rect(0, 0, ActualWidth, ActualHeight);\r\n                if (!rcSlider.Contains(e.GetPosition(this)))\r\n                {\r\n                    VisualStateManager.GoToState((FrameworkElement)sender, \"Normal\", true);\r\n                }\r\n\r\n                ReleaseMouseCapture();\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        private void OnTouchMove(object sender, TouchEventArgs e)\r\n        {\r\n            if (AreAnyTouchesCaptured)\r\n            {\r\n                SetPositionByControlPoint(e.GetTouchPoint(this).Position);\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        private void OnMouseMove(object sender, MouseEventArgs e)\r\n        {\r\n            var mousePosition = e.GetPosition(this);\r\n            if (IsMouseCaptured && mousePosition != _lastMousePosition)\r\n            {\r\n                _lastMousePosition = mousePosition;\r\n                SetPositionByControlPoint(e.GetPosition(this));\r\n            }\r\n        }\r\n\r\n        private void OnMouseWheel(object sender, MouseWheelEventArgs e)\r\n        {\r\n            var amount = Math.Sign(e.Delta) * 2.0;\r\n            ChangePositionByAmount(amount);\r\n            e.Handled = true;\r\n        }\r\n\r\n        public void SetPositionByControlPoint(Point point)\r\n        {\r\n            var percent = point.X / ActualWidth;\r\n            Value = Bound((Maximum - Minimum) * percent);\r\n        }\r\n\r\n        public void ChangePositionByAmount(double amount)\r\n        {\r\n            Value = Bound(Value + amount);\r\n        }\r\n\r\n        public double Bound(double val)\r\n        {\r\n            return Math.Max(Minimum, Math.Min(Maximum, val));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/FlyoutViewState.cs",
    "content": "﻿namespace EarTrumpet.UI.Helpers\r\n{\r\n    public enum FlyoutViewState\r\n    {\r\n        NotLoaded,      // Initialization phase (startup)\r\n        Hidden,         // Flyout is fully ready to begin a show cycle\r\n        Opening,        // Open animation\r\n        Open,\r\n        Closing_Stage1, // Closing (animation optimal)\r\n        Closing_Stage2, // Delay de-bounce state to avoid unstable open/hide.\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/IAppIconSource.cs",
    "content": "﻿namespace EarTrumpet.UI.Helpers\r\n{\r\n    public interface IAppIconSource\r\n    {\r\n        bool IsDesktopApp { get; }\r\n        string IconPath { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/IShellNotifyIconSource.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public interface IShellNotifyIconSource\r\n    {\r\n        event Action<IShellNotifyIconSource> Changed;\r\n        System.Drawing.Icon Current { get; }\r\n        void OnMouseOverChanged(bool isMouseOver);\r\n        void CheckForUpdate();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/NavigationCookie.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class NavigationCookie\r\n    {\r\n        Action _action;\r\n        public NavigationCookie(Action action)\r\n        {\r\n            _action = action;\r\n        }\r\n\r\n        public void Execute()\r\n        {\r\n            _action.Invoke();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/RelayCommand.cs",
    "content": "﻿using System;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class RelayCommand : ICommand\r\n    {\r\n        private Action _actionToExecute;\r\n\r\n        public event EventHandler CanExecuteChanged;\r\n\r\n        public RelayCommand(Action actionToExecute)\r\n        {\r\n            _actionToExecute = actionToExecute;\r\n        }\r\n\r\n        public bool CanExecute(object parameter = null)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public void Execute(object parameter = null)\r\n        {\r\n            if (_actionToExecute == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            _actionToExecute.Invoke();\r\n        }\r\n\r\n        public void RaiseCanExecuteChanged()\r\n        {\r\n            if (CanExecuteChanged != null)\r\n            {\r\n                CanExecuteChanged.Invoke(this, null);\r\n            }\r\n        }\r\n    }\r\n\r\n    public class RelayCommand<T> : ICommand\r\n    {\r\n        private Action<T> _actionToExecute;\r\n\r\n        public event EventHandler CanExecuteChanged;\r\n\r\n        public RelayCommand(Action<T> actionToExecute)\r\n        {\r\n            _actionToExecute = actionToExecute;\r\n        }\r\n\r\n        public bool CanExecute(object parameter = null)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public void Execute(object parameter = null)\r\n        {\r\n            if (_actionToExecute == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            _actionToExecute.Method.Invoke(_actionToExecute.Target, new object[] { parameter });\r\n        }\r\n\r\n        public void RaiseCanExecuteChanged()\r\n        {\r\n            if (CanExecuteChanged != null)\r\n            {\r\n                CanExecuteChanged.Invoke(this, null);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/ShellNotifyIcon.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections;\r\nusing System.Diagnostics;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Controls.Primitives;\r\nusing System.Windows.Input;\r\nusing System.Windows.Interop;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class ShellNotifyIcon\r\n    {\r\n        public class SecondaryInvokeArgs\r\n        {\r\n            public InputType InputType { get; set; }\r\n            public Point Point { get; set; }\r\n        }\r\n\r\n        public event EventHandler<InputType> PrimaryInvoke;\r\n        public event EventHandler<SecondaryInvokeArgs> SecondaryInvoke;\r\n        public event EventHandler<InputType> TertiaryInvoke;\r\n        public event EventHandler<int> Scrolled;\r\n\r\n        public IShellNotifyIconSource IconSource { get; private set; }\r\n        public bool IsMouseOver { get; private set; }\r\n\r\n        public bool IsVisible\r\n        {\r\n            get => _isVisible;\r\n            set\r\n            {\r\n                if (value != _isVisible)\r\n                {\r\n                    _isVisible = value;\r\n                    Update();\r\n                    Trace.WriteLine($\"ShellNotifyIcon IsVisible {_isVisible}\");\r\n                }\r\n            }\r\n        }\r\n\r\n        private const int WM_CALLBACKMOUSEMSG = User32.WM_USER + 1024;\r\n\r\n        private readonly Win32Window _window;\r\n        private readonly DispatcherTimer _invalidationTimer;\r\n        private bool _isCreated;\r\n        private bool _isVisible;\r\n        private bool _isListeningForInput;\r\n        private bool _isContextMenuOpen;\r\n        private string _text;\r\n        private RECT _iconLocation;\r\n        private System.Drawing.Point _cursorPosition;\r\n        private int _remainingTicks;\r\n        private bool _hasAlreadyProcessedButtonUp;\r\n        private bool HasAlreadyProcessedButtonUp\r\n        {\r\n            get\r\n            {\r\n                var val = _hasAlreadyProcessedButtonUp;\r\n                _hasAlreadyProcessedButtonUp = false;\r\n                return val;\r\n            }\r\n            set\r\n            {\r\n                _hasAlreadyProcessedButtonUp = value;\r\n            }\r\n        }\r\n\r\n        public ShellNotifyIcon(IShellNotifyIconSource icon)\r\n        {\r\n            IconSource = icon;\r\n            IconSource.Changed += (_) => Update();\r\n            _window = new Win32Window();\r\n            _window.Initialize(WndProc);\r\n            _invalidationTimer = new DispatcherTimer(TimeSpan.FromMilliseconds(500), DispatcherPriority.Normal, (_, __) => OnDelayedIconCheckForUpdate(), Dispatcher.CurrentDispatcher);\r\n\r\n            Themes.Manager.Current.PropertyChanged += (_, __) => ScheduleDelayedIconInvalidation();\r\n            Microsoft.Win32.SystemEvents.DisplaySettingsChanged += (_, __) => ScheduleDelayedIconInvalidation();\r\n        }\r\n\r\n        public void SetFocus()\r\n        {\r\n            Trace.WriteLine(\"ShellNotifyIcon SetFocus\");\r\n            var data = MakeData();\r\n            if (!Shell32.Shell_NotifyIconW(Shell32.NotifyIconMessage.NIM_SETFOCUS, ref data))\r\n            {\r\n                Trace.WriteLine($\"ShellNotifyIcon NIM_SETFOCUS Failed: {(uint)Marshal.GetLastWin32Error()}\");\r\n            }\r\n        }\r\n\r\n        public void SetTooltip(string text)\r\n        {\r\n            _text = text;\r\n            Update();\r\n        }\r\n\r\n        private NOTIFYICONDATAW MakeData()\r\n        {\r\n            return new NOTIFYICONDATAW\r\n            {\r\n                cbSize = Marshal.SizeOf(typeof(NOTIFYICONDATAW)),\r\n                hWnd = _window.Handle,\r\n                uFlags = NotifyIconFlags.NIF_MESSAGE | NotifyIconFlags.NIF_ICON | NotifyIconFlags.NIF_TIP | NotifyIconFlags.NIF_SHOWTIP,\r\n                uCallbackMessage = WM_CALLBACKMOUSEMSG,\r\n                hIcon = IconSource.Current.Handle,\r\n                szTip = _text\r\n            };\r\n        }\r\n\r\n        private void Update()\r\n        {\r\n            var data = MakeData();\r\n            if (_isVisible)\r\n            {\r\n                if (_isCreated)\r\n                {\r\n                    if (!Shell32.Shell_NotifyIconW(Shell32.NotifyIconMessage.NIM_MODIFY, ref data))\r\n                    {\r\n                        // Modification will fail when the shell restarts, or if message processing times out\r\n                        Trace.WriteLine($\"ShellNotifyIcon Update NIM_MODIFY Failed: {(uint)Marshal.GetLastWin32Error()}\");\r\n                        _isCreated = false;\r\n                        Update();\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (!Shell32.Shell_NotifyIconW(Shell32.NotifyIconMessage.NIM_ADD, ref data))\r\n                    {\r\n                        Trace.WriteLine($\"ShellNotifyIcon Update NIM_ADD Failed {(uint)Marshal.GetLastWin32Error()}\");\r\n                    }\r\n\r\n                    _isCreated = true;\r\n                    data.uTimeoutOrVersion = Shell32.NOTIFYICON_VERSION_4;\r\n                    if (!Shell32.Shell_NotifyIconW(Shell32.NotifyIconMessage.NIM_SETVERSION, ref data))\r\n                    {\r\n                        Trace.WriteLine($\"ShellNotifyIcon Update NIM_SETVERSION Failed: {(uint)Marshal.GetLastWin32Error()}\");\r\n                    }\r\n                }\r\n            }\r\n            else if (_isCreated)\r\n            {\r\n                if (!Shell32.Shell_NotifyIconW(Shell32.NotifyIconMessage.NIM_DELETE, ref data))\r\n                {\r\n                    Trace.WriteLine($\"ShellNotifyIcon Update NIM_DELETE Failed: {(uint)Marshal.GetLastWin32Error()}\");\r\n                }\r\n                _isCreated = false;\r\n            }\r\n        }\r\n\r\n        private void WndProc(System.Windows.Forms.Message msg)\r\n        {\r\n            if (msg.Msg == WM_CALLBACKMOUSEMSG)\r\n            {\r\n                CallbackMsgWndProc(msg);\r\n            }\r\n            else if (msg.Msg == Shell32.WM_TASKBARCREATED ||\r\n                    (msg.Msg == User32.WM_SETTINGCHANGE && (int)msg.WParam == User32.SPI_SETWORKAREA))\r\n            {\r\n                ScheduleDelayedIconInvalidation();\r\n            }\r\n            else if (msg.Msg == User32.WM_INPUT)\r\n            {\r\n                _cursorPosition = System.Windows.Forms.Cursor.Position;\r\n                if (InputHelper.ProcessMouseInputMessage(msg.LParam, ref _cursorPosition, out int wheelDelta) &&\r\n                                IsCursorWithinNotifyIconBounds() && wheelDelta != 0)\r\n                {\r\n                    Scrolled?.Invoke(this, wheelDelta);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void CallbackMsgWndProc(System.Windows.Forms.Message msg)\r\n        {\r\n            switch ((short)msg.LParam)\r\n            {\r\n                case (short)Shell32.NotifyIconNotification.NIN_SELECT:\r\n                case User32.WM_LBUTTONUP:\r\n                    // Observed double WM_CALLBACKMOUSEMSG/WM_LBUTTONUP pairs on Windows 11 22533\r\n                    // Could be a result of XAML island use in Taskbar. Or a bug elsewhere.\r\n                    // For now, swallow the duplicate to improve flyout UX.\r\n                    if (!HasAlreadyProcessedButtonUp)\r\n                    {\r\n                        HasAlreadyProcessedButtonUp = true;\r\n                        PrimaryInvoke?.Invoke(this, InputType.Mouse);\r\n                    }\r\n                    break;\r\n                case (short)Shell32.NotifyIconNotification.NIN_KEYSELECT:\r\n                    PrimaryInvoke?.Invoke(this, InputType.Keyboard);\r\n                    break;\r\n                case User32.WM_MBUTTONUP:\r\n                    TertiaryInvoke?.Invoke(this, InputType.Mouse);\r\n                    break;\r\n                case User32.WM_CONTEXTMENU:\r\n                    SecondaryInvoke?.Invoke(this, CreateSecondaryInvokeArgs(InputType.Keyboard, msg.WParam));\r\n                    break;\r\n                case User32.WM_RBUTTONUP:\r\n                    SecondaryInvoke?.Invoke(this, CreateSecondaryInvokeArgs(InputType.Mouse, msg.WParam));\r\n                    break;\r\n                case User32.WM_MOUSEMOVE:\r\n                    OnNotifyIconMouseMove();\r\n                    IconSource.CheckForUpdate();\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private SecondaryInvokeArgs CreateSecondaryInvokeArgs(InputType type, IntPtr wParam) => new SecondaryInvokeArgs\r\n        {\r\n            InputType = type,\r\n            Point = new Point((short)wParam.ToInt32(), wParam.ToInt32() >> 16)\r\n        };\r\n\r\n        private void OnNotifyIconMouseMove()\r\n        {\r\n            var id = new NOTIFYICONIDENTIFIER\r\n            {\r\n                cbSize = Marshal.SizeOf(typeof(NOTIFYICONIDENTIFIER)),\r\n                hWnd = _window.Handle\r\n            };\r\n\r\n            if (Shell32.Shell_NotifyIconGetRect(ref id, out RECT location) == 0)\r\n            {\r\n                _iconLocation = location;\r\n                _cursorPosition = System.Windows.Forms.Cursor.Position;\r\n                IsCursorWithinNotifyIconBounds();\r\n            }\r\n            else\r\n            {\r\n                _iconLocation = default(RECT);\r\n            }\r\n        }\r\n\r\n        private bool IsCursorWithinNotifyIconBounds()\r\n        {\r\n            bool isInBounds = _iconLocation.Contains(_cursorPosition);\r\n            if (isInBounds)\r\n            {\r\n                if (!_isListeningForInput)\r\n                {\r\n                    _isListeningForInput = true;\r\n                    InputHelper.RegisterForMouseInput(_window.Handle);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                if (_isListeningForInput)\r\n                {\r\n                    _isListeningForInput = false;\r\n                    InputHelper.UnregisterForMouseInput();\r\n                }\r\n            }\r\n\r\n            bool isChanged = (IsMouseOver != isInBounds);\r\n            IsMouseOver = isInBounds;\r\n            if (isChanged)\r\n            {\r\n                IconSource.OnMouseOverChanged(IsMouseOver);\r\n            }\r\n\r\n            return isInBounds;\r\n        }\r\n\r\n        private void ScheduleDelayedIconInvalidation()\r\n        {\r\n            _remainingTicks = 10;\r\n            _invalidationTimer.Start();\r\n\r\n            IconSource.CheckForUpdate();\r\n        }\r\n\r\n        private void OnDelayedIconCheckForUpdate()\r\n        {\r\n            _remainingTicks--;\r\n            if (_remainingTicks <= 0)\r\n            {\r\n                _invalidationTimer.Stop();\r\n                // Force a final update to protect us from the shell doing implicit work\r\n                Update();\r\n            }\r\n\r\n            IconSource.CheckForUpdate();\r\n        }\r\n\r\n        public void ShowContextMenu(IEnumerable itemsSource, Point point)\r\n        {\r\n            if (!_isContextMenuOpen)\r\n            {\r\n                _isContextMenuOpen = true;\r\n                Trace.WriteLine(\"ShellNotifyIcon ShowContextMenu\");\r\n                var contextMenu = new ContextMenu\r\n                {\r\n                    FlowDirection = SystemSettings.IsRTL ? FlowDirection.RightToLeft : FlowDirection.LeftToRight,\r\n                    StaysOpen = true,\r\n                    ItemsSource = itemsSource\r\n                };\r\n\r\n                if (point.X > 0 && point.Y > 0)\r\n                {\r\n                    contextMenu.Placement = PlacementMode.Top;\r\n                    contextMenu.PlacementRectangle = Rect.Empty;\r\n                    contextMenu.PlacementTarget = null;\r\n                    contextMenu.HorizontalOffset = point.X / (WindowsTaskbar.Dpi / (double)96);\r\n                    contextMenu.VerticalOffset = point.Y / (WindowsTaskbar.Dpi / (double)96);\r\n                }\r\n\r\n                Themes.Options.SetSource(contextMenu, Themes.Options.SourceKind.System);\r\n                contextMenu.PreviewKeyDown += (_, e) =>\r\n                {\r\n                    if (e.Key == Key.Escape)\r\n                    {\r\n                        SetFocus();\r\n                    }\r\n                };\r\n                contextMenu.Opened += (_, __) =>\r\n                {\r\n                    Trace.WriteLine(\"ShellNotifyIcon ContextMenu.Opened\");\r\n                // Workaround: The framework expects there to already be a WPF window open and thus fails to take focus.\r\n                User32.SetForegroundWindow(((HwndSource)HwndSource.FromVisual(contextMenu)).Handle);\r\n                    contextMenu.Focus();\r\n                    contextMenu.StaysOpen = false;\r\n                // Disable only the exit animation.\r\n                ((Popup)contextMenu.Parent).PopupAnimation = PopupAnimation.None;\r\n                };\r\n                contextMenu.Closed += (_, __) =>\r\n                {\r\n                    Trace.WriteLine(\"ShellNotifyIcon ContextMenu.Closed\");\r\n                    _isContextMenuOpen = false;\r\n                };\r\n                contextMenu.IsOpen = true;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/Helpers/SystemSoundsHelper.cs",
    "content": "﻿using System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class SystemSoundsHelper\r\n    {\r\n        public static ICommand PlayBeepSound { get; set; }\r\n\r\n        static SystemSoundsHelper()\r\n        {\r\n            PlayBeepSound = new RelayCommand(() => System.Media.SystemSounds.Beep.Play());\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/TaskbarIconSource.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Drawing;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class TaskbarIconSource : IShellNotifyIconSource\r\n    {\r\n        enum IconKind\r\n        {\r\n            EarTrumpet,\r\n            EarTrumpet_LightTheme,\r\n            Muted,\r\n            SpeakerZeroBars,\r\n            SpeakerOneBar,\r\n            SpeakerTwoBars,\r\n            SpeakerThreeBars,\r\n            NoDevice,\r\n        }\r\n\r\n        public event Action<IShellNotifyIconSource> Changed;\r\n\r\n        public Icon Current { get; private set; }\r\n\r\n        private readonly DeviceCollectionViewModel _collection;\r\n        private readonly AppSettings _settings;\r\n        private bool _isMouseOver;\r\n        private string _hash;\r\n        private IconKind _kind;\r\n\r\n        public TaskbarIconSource(DeviceCollectionViewModel collection, AppSettings settings)\r\n        {\r\n            _collection = collection;\r\n            _settings = settings;\r\n\r\n            _settings.UseLegacyIconChanged += (_, __) => CheckForUpdate();\r\n            collection.TrayPropertyChanged += OnTrayPropertyChanged;\r\n\r\n            OnTrayPropertyChanged();\r\n        }\r\n\r\n        public void OnMouseOverChanged(bool isMouseOver)\r\n        {\r\n            _isMouseOver = isMouseOver;\r\n            CheckForUpdate();\r\n        }\r\n\r\n        public void CheckForUpdate()\r\n        {\r\n            var nextHash = GetHash();\r\n            if (nextHash != _hash)\r\n            {\r\n                Trace.WriteLine($\"TaskbarIconSource Changed: {nextHash}\");\r\n                _hash = nextHash;\r\n                using (var old = Current)\r\n                {\r\n                    Current = SelectAndLoadIcon(_kind);\r\n                    Changed?.Invoke(this);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnTrayPropertyChanged()\r\n        {\r\n            _kind = IconKindFromDeviceCollection(_collection);\r\n            CheckForUpdate();\r\n        }\r\n\r\n        private Icon SelectAndLoadIcon(IconKind kind)\r\n        {\r\n            if (_settings.UseLegacyIcon)\r\n            {\r\n                kind = IconKind.EarTrumpet;\r\n            }\r\n\r\n            try\r\n            {\r\n                if (System.Windows.SystemParameters.HighContrast)\r\n                {\r\n                    using (var icon = LoadIcon(kind))\r\n                    {\r\n                        return ColorIconForHighContrast(icon, kind, _isMouseOver);\r\n                    }\r\n                }\r\n                else if (SystemSettings.IsSystemLightTheme)\r\n                {\r\n                    if (kind == IconKind.EarTrumpet)\r\n                    {\r\n                        return LoadIcon(IconKind.EarTrumpet_LightTheme);\r\n                    }\r\n                    else\r\n                    {\r\n                        using (var icon = LoadIcon(kind))\r\n                        {\r\n                            return ColorIconForLightTheme(icon, kind);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    return LoadIcon(kind);\r\n                }\r\n            }\r\n            // Legacy fallback if SndVolSSD.dll icons are unavailable.\r\n            catch (Exception ex) when (kind != IconKind.EarTrumpet)\r\n            {\r\n                Trace.WriteLine($\"TaskbarIconSource LoadIcon: {ex}\");\r\n                return SelectAndLoadIcon(IconKind.EarTrumpet);\r\n            }\r\n        }\r\n\r\n        private static Icon LoadIcon(IconKind kind)\r\n        {\r\n            uint dpi = WindowsTaskbar.Dpi;\r\n            switch (kind)\r\n            {\r\n                case IconKind.EarTrumpet:\r\n                    return IconHelper.LoadIconForTaskbar((string)App.Current.Resources[\"EarTrumpetIconDark\"], dpi);\r\n                case IconKind.EarTrumpet_LightTheme:\r\n                    return IconHelper.LoadIconForTaskbar((string)App.Current.Resources[\"EarTrumpetIconLight\"], dpi);\r\n                case IconKind.Muted:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.Muted), dpi);\r\n                case IconKind.NoDevice:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.NoDevice), dpi);\r\n                case IconKind.SpeakerZeroBars:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.SpeakerZeroBars), dpi);\r\n                case IconKind.SpeakerOneBar:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.SpeakerOneBar), dpi);\r\n                case IconKind.SpeakerTwoBars:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.SpeakerTwoBars), dpi);\r\n                case IconKind.SpeakerThreeBars:\r\n                    return IconHelper.LoadIconForTaskbar(SndVolSSO.GetPath(SndVolSSO.IconId.SpeakerThreeBars), dpi);\r\n                default: throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private string GetHash() =>\r\n            $\"kind={_kind} \" +\r\n            $\"{(System.Windows.SystemParameters.HighContrast ? $\"hc=true mouse={_isMouseOver} \" : \"\")}\" +\r\n            $\"dpi={WindowsTaskbar.Dpi} \" +\r\n            $\"isSysLight={SystemSettings.IsSystemLightTheme} \" +\r\n            $\"isLegacy={_settings.UseLegacyIcon}\";\r\n\r\n        // Only fill part of the icon, so we can preserve the red X.\r\n        private static double GetIconFillPercent(IconKind kind) => kind == IconKind.NoDevice ? 0.4 : 1;\r\n\r\n        private static Icon ColorIconForLightTheme(Icon darkIcon, IconKind kind)\r\n        {\r\n            return IconHelper.ColorIcon(darkIcon, GetIconFillPercent(kind), System.Windows.Media.Colors.Black);\r\n        }\r\n\r\n        private static Icon ColorIconForHighContrast(Icon darkIcon, IconKind kind, bool isMouseOver)\r\n        {\r\n            return IconHelper.ColorIcon(darkIcon, GetIconFillPercent(kind),\r\n                isMouseOver ? System.Windows.SystemColors.HighlightTextColor : System.Windows.SystemColors.WindowTextColor);\r\n        }\r\n\r\n        private static IconKind IconKindFromDeviceCollection(DeviceCollectionViewModel collectionViewModel)\r\n        {\r\n            if (collectionViewModel.Default != null)\r\n            {\r\n                switch (collectionViewModel.Default.IconKind)\r\n                {\r\n                    case DeviceViewModel.DeviceIconKind.Mute:\r\n                        return IconKind.Muted;\r\n                    case DeviceViewModel.DeviceIconKind.Bar0:\r\n                        return IconKind.SpeakerZeroBars;\r\n                    case DeviceViewModel.DeviceIconKind.Bar1:\r\n                        return IconKind.SpeakerOneBar;\r\n                    case DeviceViewModel.DeviceIconKind.Bar2:\r\n                        return IconKind.SpeakerTwoBars;\r\n                    case DeviceViewModel.DeviceIconKind.Bar3:\r\n                        return IconKind.SpeakerThreeBars;\r\n                    default: throw new NotImplementedException();\r\n                }\r\n            }\r\n            return IconKind.NoDevice;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/WindowAnimationLibrary.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Themes;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Media.Animation;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class WindowAnimationLibrary\r\n    {\r\n        const int _animationOffset = 25;\r\n\r\n        public static void BeginFlyoutEntranceAnimation(Window window, WindowsTaskbar.State taskbar, Action completed)\r\n        {\r\n            var onCompleted = new EventHandler((s, e) =>\r\n            {\r\n                window.Topmost = true;\r\n                window.Focus();\r\n                User32.SetForegroundWindow(window.GetHandle());\r\n                completed();\r\n            });\r\n\r\n            window.Topmost = false;\r\n            window.Activate();\r\n            BringTaskbarToFront();\r\n\r\n            if (!Manager.Current.AnimationsEnabled)\r\n            {\r\n                window.Cloak(false);\r\n                onCompleted(null, null);\r\n                return;\r\n            }\r\n\r\n            var moveAnimation = new DoubleAnimation\r\n            {\r\n                Duration = new Duration(TimeSpan.FromMilliseconds(130)),\r\n                FillBehavior = FillBehavior.Stop,\r\n                EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseOut }\r\n            };\r\n\r\n            var fadeAnimation = new DoubleAnimation\r\n            {\r\n                Duration = new Duration(TimeSpan.FromMilliseconds(140)),\r\n                FillBehavior = FillBehavior.Stop,\r\n                EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseOut },\r\n                From = 0.8,\r\n                To = 1\r\n            };\r\n            fadeAnimation.Completed += (s, e) => { window.Opacity = 1; };\r\n            Storyboard.SetTarget(fadeAnimation, window);\r\n            Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath(Window.OpacityProperty));\r\n\r\n            double moveAnimationTo;\r\n            switch (taskbar.Location)\r\n            {\r\n                case WindowsTaskbar.Position.Left:\r\n                    moveAnimationTo = window.Left;\r\n                    window.Left -= _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Right:\r\n                    moveAnimationTo = window.Left;\r\n                    window.Left += _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Top:\r\n                    moveAnimationTo = window.Top;\r\n                    window.Top -= _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Bottom:\r\n                default:\r\n                    moveAnimationTo = window.Top;\r\n                    window.Top += _animationOffset;\r\n                    break;\r\n            }\r\n            moveAnimation.To = moveAnimationTo;\r\n\r\n            if (taskbar.Location == WindowsTaskbar.Position.Left || taskbar.Location == WindowsTaskbar.Position.Right)\r\n            {\r\n                Storyboard.SetTarget(moveAnimation, window);\r\n                Storyboard.SetTargetProperty(moveAnimation, new PropertyPath(Window.LeftProperty));\r\n                moveAnimation.From = window.Left;\r\n            }\r\n            else\r\n            {\r\n                Storyboard.SetTarget(moveAnimation, window);\r\n                Storyboard.SetTargetProperty(moveAnimation, new PropertyPath(Window.TopProperty));\r\n                moveAnimation.From = window.Top;\r\n            }\r\n\r\n            if (SystemSettings.IsTransparencyEnabled)\r\n            {\r\n                window.Opacity = 0.8;\r\n            }\r\n\r\n            window.Cloak(false);\r\n\r\n            var storyboard = new Storyboard();\r\n            storyboard.FillBehavior = FillBehavior.Stop;\r\n            storyboard.Children.Add(moveAnimation);\r\n\r\n            if (SystemSettings.IsTransparencyEnabled)\r\n            {\r\n                storyboard.Children.Add(fadeAnimation);\r\n            }\r\n\r\n            storyboard.Completed += (s, e) =>\r\n            {\r\n                if (taskbar.IsHorizontal)\r\n                {\r\n                    window.Top = moveAnimationTo;\r\n                }\r\n                else\r\n                {\r\n                    window.Left = moveAnimationTo;\r\n                }\r\n            };\r\n            storyboard.Completed += onCompleted;\r\n\r\n            storyboard.Begin(window);\r\n        }\r\n\r\n        public static void BeginFlyoutExitanimation(Window window, Action completed)\r\n        {\r\n            var onCompleted = new EventHandler((s, e) =>\r\n            {\r\n                window.Cloak();\r\n                completed();\r\n            });\r\n\r\n            window.Topmost = false;\r\n\r\n            if (!Manager.Current.AnimationsEnabled)\r\n            {\r\n                onCompleted(null, null);\r\n                return;\r\n            }\r\n\r\n            var moveAnimation = new DoubleAnimation\r\n            {\r\n                Duration = new Duration(TimeSpan.FromMilliseconds(150)),\r\n                FillBehavior = FillBehavior.Stop,\r\n                EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseOut }\r\n            };\r\n\r\n            var fadeAnimation = new DoubleAnimation\r\n            {\r\n                Duration = new Duration(TimeSpan.FromMilliseconds(150)),\r\n                FillBehavior = FillBehavior.Stop,\r\n                EasingFunction = new QuinticEase { EasingMode = EasingMode.EaseOut },\r\n                From = 1,\r\n                To = 0.75,\r\n            };\r\n            fadeAnimation.Completed += (s, e) => { window.Opacity = 0; };\r\n\r\n            Storyboard.SetTarget(fadeAnimation, window);\r\n            Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath(Window.OpacityProperty));\r\n\r\n            var taskbarPosition = WindowsTaskbar.Current.Location;\r\n\r\n            switch (taskbarPosition)\r\n            {\r\n                case WindowsTaskbar.Position.Left:\r\n                    moveAnimation.To = window.Left - _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Right:\r\n                    moveAnimation.To = window.Left - _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Top:\r\n                    moveAnimation.To = window.Top - _animationOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Bottom:\r\n                default:\r\n                    moveAnimation.To = window.Top + _animationOffset;\r\n                    break;\r\n            }\r\n\r\n            if (taskbarPosition == WindowsTaskbar.Position.Left || taskbarPosition == WindowsTaskbar.Position.Right)\r\n            {\r\n                Storyboard.SetTarget(moveAnimation, window);\r\n                Storyboard.SetTargetProperty(moveAnimation, new PropertyPath(Window.LeftProperty));\r\n                moveAnimation.From = window.Left;\r\n            }\r\n            else\r\n            {\r\n                Storyboard.SetTarget(moveAnimation, window);\r\n                Storyboard.SetTargetProperty(moveAnimation, new PropertyPath(Window.TopProperty));\r\n                moveAnimation.From = window.Top;\r\n            }\r\n\r\n            var storyboard = new Storyboard();\r\n            storyboard.FillBehavior = FillBehavior.Stop;\r\n            storyboard.Children.Add(moveAnimation);\r\n\r\n            if (SystemSettings.IsTransparencyEnabled)\r\n            {\r\n                storyboard.Children.Add(fadeAnimation);\r\n            }\r\n\r\n            storyboard.Completed += onCompleted;\r\n            storyboard.Begin(window);\r\n        }\r\n\r\n        public static void BeginWindowExitAnimation(Window window, Action completed)\r\n        {\r\n            var onCompleted = new EventHandler((s, e) =>\r\n            {\r\n                window.Cloak();\r\n                completed();\r\n            });\r\n\r\n            if (!Manager.Current.AnimationsEnabled || !SystemSettings.IsTransparencyEnabled)\r\n            {\r\n                window.Dispatcher.BeginInvoke((Action)(() =>\r\n                {\r\n                    onCompleted(null, null);\r\n                }));\r\n            }\r\n            else\r\n            {\r\n                var fadeAnimation = new DoubleAnimation\r\n                {\r\n                    Duration = new Duration(TimeSpan.FromMilliseconds(150)),\r\n                    FillBehavior = FillBehavior.Stop,\r\n                    EasingFunction = new ExponentialEase { EasingMode = EasingMode.EaseOut },\r\n                    From = 1,\r\n                    To = 0.75,\r\n                };\r\n                fadeAnimation.Completed += (s, e) => { window.Opacity = 0; };\r\n\r\n                Storyboard.SetTarget(fadeAnimation, window);\r\n                Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath(Window.OpacityProperty));\r\n\r\n                var storyboard = new Storyboard();\r\n                storyboard.FillBehavior = FillBehavior.Stop;\r\n                storyboard.Children.Add(fadeAnimation);\r\n                storyboard.Completed += onCompleted;\r\n                storyboard.Begin(window);\r\n            }\r\n        }\r\n\r\n        public static void BeginWindowEntranceAnimation(Window window, Action completed, double fromOpacity = 0.5)\r\n        {\r\n            var onCompleted = new EventHandler((s, e) =>\r\n            {\r\n                completed();\r\n            });\r\n\r\n            if (!Manager.Current.AnimationsEnabled)\r\n            {\r\n                window.Cloak(false);\r\n                onCompleted(null, null);\r\n                return;\r\n            }\r\n\r\n            var fadeAnimation = new DoubleAnimation\r\n            {\r\n                Duration = new Duration(TimeSpan.FromMilliseconds(250)),\r\n                FillBehavior = FillBehavior.Stop,\r\n                EasingFunction = new ExponentialEase { EasingMode = EasingMode.EaseOut },\r\n                From = fromOpacity,\r\n                To = 1,\r\n            };\r\n            fadeAnimation.Completed += (s, e) => { window.Opacity = 1; };\r\n\r\n            Storyboard.SetTarget(fadeAnimation, window);\r\n            Storyboard.SetTargetProperty(fadeAnimation, new PropertyPath(Window.OpacityProperty));\r\n\r\n            var storyboard = new Storyboard();\r\n            storyboard.FillBehavior = FillBehavior.Stop;\r\n            storyboard.Children.Add(fadeAnimation);\r\n            storyboard.Completed += onCompleted;\r\n\r\n            window.Cloak(false);\r\n\r\n            storyboard.Begin(window);\r\n        }\r\n\r\n        public static void BringTaskbarToFront()\r\n        {\r\n            User32.SetForegroundWindow(WindowsTaskbar.GetHwnd());\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/WindowHolder.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Helpers\r\n{\r\n    public class WindowHolder\r\n    {\r\n        Func<Window> _create;\r\n        Window _openWindow;\r\n\r\n        public WindowHolder(Func<Window> create)\r\n        {\r\n            _create = create;\r\n        }\r\n\r\n        public void OpenOrClose()\r\n        {\r\n            if (_openWindow == null)\r\n            {\r\n                CreateWindow();\r\n            }\r\n            else\r\n            {\r\n                _openWindow.Close();\r\n                _openWindow = null;\r\n            }\r\n        }\r\n\r\n        public void OpenOrBringToFront()\r\n        {\r\n            if (_openWindow == null)\r\n            {\r\n                CreateWindow();\r\n            }\r\n            else\r\n            {\r\n                _openWindow.RaiseWindow();\r\n            }\r\n        }\r\n\r\n        private void CreateWindow()\r\n        {\r\n            _openWindow = _create();\r\n            _openWindow.Closed += (_, __) => _openWindow = null;\r\n            _openWindow.Show();\r\n            WindowAnimationLibrary.BeginWindowEntranceAnimation(_openWindow, () => { });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Helpers/WindowViewState.cs",
    "content": "﻿namespace EarTrumpet.UI.Helpers\r\n{\r\n    public enum WindowViewState\r\n    {\r\n        Open,\r\n        Closing,\r\n        CloseReady\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Mutable.xaml",
    "content": "﻿<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n                    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n                    xmlns:bcl=\"clr-namespace:System;assembly=mscorlib\"\r\n                    xmlns:win=\"clr-namespace:System.Windows;assembly=PresentationFramework\">\r\n\r\n    <bcl:Double x:Key=\"Mutable_AppIconSize\">24</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_SliderThumbHeight\">24</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_SliderThumbWidth\">8</bcl:Double>\r\n    <win:GridLength x:Key=\"Mutable_IconCellWidth\">65</win:GridLength>\r\n    <win:GridLength x:Key=\"Mutable_VolumeCellWidth\">63</win:GridLength>\r\n    <bcl:Double x:Key=\"Mutable_DeviceTitleCellHeight\">44</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_AppItemCellHeight\">44</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_DeviceItemCellHeight\">54</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_ExpandCollapseButtonGlyphFontSize\">12</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_AppVolumeTextFontSize\">18</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_DeviceVolumeTextFontSize\">24</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_LargeWindowTextFontSize\">15</bcl:Double>\r\n    <bcl:Double x:Key=\"Mutable_AppIconTextFontSize\">16</bcl:Double>\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/AcrylicBrush.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Interop;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    class AcrylicBrush\r\n    {\r\n        public static string GetBackground(DependencyObject obj) => (string)obj.GetValue(BackgroundProperty);\r\n        public static void SetBackground(DependencyObject obj, string value) => obj.SetValue(BackgroundProperty, value);\r\n        public static readonly DependencyProperty BackgroundProperty =\r\n        DependencyProperty.RegisterAttached(\"Background\", typeof(string), typeof(AcrylicBrush), new PropertyMetadata(\"\", BackgroundChanged));\r\n\r\n        public static bool GetIsSuppressed(DependencyObject obj) => (bool)obj.GetValue(IsSuppressedProperty);\r\n        public static void SetIsSuppressed(DependencyObject obj, bool value) => obj.SetValue(IsSuppressedProperty, value);\r\n        public static readonly DependencyProperty IsSuppressedProperty =\r\n        DependencyProperty.RegisterAttached(\"IsSuppressed\", typeof(bool), typeof(AcrylicBrush), new PropertyMetadata(false));\r\n\r\n        private static void BackgroundChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var window = (Window)dependencyObject;\r\n            var suppressAryclicTimer = new DispatcherTimer();\r\n\r\n            window.Closed += (_, __) => window = null;\r\n            window.SourceInitialized += (_, __) => ApplyAcrylicToWindow(window, (string)e.NewValue);\r\n            window.LocationChanged += (_, __) => SuppressAryclic(window, suppressAryclicTimer);\r\n            window.SizeChanged += (_, __) => SuppressAryclic(window, suppressAryclicTimer);\r\n\r\n            suppressAryclicTimer.Interval = TimeSpan.FromMilliseconds(200);\r\n            suppressAryclicTimer.Tick += (_, __) =>\r\n            {\r\n                suppressAryclicTimer.Stop();\r\n                if (window != null)\r\n                {\r\n                    SetIsSuppressed(window, false);\r\n                    UpdateWindowAcrylic(window);\r\n                }\r\n            };\r\n\r\n            Manager.Current.ThemeChanged += () =>\r\n            {\r\n                if (window != null)\r\n                {\r\n                    ApplyAcrylicToWindow(window, (string)e.NewValue);\r\n                }\r\n            };\r\n        }\r\n\r\n        private static void SuppressAryclic(Window window, DispatcherTimer timer)\r\n        {\r\n            if (Environment.OSVersion.IsLessThan(OSVersions.Version19H1) || Environment.OSVersion.IsAtLeast(OSVersions.Windows11))\r\n            {\r\n                // The issue is present on 19H1 - Windows 11\r\n                return;\r\n            }\r\n            if (window != null && (HwndSource)PresentationSource.FromVisual(window) != null)\r\n            {\r\n                if (!timer.IsEnabled)\r\n                {\r\n                    SetIsSuppressed(window, true);\r\n\r\n                    // This works to prevent flicker:\r\n                    window.InvalidateVisual();\r\n                    window.UpdateLayout();\r\n                    Dispatcher.CurrentDispatcher.InvokeAsync(() => {\r\n                        if (window != null)\r\n                        {\r\n                            UpdateWindowAcrylic(window);\r\n                        }\r\n                    }, DispatcherPriority.Render);\r\n                }\r\n                timer.Stop();\r\n                timer.Start();\r\n            }\r\n        }\r\n\r\n        private static void ApplyAcrylicToWindow(Window window, string refValue)\r\n        {\r\n            if (window != null)\r\n            {\r\n                AccentPolicyLibrary.EnableAcrylic(window,\r\n                    Manager.Current.ResolveRef(window, refValue),\r\n                    Interop.User32.AccentFlags.DrawAllBorders);\r\n            }\r\n        }\r\n\r\n        private static void UpdateWindowAcrylic(Window window)\r\n        {\r\n            var suppressed = GetIsSuppressed(window);\r\n            if (suppressed)\r\n            {\r\n                AccentPolicyLibrary.DisableAcrylic(window);\r\n            }\r\n            else\r\n            {\r\n                ApplyAcrylicToWindow(window, GetBackground(window));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/Brush.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public static class Brush\r\n    {\r\n        private static readonly Dictionary<string, Dictionary<DependencyObject, ThemeBindingInfo<System.Windows.Media.Brush>>> _bindingInfo = \r\n            new Dictionary<string, Dictionary<DependencyObject, ThemeBindingInfo<System.Windows.Media.Brush>>>();\r\n\r\n        private static void ImplementPropertyChanged(string propertyName, DependencyObject dependencyObject, object newValue)\r\n        {\r\n            var value = (string)newValue;\r\n\r\n            if (!_bindingInfo.ContainsKey(propertyName))\r\n            {\r\n                _bindingInfo[propertyName] = new Dictionary<DependencyObject, ThemeBindingInfo<System.Windows.Media.Brush>>();\r\n            }\r\n\r\n            var outgoing = _bindingInfo[propertyName].ContainsKey(dependencyObject) ? _bindingInfo[propertyName][dependencyObject] : null;\r\n            if (outgoing != null)\r\n            {\r\n                _bindingInfo[propertyName][dependencyObject] = null;\r\n                outgoing.Leaving();\r\n            }\r\n\r\n            if (!string.IsNullOrWhiteSpace(value))\r\n            {\r\n                _bindingInfo[propertyName][dependencyObject] = new ThemeBindingInfo<System.Windows.Media.Brush>(dependencyObject, value, propertyName, BrushValueParser.Parse);\r\n            }\r\n        }\r\n\r\n        public static string GetForeground(DependencyObject obj) => (string)obj.GetValue(ForegroundProperty);\r\n        public static void SetForeground(DependencyObject obj, string value) => obj.SetValue(ForegroundProperty, value);\r\n        public static readonly DependencyProperty ForegroundProperty =\r\n        DependencyProperty.RegisterAttached(\"Foreground\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", ForegroundChanged));\r\n        private static void ForegroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"Foreground\", d, e.NewValue);\r\n\r\n        public static string GetBackground(DependencyObject obj) => (string)obj.GetValue(BackgroundProperty);\r\n        public static void SetBackground(DependencyObject obj, string value) => obj.SetValue(BackgroundProperty, value);\r\n        public static readonly DependencyProperty BackgroundProperty =\r\n        DependencyProperty.RegisterAttached(\"Background\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", BackgroundChanged));\r\n        private static void BackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"Background\", d, e.NewValue);\r\n\r\n        public static string GetBorderBrush(DependencyObject obj) => (string)obj.GetValue(BorderBrushProperty);\r\n        public static void SetBorderBrush(DependencyObject obj, string value) => obj.SetValue(BorderBrushProperty, value);\r\n        public static readonly DependencyProperty BorderBrushProperty =\r\n        DependencyProperty.RegisterAttached(\"BorderBrush\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", BorderBrushChanged));\r\n        private static void BorderBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"BorderBrush\", d, e.NewValue);\r\n\r\n        public static string GetStroke(DependencyObject obj) => (string)obj.GetValue(StrokeProperty);\r\n        public static void SetStroke(DependencyObject obj, string value) => obj.SetValue(StrokeProperty, value);\r\n        public static readonly DependencyProperty StrokeProperty =\r\n        DependencyProperty.RegisterAttached(\"Stroke\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", StrokeChanged));\r\n        private static void StrokeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"Stroke\", d, e.NewValue);\r\n\r\n        public static string GetFill(DependencyObject obj) => (string)obj.GetValue(FillProperty);\r\n        public static void SetFill(DependencyObject obj, string value) => obj.SetValue(FillProperty, value);\r\n        public static readonly DependencyProperty FillProperty =\r\n        DependencyProperty.RegisterAttached(\"Fill\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", FillChanged));\r\n        private static void FillChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"Fill\", d, e.NewValue);\r\n\r\n        public static string GetSelectionBrush(DependencyObject obj) => (string)obj.GetValue(SelectionBrushProperty);\r\n        public static void SetSelectionBrush(DependencyObject obj, string value) => obj.SetValue(SelectionBrushProperty, value);\r\n        public static readonly DependencyProperty SelectionBrushProperty =\r\n        DependencyProperty.RegisterAttached(\"SelectionBrush\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", SelectionBrushChanged));\r\n        private static void SelectionBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"SelectionBrush\", d, e.NewValue);\r\n\r\n        public static string GetCaretBrush(DependencyObject obj) => (string)obj.GetValue(CaretBrushProperty);\r\n        public static void SetCaretBrush(DependencyObject obj, string value) => obj.SetValue(CaretBrushProperty, value);\r\n        public static readonly DependencyProperty CaretBrushProperty =\r\n        DependencyProperty.RegisterAttached(\"CaretBrush\", typeof(string), typeof(Brush), new PropertyMetadata(\"\", CaretBrushChanged));\r\n        private static void CaretBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ImplementPropertyChanged(\"CaretBrush\", d, e.NewValue);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/BrushValueParser.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Globalization;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    class BrushValueParser\r\n    {\r\n        public static SolidColorBrush Parse(DependencyObject element, string value)\r\n        {\r\n            try\r\n            {\r\n                bool isLight = Options.GetSource(element) == Options.SourceKind.App ? SystemSettings.IsLightTheme : SystemSettings.IsSystemLightTheme;\r\n                string lightOrDarkText = isLight ? \"Light\" : \"Dark\";\r\n                Dictionary<string, Dictionary<string, string>> fullMap = new Dictionary<string, Dictionary<string, string>>();\r\n                // Transparent\r\n                // Theme=Transparent\r\n                // Flyout:Theme=Transparent, HighContrast=Window\r\n                foreach (var commaValue in value.Split(','))\r\n                {\r\n                    // Transparent\r\n                    // Theme=Transparent\r\n                    // Flyout:Theme=Transparent\r\n                    var segment = commaValue.Trim();\r\n                    var scope = \"\";\r\n                    if (segment.IndexOf(':') > -1)\r\n                    {\r\n                        var colonSplit = segment.Split(':');\r\n                        scope = colonSplit[0];\r\n                        segment = colonSplit[1];\r\n                    }\r\n                    if (!fullMap.ContainsKey(scope))\r\n                    {\r\n                        fullMap[scope] = new Dictionary<string, string>();\r\n                    }\r\n\r\n                    // Transparent\r\n                    // Theme=Transparent\r\n                    var equalsSplit = segment.Split('=');\r\n                    var key = equalsSplit.Length == 1 ? \"\" : equalsSplit[0];\r\n                    var color = equalsSplit.Length == 1 ? equalsSplit[0] : equalsSplit[1];\r\n                    fullMap[scope][key] = color;\r\n                }\r\n\r\n                // Search for Refs in either the elementScope of deault map.\r\n                var elementScope = Options.GetScope(element);\r\n                var searchKey = \"\";\r\n                if (fullMap.ContainsKey(elementScope))\r\n                {\r\n                    if (fullMap[elementScope].ContainsKey(\"\"))\r\n                    {\r\n                        searchKey = fullMap[elementScope][\"\"];\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (fullMap[\"\"].ContainsKey(\"\"))\r\n                    {\r\n                        searchKey = fullMap[\"\"][\"\"];\r\n                    }\r\n                }\r\n\r\n                if (searchKey != \"\")\r\n                {\r\n                    if (FindReference(element, searchKey, out var outRef))\r\n                    {\r\n                        return outRef;\r\n                    }\r\n                }\r\n\r\n                // Pick the color considering theme.\r\n                var map = fullMap.ContainsKey(elementScope) ? fullMap[elementScope] : fullMap[\"\"];\r\n                string colorName;\r\n                if (SystemParameters.HighContrast)\r\n                {\r\n                    if (map.ContainsKey(\"\"))\r\n                    {\r\n                        colorName = map[\"\"];\r\n                    }\r\n                    else if (map.ContainsKey(\"HighContrast\"))\r\n                    {\r\n                        colorName = map[\"HighContrast\"];\r\n                    }\r\n                    else if (map.ContainsKey(\"Theme\"))\r\n                    {\r\n                        colorName = map[\"Theme\"].Replace(\"{Theme}\", \"Light\");\r\n                    }\r\n                    else if (map.ContainsKey(\"Light\"))\r\n                    {\r\n                        colorName = map[\"Light\"];\r\n                    }\r\n                    else\r\n                    {\r\n                        throw new NotImplementedException($\"BrushValueParser: '{value}'\");\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (map.ContainsKey(\"\"))\r\n                    {\r\n                        colorName = map[\"\"];\r\n                    }\r\n                    else if (map.ContainsKey(\"Theme\"))\r\n                    {\r\n                        colorName = map[\"Theme\"].Replace(\"{Theme}\", isLight ? \"Light\" : \"Dark\");\r\n                    }\r\n                    else if (map.ContainsKey(\"Light\") && isLight)\r\n                    {\r\n                        colorName = map[\"Light\"];\r\n                    }\r\n                    else if (map.ContainsKey(\"Dark\") && !isLight)\r\n                    {\r\n                        colorName = map[\"Dark\"];\r\n                    }\r\n                    else\r\n                    {\r\n                        throw new NotImplementedException($\"BrushValueParser: '{value}'\");\r\n                    }\r\n                }\r\n\r\n                if (FindReference(element, colorName, out var reference))\r\n                {\r\n                    return reference;\r\n                }\r\n\r\n                // Lookup the color\r\n                Color ret;\r\n                colorName = ParseOpacityFromColor(colorName, out var opacity);\r\n                if (colorName[0] == '#')\r\n                {\r\n                    ret = (Color)ColorConverter.ConvertFromString(colorName);\r\n                }\r\n                else if (!ImmersiveSystemColors.TryLookup($\"Immersive{colorName}\", out var color))\r\n                {\r\n                    var info = typeof(Colors).GetProperty(colorName, System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);\r\n                    if (info == null)\r\n                    {\r\n                        info = typeof(SystemColors).GetProperty(colorName + \"Color\", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);\r\n                    }\r\n\r\n                    if (info != null)\r\n                    {\r\n                        ret = (Color)info.GetValue(null, null);\r\n                    }\r\n                    else\r\n                    {\r\n                        // We don't expect to be here but are seeing on some machines that the template loading fails here.\r\n                        // But it will succeed when the element Loaded is called.\r\n                        ret = Colors.HotPink;\r\n                        Trace.WriteLine($\"## BrushValueParser Parse FAILED ## '{value}' {element}\");\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    ret = color;\r\n                }\r\n\r\n                if (opacity > 0)\r\n                {\r\n                    ret.A = (byte)(opacity * 255);\r\n                }\r\n                return new SolidColorBrush(ret);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                throw new Exception($\"BrushValueParser Error: '{value}' {element}\", ex);\r\n            }\r\n        }\r\n\r\n        private static bool FindReference(DependencyObject element, string searchKey, out SolidColorBrush outRef)\r\n        {\r\n            bool isLight = Options.GetSource(element) == Options.SourceKind.App ? SystemSettings.IsLightTheme : SystemSettings.IsSystemLightTheme;\r\n            var reference = Manager.Current.References.FirstOrDefault(r => r.Key == searchKey.Split('/')[0]);\r\n            if (reference != null)\r\n            {\r\n                if (reference.Value != null)\r\n                {\r\n                    outRef = Parse(element, reference.Value);\r\n                    return true;\r\n                }\r\n                else\r\n                {\r\n                    var tab = new Dictionary<Rule.Kind, bool>();\r\n                    tab.Add(Rule.Kind.Any, true);\r\n                    tab.Add(Rule.Kind.HighContrast, SystemParameters.HighContrast);\r\n                    tab.Add(Rule.Kind.LightTheme, isLight);\r\n                    tab.Add(Rule.Kind.Transparency, SystemSettings.IsTransparencyEnabled && !SystemParameters.HighContrast);\r\n                    tab.Add(Rule.Kind.UseAccentColor, SystemSettings.UseAccentColor && !isLight && !SystemParameters.HighContrast);\r\n                    tab.Add(Rule.Kind.UseAccentColorOnWindowBorders, SystemSettings.UseAccentColorOnWindowBorders);\r\n                    tab.Add(Rule.Kind.AccentPolicySupportsTintColor, AccentPolicyLibrary.AccentPolicySupportsTintColor);\r\n\r\n                    Func<List<Rule>, string> ParseRule = null;\r\n                    ParseRule = ruleList =>\r\n                    {\r\n                        var ret = ruleList.Where(\r\n                            rule => tab[rule.On]).Select(\r\n                            rule => (rule.Value != null) ? rule.Value : ParseRule(rule.Rules)).FirstOrDefault();\r\n                        return ret != null ? ret : throw new NotImplementedException(\"Rule type not found\");\r\n                    };\r\n\r\n                    string opacities = \"\";\r\n                    var oItems = searchKey.Split('/').Skip(1).ToArray();\r\n                    if (oItems.Length == 0)\r\n                    {\r\n                        // Nothing to do.\r\n                    }\r\n                    else if (oItems.Length == 1)\r\n                    {\r\n                        opacities = $\"/{oItems[0]}\";\r\n                    }\r\n                    else\r\n                    {\r\n                        opacities = $\"/{oItems[0]}/{oItems[1]}\";\r\n                    }\r\n                    outRef = Parse(element, ParseRule(reference.Rules) + opacities);\r\n                    return true;\r\n                }\r\n            }\r\n            outRef = null;\r\n            return false;\r\n        }\r\n\r\n        // ColorName\r\n        // ColorName/0.0\r\n        // ColorName/0.0/0.0\r\n        private static string ParseOpacityFromColor(string colorName, out double desiredOpacity)\r\n        {\r\n            double opacity = 0;\r\n            double opacityNoTransparency = 0;\r\n\r\n            var parts = colorName.Split('/');\r\n            if (parts.Length == 1)\r\n            {\r\n                // Nothing to do.\r\n            }\r\n            else if (parts.Length == 2)\r\n            {\r\n                opacity = double.Parse(parts[1], CultureInfo.InvariantCulture);\r\n                colorName = parts[0];\r\n            }\r\n            else if (parts.Length == 3)\r\n            {\r\n                opacity = double.Parse(parts[1], CultureInfo.InvariantCulture);\r\n                opacityNoTransparency = double.Parse(parts[2], CultureInfo.InvariantCulture);\r\n                colorName = parts[0];\r\n            }\r\n            else\r\n            {\r\n                throw new NotImplementedException(\"bad number of /\");\r\n            }\r\n\r\n            desiredOpacity = SystemSettings.IsTransparencyEnabled && !SystemParameters.HighContrast ? opacity : (opacityNoTransparency > 0 ? opacityNoTransparency : opacity);\r\n            return colorName;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/Themes/Manager.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\nusing System.Windows.Media;\r\nusing System.Windows.Threading;\r\nusing Windows.UI.ViewManagement;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public class Manager : BindableBase, INotifyPropertyChanged\r\n    {\r\n        public static Manager Current { get; private set; }\r\n\r\n        public event Action ThemeChanged;\r\n\r\n        public List<Ref> References { get; }\r\n\r\n        private bool? lastAnimationsEnabledValue = null;\r\n        public bool AnimationsEnabled {\r\n            get\r\n            {\r\n                if (!lastAnimationsEnabledValue.HasValue)\r\n                {\r\n                    if (Environment.OSVersion.IsAtLeast(OSVersions.Windows11))\r\n                    {\r\n                        lastAnimationsEnabledValue = new UISettings().AnimationsEnabled;\r\n                    }\r\n                    else\r\n                    {\r\n                        // Windows 10 taskbar flyouts are incorrectly tied to [SPI_GETANIMATION]\r\n                        // ANIMATIONINFO.iMinAnimate\r\n                        lastAnimationsEnabledValue = SystemParameters.MinimizeAnimation;\r\n                    }\r\n                }\r\n                return lastAnimationsEnabledValue.Value;\r\n            }\r\n        }\r\n        public bool IsLightTheme => SystemSettings.IsLightTheme;\r\n        public bool IsSystemLightTheme => SystemSettings.IsSystemLightTheme;\r\n        public bool IsHighContrast => SystemParameters.HighContrast;\r\n        public bool UseAccentColorOnWindowBorders => SystemSettings.UseAccentColorOnWindowBorders;\r\n        public bool UseDynamicScrollbars => SystemSettings.UseDynamicScrollbars;\r\n\r\n        private DispatcherTimer _themeChangeTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(250) };\r\n        private Win32Window _messageWindow;\r\n\r\n        public Manager()\r\n        {\r\n            Current = this;\r\n            References = new List<Ref>();\r\n            _themeChangeTimer.Tick += ThemeChangeTimer_Tick;\r\n\r\n            _messageWindow = new Win32Window();\r\n            _messageWindow.Initialize((m) => WndProc(m.Msg, m.WParam, m.LParam));\r\n        }\r\n\r\n        ~Manager()\r\n        {\r\n            _themeChangeTimer.Tick -= ThemeChangeTimer_Tick;\r\n        }\r\n\r\n        public void Load()\r\n        {\r\n            // This method needs to be called from App to get us loaded otherwise XAML will lazy-load us.\r\n        }\r\n\r\n        public Color ResolveRef(DependencyObject target, string key)\r\n        {\r\n            return BrushValueParser.Parse(target, key).Color;\r\n        }\r\n\r\n        private void WndProc(int msg, IntPtr wParam, IntPtr lParam)\r\n        {\r\n            const int WM_DWMCOLORIZATIONCOLORCHANGED = 0x320;\r\n            const int WM_DWMCOMPOSITIONCHANGED = 0x31E;\r\n            const int WM_THEMECHANGED = 0x031A;\r\n            const int WM_SETTINGCHANGE = 0x001A;\r\n\r\n            switch (msg)\r\n            {\r\n                case WM_DWMCOLORIZATIONCOLORCHANGED:\r\n                case WM_DWMCOMPOSITIONCHANGED:\r\n                case WM_THEMECHANGED:\r\n                    OnThemeColorsChanged();\r\n                    break;\r\n                case WM_SETTINGCHANGE:\r\n                    var settingChanged = Marshal.PtrToStringUni(lParam);\r\n                    if (settingChanged == \"ImmersiveColorSet\" || // Accent color\r\n                        settingChanged == \"WindowsThemeElement\") // High contrast\r\n                    {\r\n                        OnThemeColorsChanged();\r\n                    }\r\n                    else if (settingChanged == \"WindowMetrics\")\r\n                    {\r\n                        lastAnimationsEnabledValue = null;\r\n                        RaisePropertyChanged(nameof(AnimationsEnabled));\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void OnThemeColorsChanged()\r\n        {\r\n            if (_themeChangeTimer.IsEnabled)\r\n            {\r\n                _themeChangeTimer.Stop();\r\n            }\r\n            _themeChangeTimer.Start();\r\n        }\r\n\r\n        private void ThemeChangeTimer_Tick(object sender, EventArgs e)\r\n        {\r\n            _themeChangeTimer.IsEnabled = false;\r\n\r\n            ThemeChanged?.Invoke();\r\n            RaisePropertyChanged(nameof(IsLightTheme));\r\n            RaisePropertyChanged(nameof(IsSystemLightTheme));\r\n            RaisePropertyChanged(nameof(IsHighContrast));\r\n            RaisePropertyChanged(nameof(UseAccentColorOnWindowBorders));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/Themes/OS.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public class OS : DependencyObject\r\n    {\r\n        public static readonly DependencyPropertyKey IsWindows11PropertyKey =\r\n            DependencyProperty.RegisterReadOnly(\"IsWindows11\", typeof(bool), typeof(OS), new PropertyMetadata(Environment.OSVersion.IsAtLeast(OSVersions.Windows11)));\r\n\r\n        public bool IsWindows11 => (bool)GetValue(IsWindows11PropertyKey.DependencyProperty);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/Options.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public class Options\r\n    {\r\n        public enum SourceKind\r\n        {\r\n            App, System\r\n        }\r\n\r\n        public static SourceKind? GetSource(DependencyObject obj) => (SourceKind?)obj.GetValue(SourceProperty);\r\n        public static void SetSource(DependencyObject obj, SourceKind? value) => obj.SetValue(SourceProperty, value);\r\n        public static readonly DependencyProperty SourceProperty =\r\n        DependencyProperty.RegisterAttached(\"Source\", typeof(SourceKind?), typeof(Options), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));\r\n\r\n        public static string GetScope(DependencyObject obj) => (string)obj.GetValue(ScopeProperty);\r\n        public static void SetScope(DependencyObject obj, string value) => obj.SetValue(ScopeProperty, value);\r\n        public static readonly DependencyProperty ScopeProperty =\r\n        DependencyProperty.RegisterAttached(\"Scope\", typeof(string), typeof(Options), new FrameworkPropertyMetadata(\"\", FrameworkPropertyMetadataOptions.Inherits));\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/Ref.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public class Ref\r\n    {\r\n        public string Key { get; set; }\r\n        public string Value { get; set; }\r\n        public List<Rule> Rules { get; } = new List<Rule>();\r\n\r\n        public Ref() { }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/Themes/Rule.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    public class Rule\r\n    {\r\n        public enum Kind\r\n        {\r\n            Any = 0,\r\n            LightTheme,\r\n            Transparency,\r\n            UseAccentColor,\r\n            UseAccentColorOnWindowBorders,\r\n            HighContrast,\r\n            AccentPolicySupportsTintColor,\r\n        }\r\n\r\n        public Kind On { get; set; }\r\n        public string Value { get; set; }\r\n        public List<Rule> Rules { get; } = new List<Rule>();\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Themes/ThemeBindingInfo.cs",
    "content": "﻿using System;\r\nusing System.Reflection;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Themes\r\n{\r\n    class ThemeBindingInfo<T>\r\n    {\r\n        private readonly string _propertyName;\r\n        private readonly string _value;\r\n        private readonly Func<DependencyObject, string, T> _applyCallback;\r\n        private WeakReference<DependencyObject> _element;\r\n        private bool _isAttached;\r\n        private T _initialValue;\r\n\r\n        public ThemeBindingInfo(DependencyObject element, string value, string propertyName, Func<DependencyObject, string, T> applyCallback)\r\n        {\r\n            _propertyName = propertyName;\r\n            _element = new WeakReference<DependencyObject>(element);\r\n            _value = value;\r\n            _applyCallback = applyCallback;\r\n\r\n            ApplyValue(element);\r\n\r\n            if (element is FrameworkElement)\r\n            {\r\n                ((FrameworkElement)element).Loaded += Element_Loaded;\r\n            }\r\n            else if (element is FrameworkContentElement)\r\n            {\r\n                ((FrameworkContentElement)element).Loaded += Element_Loaded;\r\n            }\r\n        }\r\n\r\n        public void Leaving()\r\n        {\r\n            if (_element.TryGetTarget(out var element))\r\n            {\r\n                UnregisterLoaded(element);\r\n\r\n                if (_isAttached)\r\n                {\r\n                    WritePropertyValue(element, _initialValue);\r\n                }\r\n            }\r\n\r\n            _isAttached = false;\r\n            _element = null;\r\n            _initialValue = default(T);\r\n            Manager.Current.ThemeChanged -= ThemeChanged;\r\n        }\r\n\r\n        private void Element_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            if (_element.TryGetTarget(out var element))\r\n            {\r\n                UnregisterLoaded(element);\r\n                ApplyValue(element);\r\n            }\r\n        }\r\n\r\n        private void UnregisterLoaded(DependencyObject element)\r\n        {\r\n            if (element is FrameworkContentElement)\r\n            {\r\n                ((FrameworkContentElement)element).Loaded -= Element_Loaded;\r\n            }\r\n            else if (element is FrameworkElement)\r\n            {\r\n                ((FrameworkElement)element).Loaded -= Element_Loaded;\r\n            }\r\n        }\r\n\r\n        public void ApplyValue(DependencyObject element)\r\n        {\r\n            var type = Options.GetSource(element);\r\n            if (type != null)\r\n            {\r\n                _isAttached = true;\r\n                _initialValue = (T)ReadPropertyValue(element);\r\n                WritePropertyValue(element, _applyCallback.Invoke(element, _value));\r\n                Manager.Current.ThemeChanged += ThemeChanged;\r\n            }\r\n        }\r\n\r\n        private void ThemeChanged()\r\n        {\r\n            if ((_element != null) && _element.TryGetTarget(out var element))\r\n            {\r\n                WritePropertyValue(element, _applyCallback.Invoke(element, _value));\r\n            }\r\n        }\r\n\r\n        private PropertyInfo GetProperty(DependencyObject element) => element.GetType().GetProperty(_propertyName, BindingFlags.Public | BindingFlags.Instance);\r\n        private object ReadPropertyValue(DependencyObject element) => GetProperty(element).GetValue(element);\r\n        private void WritePropertyValue(DependencyObject element, object value) => GetProperty(element).SetValue(element, value);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/AddonAboutPageViewModel.cs",
    "content": "﻿using EarTrumpet.Extensibility;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    internal class AddonAboutPageViewModel : SettingsPageViewModel\r\n    {\r\n        public ICommand OpenHelpLink { get; }\r\n        public string DisplayName => _addon.DisplayName;\r\n        public string PublisherName => _addon.Manifest.PublisherName;\r\n        public string Version => _addon.Manifest.Version;\r\n\r\n        private readonly EarTrumpetAddon _addon;\r\n\r\n        public AddonAboutPageViewModel(EarTrumpetAddon addon) : base(DefaultManagementGroupName)\r\n        {\r\n            Glyph = \"\\xE946\";\r\n            _addon = addon;\r\n\r\n            Title = Properties.Resources.AboutThisAddonText.Replace(\"{Name}\", DisplayName);\r\n            OpenHelpLink = new RelayCommand(() => ProcessHelper.StartNoThrow(_addon.Manifest.HelpLink));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/AdvertisedCategorySettingsViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class AdvertisedCategorySettingsViewModel : SettingsCategoryViewModel\r\n    {\r\n        private readonly string _link;\r\n\r\n        public AdvertisedCategorySettingsViewModel(string title, string glyph, string description, string id, string link) : \r\n            base(title, glyph, description, id, new System.Collections.ObjectModel.ObservableCollection<SettingsPageViewModel>())\r\n        {\r\n            _link = link;\r\n            IsAd = true;\r\n        }\r\n\r\n        public void Activate() => ProcessHelper.StartNoThrow(_link);\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/AppItemViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio.Internal;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Collections.Specialized;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class AppItemViewModel : AudioSessionViewModel, IAppItemViewModel\r\n    {\r\n        public class ExeNameComparer : IComparer<IAppItemViewModel>\r\n        {\r\n            public int Compare(IAppItemViewModel one, IAppItemViewModel two)\r\n            {\r\n                return string.Compare(one.ExeName, two.ExeName, StringComparison.Ordinal);\r\n            }\r\n        }\r\n\r\n        public static readonly ExeNameComparer CompareByExeName = new ExeNameComparer();\r\n\r\n        public Color Background { get; private set; }\r\n        public char IconText => string.IsNullOrWhiteSpace(DisplayName) ? '?' : DisplayName.ToUpperInvariant().FirstOrDefault(x => char.IsLetterOrDigit(x));\r\n        public string DisplayName => _session.DisplayName;\r\n        public string ExeName => _session.ExeName;\r\n        public string AppId => _session.AppId;\r\n        public string IconPath => _session.IconPath;\r\n        public bool IsDesktopApp => _session.IsDesktopApp;\r\n        public bool IsExpanded { get; private set; }\r\n        public int ProcessId => _session.ProcessId;\r\n        public ObservableCollection<IAppItemViewModel> ChildApps { get; private set; }\r\n\r\n        public bool IsMovable => !_session.IsSystemSoundsSession &&\r\n                                  Environment.OSVersion.IsAtLeast(OSVersions.RS4);\r\n        public string PersistedOutputDevice => _session.Parent.Parent is IAudioDeviceManagerWindowsAudio ?\r\n            ((IAudioDeviceManagerWindowsAudio)_session.Parent.Parent).GetDefaultEndPoint(ProcessId) : \"\";\r\n\r\n        public IDeviceViewModel Parent\r\n        {\r\n            get\r\n            {\r\n                if (_parent.TryGetTarget(out var parent))\r\n                {\r\n                    return parent;\r\n                }\r\n                return null;\r\n            }\r\n        }\r\n\r\n        private readonly IAudioDeviceSession _session;\r\n        private readonly WeakReference<DeviceViewModel> _parent;\r\n\r\n        internal AppItemViewModel(DeviceViewModel parent, IAudioDeviceSession session, bool isChild = false) : base(session)\r\n        {\r\n            IsExpanded = isChild;\r\n            _session = session;\r\n            _session.PropertyChanged += Session_PropertyChanged;\r\n            _parent = new WeakReference<DeviceViewModel>(parent);\r\n\r\n            if (_session.Children != null)\r\n            {\r\n                _session.Children.CollectionChanged += Children_CollectionChanged;\r\n                ChildApps = new ObservableCollection<IAppItemViewModel>(_session.Children.Select(t => new AppItemViewModel(parent, t, true)));\r\n            }\r\n        }\r\n\r\n        ~AppItemViewModel()\r\n        {\r\n            _session.PropertyChanged -= Session_PropertyChanged;\r\n        }\r\n\r\n        private void Session_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            switch(e.PropertyName)\r\n            {\r\n                case nameof(_session.DisplayName):\r\n                    RaisePropertyChanged(nameof(DisplayName));\r\n                    break;\r\n                case nameof(_session.IconPath):\r\n                    RaisePropertyChanged(nameof(IconPath));\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void Children_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)\r\n        {\r\n            if (_parent.TryGetTarget(out var parent))\r\n            {\r\n                switch (e.Action)\r\n                {\r\n                    case NotifyCollectionChangedAction.Add:\r\n                        Debug.Assert(e.NewItems.Count == 1);\r\n                        ChildApps.Add(new AppItemViewModel(parent, (IAudioDeviceSession)e.NewItems[0], true));\r\n                        break;\r\n\r\n                    case NotifyCollectionChangedAction.Remove:\r\n                        Debug.Assert(e.OldItems.Count == 1);\r\n                        ChildApps.Remove(ChildApps.First(x => x.Id == ((IAudioDeviceSession)e.OldItems[0]).Id));\r\n                        break;\r\n                    default:\r\n                        throw new NotImplementedException();\r\n                }\r\n            }\r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hide)\r\n        {\r\n            ((IAudioDeviceSessionInternal)_session).MoveToDevice(id, hide);\r\n        }\r\n\r\n        public override void UpdatePeakValueForeground()\r\n        {\r\n            if (ChildApps != null)\r\n            {\r\n                foreach (var child in ChildApps)\r\n                {\r\n                    child.UpdatePeakValueForeground();\r\n                }\r\n            }\r\n\r\n            base.UpdatePeakValueForeground();\r\n        }\r\n\r\n        public void UpdatePeakValueBackground()\r\n        {\r\n            if (ChildApps != null)\r\n            {\r\n                foreach (var child in ChildApps.ToArray())\r\n                {\r\n                    child.UpdatePeakValueBackground();\r\n                }\r\n            }\r\n\r\n            ((IAudioDeviceSessionInternal)_session).UpdatePeakValueBackground();\r\n        }\r\n\r\n        public bool DoesGroupWith(IAppItemViewModel app) => (AppId == app.AppId);\r\n\r\n       public override string ToString() => IsMuted ? Properties.Resources.AppOrDeviceMutedFormatAccessibleText.Replace(\"{Name}\", DisplayName) :\r\n            Properties.Resources.AppOrDeviceFormatAccessibleText.Replace(\"{Name}\", DisplayName).Replace(\"{Volume}\", Volume.ToString());\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/AudioSessionViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class AudioSessionViewModel : BindableBase\r\n    {\r\n        private readonly IStreamWithVolumeControl _stream;\r\n        private bool _isAbsMuted;\r\n\r\n        public AudioSessionViewModel(IStreamWithVolumeControl stream)\r\n        {\r\n            _stream = stream;\r\n            _stream.PropertyChanged += Stream_PropertyChanged;\r\n\r\n            _isAbsMuted = false;\r\n\r\n            ToggleMute = new RelayCommand(() => IsMuted = !IsMuted);\r\n        }\r\n\r\n        ~AudioSessionViewModel()\r\n        {\r\n            _stream.PropertyChanged -= Stream_PropertyChanged;\r\n        }\r\n\r\n        private void Stream_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(e.PropertyName);\r\n        }\r\n\r\n        public string Id => _stream.Id;\r\n        public ICommand ToggleMute { get; } \r\n        public bool IsMuted\r\n        {\r\n            get => _stream.IsMuted;\r\n            set => _stream.IsMuted = value;\r\n        }\r\n\r\n        public bool IsAbsMuted\r\n        {\r\n            get => _isAbsMuted;\r\n            set => _isAbsMuted = value;\r\n        }\r\n\r\n        public int Volume\r\n        {\r\n            get => _stream.Volume.ToVolumeInt();\r\n            set => _stream.Volume = value/100f;\r\n        }\r\n        public virtual float PeakValue1 => _stream.PeakValue1;\r\n        public virtual float PeakValue2 => _stream.PeakValue2;\r\n\r\n        public virtual void UpdatePeakValueForeground()\r\n        {\r\n            RaisePropertyChanged(nameof(PeakValue1));\r\n            RaisePropertyChanged(nameof(PeakValue2));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/BackstackViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class BackstackViewModel : BindableBase\r\n    {\r\n        public bool CanGoBack => _stack.Count > 0;\r\n        public ICommand GoBack { get; }\r\n        public bool IsDisablingUpdates { get; set; }\r\n\r\n        private readonly Stack<Action> _stack = new Stack<Action>();\r\n\r\n        public BackstackViewModel()\r\n        {\r\n            GoBack = new RelayCommand(() =>\r\n            {\r\n                if (_stack.Count > 0)\r\n                {\r\n                    _stack.Pop().Invoke();\r\n                    RaisePropertyChanged(nameof(CanGoBack));\r\n                }\r\n            });\r\n        }\r\n\r\n        public void Add(Action action)\r\n        {\r\n            _stack.Push(action);\r\n            RaisePropertyChanged(nameof(CanGoBack));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/ContextMenuItem.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class ContextMenuItem\r\n    {\r\n        public string Glyph { get; set; } = \"\\xE0E7\"; // Checkmark\r\n        public string DisplayName { get; set; }\r\n        public ICommand Command { get; set; }\r\n        public bool IsChecked { get; set; }\r\n        public IEnumerable<ContextMenuItem> Children { get; set; }\r\n        public bool IsEnabled { get; set; } = true;\r\n    }\r\n\r\n    public class ContextMenuSeparator : ContextMenuItem\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/DeviceCollectionViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Collections.Specialized;\r\nusing System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Timers;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class DeviceCollectionViewModel : BindableBase\r\n    {\r\n        private static readonly string DefaultDeviceChangedProperty = \"DefaultDeviceChangedProperty\";\r\n\r\n        public event EventHandler<DeviceViewModel> DefaultChanged;\r\n        public event Action TrayPropertyChanged;\r\n\r\n        public ObservableCollection<DeviceViewModel> AllDevices { get; private set; } = new ObservableCollection<DeviceViewModel>();\r\n        public DeviceViewModel Default { get; private set; }\r\n\r\n        private readonly IAudioDeviceManager _deviceManager;\r\n        private readonly Timer _peakMeterTimer;\r\n        private readonly AppSettings _settings;\r\n        private readonly Dispatcher _currentDispatcher = Dispatcher.CurrentDispatcher;\r\n        private bool _isFlyoutVisible;\r\n        private bool _isFullWindowVisible;\r\n\r\n        public DeviceCollectionViewModel(IAudioDeviceManager deviceManager, AppSettings settings)\r\n        {\r\n            _settings = settings;\r\n            _deviceManager = deviceManager;\r\n            _deviceManager.DefaultChanged += OnDefaultChanged;\r\n            _deviceManager.Devices.CollectionChanged += OnCollectionChanged;\r\n            OnCollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));\r\n\r\n            _peakMeterTimer = new Timer(1000 / 30); // 30 fps\r\n            _peakMeterTimer.AutoReset = true;\r\n            _peakMeterTimer.Elapsed += PeakMeterTimer_Elapsed;\r\n        }\r\n\r\n        private void OnDefaultChanged(object sender, IAudioDevice newDevice)\r\n        {\r\n            if (newDevice == null)\r\n            {\r\n                SetDefault(null);\r\n            }\r\n            else\r\n            {\r\n                var device = AllDevices.FirstOrDefault(d => d.Id == newDevice.Id);\r\n                if (device == null)\r\n                {\r\n                    AddDevice(newDevice);\r\n                    device = AllDevices.FirstOrDefault(d => d.Id == newDevice.Id);\r\n                }\r\n                SetDefault(device);\r\n            }\r\n        }\r\n\r\n        private void SetDefault(DeviceViewModel device)\r\n        {\r\n            if (Default != null)\r\n            {\r\n                Default.PropertyChanged -= OnDefaultDevicePropertyChanged;\r\n            }\r\n\r\n            Default = device;\r\n            DefaultChanged?.Invoke(this, Default);\r\n\r\n            if (Default != null)\r\n            {\r\n                Default.PropertyChanged += OnDefaultDevicePropertyChanged;\r\n            }\r\n\r\n            // Let clients know that even though no properties changed, the underlying object changed.\r\n            OnDefaultDevicePropertyChanged(this, new PropertyChangedEventArgs(DefaultDeviceChangedProperty));\r\n        }\r\n\r\n        private void OnDefaultDevicePropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            if (e.PropertyName == DefaultDeviceChangedProperty ||\r\n                e.PropertyName == nameof(Default.Volume) ||\r\n                e.PropertyName == nameof(Default.IsMuted) ||\r\n                e.PropertyName == nameof(Default.DisplayName))\r\n            {\r\n                TrayPropertyChanged.Invoke();\r\n            }\r\n        }\r\n\r\n        protected virtual void AddDevice(IAudioDevice device)\r\n        {\r\n            var newDevice = new DeviceViewModel(this, _deviceManager, device);\r\n            AllDevices.AddSorted(newDevice, DeviceViewModel.CompareByDisplayName);\r\n        }\r\n\r\n        private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case NotifyCollectionChangedAction.Add:\r\n                    var added = ((IAudioDevice)e.NewItems[0]);\r\n                    var allExistingAdded = AllDevices.FirstOrDefault(d => d.Id == added.Id);\r\n                    if (allExistingAdded == null)\r\n                    {\r\n                        AddDevice(added);\r\n                    }\r\n                    break;\r\n\r\n                case NotifyCollectionChangedAction.Remove:\r\n                    var removed = ((IAudioDevice)e.OldItems[0]).Id;\r\n                    var allExisting = AllDevices.FirstOrDefault(d => d.Id == removed);\r\n                    if (allExisting != null)\r\n                    {\r\n                        AllDevices.Remove(allExisting);\r\n                    }\r\n                    break;\r\n\r\n                case NotifyCollectionChangedAction.Reset:\r\n                    AllDevices.Clear();\r\n                    foreach (var device in _deviceManager.Devices)\r\n                    {\r\n                        AddDevice(device);\r\n                    }\r\n                    break;\r\n\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private void PeakMeterTimer_Elapsed(object sender, ElapsedEventArgs e)\r\n        {\r\n            _deviceManager.UpdatePeakValues();\r\n\r\n            _currentDispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                foreach (var device in AllDevices)\r\n                {\r\n                    device.UpdatePeakValueForeground();\r\n                }\r\n            }));\r\n        }\r\n\r\n        public void MoveAppToDevice(IAppItemViewModel app, DeviceViewModel dev)\r\n        {\r\n            // Collect all matching apps on all devices.\r\n            var apps = new List<IAppItemViewModel>();\r\n            apps.Add(app);\r\n\r\n            foreach (var device in AllDevices)\r\n            {\r\n                foreach (var deviceApp in device.Apps)\r\n                {\r\n                    if (deviceApp.DoesGroupWith(app))\r\n                    {\r\n                        if (!apps.Contains(deviceApp))\r\n                        {\r\n                            apps.Add(deviceApp);\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            foreach (var foundApp in apps)\r\n            {\r\n                MoveAppToDeviceInternal(foundApp, dev);\r\n            }\r\n\r\n            // Collect and move any hidden/moved sessions.\r\n            ((IAudioDeviceManagerWindowsAudio)_deviceManager).MoveHiddenAppsToDevice(app.AppId, dev?.Id);\r\n        }\r\n\r\n        private void MoveAppToDeviceInternal(IAppItemViewModel app, DeviceViewModel device)\r\n        {\r\n            var searchId = device?.Id;\r\n            if (device == null)\r\n            {\r\n                searchId = _deviceManager.Default.Id;\r\n            }\r\n\r\n            try\r\n            {\r\n                DeviceViewModel oldDevice = AllDevices.First(d => d.Apps.Contains(app));\r\n                DeviceViewModel newDevice = AllDevices.First(d => searchId == d.Id);\r\n\r\n                bool isLogicallyMovingDevices = (oldDevice != newDevice);\r\n\r\n                var tempApp = new TemporaryAppItemViewModel(this, _deviceManager, app);\r\n\r\n                app.MoveToDevice(device?.Id, hide: isLogicallyMovingDevices);\r\n\r\n                // Update the UI if the device logically changed places.\r\n                if (isLogicallyMovingDevices)\r\n                {\r\n                    oldDevice.AppLeavingFromThisDevice(app);\r\n                    newDevice.AppMovingToThisDevice(tempApp);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Trace.WriteLine($\"DeviceCollectionViewModel MoveAppToDeviceInternal Failed: {ex}\");\r\n            }\r\n        }\r\n\r\n        private void StartOrStopPeakTimer()\r\n        {\r\n            _peakMeterTimer.Enabled = _isFlyoutVisible || _isFullWindowVisible;\r\n        }\r\n\r\n        public void OnTrayFlyoutShown()\r\n        {\r\n            _isFlyoutVisible = true;\r\n            StartOrStopPeakTimer();\r\n        }\r\n\r\n        public void OnTrayFlyoutHidden()\r\n        {\r\n            _isFlyoutVisible = false;\r\n            StartOrStopPeakTimer();\r\n        }\r\n\r\n        public void OnFullWindowClosed()\r\n        {\r\n            _isFullWindowVisible = false;\r\n            StartOrStopPeakTimer();\r\n        }\r\n\r\n        public void OnFullWindowOpened()\r\n        {\r\n            _isFullWindowVisible = true;\r\n            StartOrStopPeakTimer();\r\n        }\r\n\r\n        public string GetTrayToolTip()\r\n        {\r\n            if (Default != null)\r\n            {\r\n                var stateText = Default.IsMuted ? Properties.Resources.MutedText : $\"{Default.Volume}%\";\r\n                var prefixText = $\"EarTrumpet: {stateText} - \";\r\n                var deviceName = $\"{Default.DeviceDescription} ({Default.EnumeratorName})\";\r\n\r\n                // Remote Audio devices may not contain an enumerator name or description.\r\n\r\n                if (string.IsNullOrWhiteSpace(Default.EnumeratorName))\r\n                {\r\n                    deviceName = Default.DeviceDescription;\r\n                }\r\n\r\n                if (string.IsNullOrWhiteSpace(Default.DeviceDescription) && string.IsNullOrWhiteSpace(Default.EnumeratorName))\r\n                {\r\n                    deviceName = Default.DisplayName;\r\n                }\r\n\r\n                // Device name could be null in transient error cases\r\n                if (deviceName == null)\r\n                {\r\n                    deviceName = \"\";\r\n                }\r\n\r\n                // API Limitation: \"less than 64 chars\" for the tooltip.\r\n                deviceName = deviceName.Substring(0, Math.Min(63 - prefixText.Length, deviceName.Length));\r\n                return prefixText + deviceName;\r\n            }\r\n            else\r\n            {\r\n                return Properties.Resources.NoDeviceTrayText;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/DeviceViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class DeviceViewModel : AudioSessionViewModel, IDeviceViewModel\r\n    {\r\n        public class DisplayNameComparer : IComparer<DeviceViewModel>\r\n        {\r\n            public int Compare(DeviceViewModel one, DeviceViewModel two)\r\n            {\r\n                return string.Compare(one.DisplayName, two.DisplayName, StringComparison.CurrentCultureIgnoreCase);\r\n            }\r\n        }\r\n\r\n        public static readonly DisplayNameComparer CompareByDisplayName = new DisplayNameComparer();\r\n\r\n        public enum DeviceIconKind\r\n        {\r\n            Mute,\r\n            Bar0,\r\n            Bar1,\r\n            Bar2,\r\n            Bar3,\r\n            Microphone,\r\n        }\r\n\r\n        public string DisplayName => _device.DisplayName;\r\n        public string AccessibleName => IsMuted ? Properties.Resources.AppOrDeviceMutedFormatAccessibleText.Replace(\"{Name}\", DisplayName) :\r\n            Properties.Resources.AppOrDeviceFormatAccessibleText.Replace(\"{Name}\", DisplayName).Replace(\"{Volume}\", Volume.ToString());\r\n        public string DeviceDescription => ((IAudioDeviceWindowsAudio)_device).DeviceDescription;\r\n        public string EnumeratorName => ((IAudioDeviceWindowsAudio)_device).EnumeratorName;\r\n        public string InterfaceName => ((IAudioDeviceWindowsAudio)_device).InterfaceName;\r\n        public ObservableCollection<IAppItemViewModel> Apps { get; }\r\n\r\n        public bool IsDisplayNameVisible\r\n        {\r\n            get => _isDisplayNameVisible;\r\n            set\r\n            {\r\n                if (_isDisplayNameVisible != value)\r\n                {\r\n                    _isDisplayNameVisible = value;\r\n                    RaisePropertyChanged(nameof(IsDisplayNameVisible));\r\n                }\r\n            }\r\n        }\r\n\r\n        public DeviceIconKind IconKind\r\n        {\r\n            get => _iconKind;\r\n            set\r\n            {\r\n                if (_iconKind != value)\r\n                {\r\n                    _iconKind = value;\r\n                    RaisePropertyChanged(nameof(IconKind));\r\n                }\r\n            }\r\n        }\r\n\r\n        protected readonly IAudioDevice _device;\r\n        protected readonly IAudioDeviceManager _deviceManager;\r\n        protected readonly WeakReference<DeviceCollectionViewModel> _parent;\r\n        private bool _isDisplayNameVisible;\r\n        private DeviceIconKind _iconKind;\r\n\r\n        public DeviceViewModel(DeviceCollectionViewModel parent, IAudioDeviceManager deviceManager, IAudioDevice device) : base(device)\r\n        {\r\n            _deviceManager = deviceManager;\r\n            _device = device;\r\n            _parent = new WeakReference<DeviceCollectionViewModel>(parent);\r\n            Apps = new ObservableCollection<IAppItemViewModel>();\r\n\r\n            _device.PropertyChanged += OnPropertyChanged;\r\n            _device.Groups.CollectionChanged += OnCollectionChanged;\r\n\r\n            foreach (var session in _device.Groups)\r\n            {\r\n                Apps.AddSorted(new AppItemViewModel(this, session), AppItemViewModel.CompareByExeName);\r\n            }\r\n\r\n            UpdateMasterVolumeIcon();\r\n        }\r\n\r\n        ~DeviceViewModel()\r\n        {\r\n            _device.PropertyChanged -= OnPropertyChanged;\r\n            _device.Groups.CollectionChanged -= OnCollectionChanged;\r\n        }\r\n\r\n        private void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\r\n        {\r\n            if (e.PropertyName == nameof(_device.IsMuted) ||\r\n                e.PropertyName == nameof(_device.Volume))\r\n            {\r\n                UpdateMasterVolumeIcon();\r\n                RaisePropertyChanged(nameof(AccessibleName));\r\n            }\r\n            else if (e.PropertyName == nameof(_device.DisplayName))\r\n            {\r\n                RaisePropertyChanged(nameof(DisplayName));\r\n                RaisePropertyChanged(nameof(AccessibleName));\r\n            }\r\n        }\r\n\r\n        public override void UpdatePeakValueForeground()\r\n        {\r\n            base.UpdatePeakValueForeground();\r\n\r\n            foreach (var app in Apps)\r\n            {\r\n                app.UpdatePeakValueForeground();\r\n            }\r\n        }\r\n\r\n        private void UpdateMasterVolumeIcon()\r\n        {\r\n            if (_device.Parent.Kind == AudioDeviceKind.Recording.ToString())\r\n            {\r\n                IconKind = DeviceIconKind.Microphone;\r\n            }\r\n            else\r\n            {\r\n                var isOnWindows11 = Environment.OSVersion.IsAtLeast(OSVersions.Windows11);\r\n                if (_device.IsMuted)\r\n                {\r\n                    IconKind = DeviceIconKind.Mute;\r\n                }\r\n                else if (isOnWindows11 && _device.Volume > 0.66f)\r\n                {\r\n                    IconKind = DeviceIconKind.Bar3;\r\n                }\r\n                else if (!isOnWindows11 && _device.Volume >= 0.66f)\r\n                {\r\n                    IconKind = DeviceIconKind.Bar3;\r\n                }\r\n                else if (isOnWindows11 && _device.Volume > 0.33f)\r\n                {\r\n                    IconKind = DeviceIconKind.Bar2;\r\n                }\r\n                else if (!isOnWindows11 && _device.Volume >= 0.33f)\r\n                {\r\n                    IconKind = DeviceIconKind.Bar2;\r\n                }\r\n                else if (_device.Volume > 0.00f)\r\n                {\r\n                    IconKind = DeviceIconKind.Bar1;\r\n                }\r\n                else\r\n                {\r\n                    IconKind = DeviceIconKind.Bar0;\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Add:\r\n                    Debug.Assert(e.NewItems.Count == 1);\r\n                    AddSession((IAudioDeviceSession)e.NewItems[0]);\r\n                    break;\r\n\r\n                case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:\r\n                    Debug.Assert(e.OldItems.Count == 1);\r\n                    var existing = Apps.FirstOrDefault(x => x.Id == ((IAudioDeviceSession)e.OldItems[0]).Id);\r\n                    if (existing != null)\r\n                    {\r\n                        Apps.Remove(existing);\r\n                    }\r\n                    break;\r\n\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n        }\r\n\r\n        private void AddSession(IAudioDeviceSession session)\r\n        {\r\n            var newSession = new AppItemViewModel(this, session);\r\n\r\n            foreach (var app in Apps)\r\n            {\r\n                if (app.DoesGroupWith(newSession))\r\n                {\r\n                    // Remove the fake app entry after copying any changes the user did.\r\n                    newSession.Volume = app.Volume;\r\n                    newSession.IsMuted = app.IsMuted;\r\n                    Apps.Remove(app);\r\n                    break;\r\n                }\r\n            }\r\n\r\n            Apps.AddSorted(newSession, AppItemViewModel.CompareByExeName);\r\n        }\r\n\r\n        public void AppMovingToThisDevice(TemporaryAppItemViewModel app)\r\n        {\r\n            app.Expired += OnAppExpired;\r\n\r\n            foreach (var childApp in app.ChildApps)\r\n            {\r\n                ((IAudioDeviceManagerWindowsAudio)_deviceManager).UnhideSessionsForProcessId(_device.Id, childApp.ProcessId);\r\n            }\r\n\r\n            bool hasExistingAppGroup = false;\r\n            foreach (var a in Apps)\r\n            {\r\n                if (a.DoesGroupWith(app))\r\n                {\r\n                    hasExistingAppGroup = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!hasExistingAppGroup)\r\n            {\r\n                Apps.AddSorted(app, AppItemViewModel.CompareByExeName);\r\n            }\r\n        }\r\n\r\n        private void OnAppExpired(object sender, EventArgs e)\r\n        {\r\n            var app = (TemporaryAppItemViewModel)sender;\r\n            if (Apps.Contains(app))\r\n            {\r\n                app.Expired -= OnAppExpired;\r\n                Apps.Remove(app);\r\n            }\r\n        }\r\n\r\n        internal void AppLeavingFromThisDevice(IAppItemViewModel app)\r\n        {\r\n            if (app is TemporaryAppItemViewModel)\r\n            {\r\n                Apps.Remove(app);\r\n            }\r\n        }\r\n\r\n        public void MakeDefaultDevice() => _deviceManager.Default = _device;\r\n        public void IncrementVolume(int delta) => Volume += delta;\r\n        public override string ToString() => AccessibleName;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/EarTrumpetAboutPageViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class EarTrumpetAboutPageViewModel : SettingsPageViewModel\r\n    {\r\n        public ICommand OpenDiagnosticsCommand { get; }\r\n        public ICommand OpenAboutCommand { get; }\r\n        public ICommand OpenFeedbackCommand { get; }\r\n        public ICommand OpenPrivacyPolicyCommand { get; }\r\n        public string AboutText { get; }\r\n\r\n        public bool IsTelemetryEnabled\r\n        {\r\n            get => _settings.IsTelemetryEnabled;\r\n            set => _settings.IsTelemetryEnabled = value;\r\n        }\r\n\r\n        private readonly Action _openDiagnostics;\r\n        private readonly AppSettings _settings;\r\n\r\n        public EarTrumpetAboutPageViewModel(Action openDiagnostics, AppSettings settings) : base(null)\r\n        {\r\n            _settings = settings;\r\n            _openDiagnostics = openDiagnostics;\r\n            Glyph = \"\\xE946\";\r\n            Title = Properties.Resources.AboutTitle;\r\n            AboutText = $\"EarTrumpet {App.PackageVersion}\";\r\n\r\n            OpenAboutCommand = new RelayCommand(OpenAbout);\r\n            OpenDiagnosticsCommand = new RelayCommand(OpenDiagnostics);\r\n            OpenFeedbackCommand = new RelayCommand(OpenGitHubIssueChooser);\r\n            OpenPrivacyPolicyCommand = new RelayCommand(OpenPrivacyPolicy);\r\n        }\r\n\r\n        private void OpenDiagnostics()\r\n        {\r\n            if (Keyboard.IsKeyDown(Key.LeftShift) && Keyboard.IsKeyDown(Key.LeftCtrl))\r\n            {\r\n                Trace.WriteLine($\"EarTrumpetAboutPageViewModel OpenDiagnostics - CRASH\");\r\n                throw new Exception(\"This is an intentional crash.\");\r\n            }\r\n\r\n            _openDiagnostics.Invoke();\r\n        }\r\n\r\n        private void OpenGitHubIssueChooser() => ProcessHelper.StartNoThrow(\"https://github.com/File-New-Project/EarTrumpet/issues/new/choose\");\r\n        private void OpenAbout() => ProcessHelper.StartNoThrow(\"https://github.com/File-New-Project/EarTrumpet\");\r\n        private void OpenPrivacyPolicy() => ProcessHelper.StartNoThrow(\"https://github.com/File-New-Project/EarTrumpet/blob/master/PRIVACY.md\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/EarTrumpetCommunitySettingsPageViewModel.cs",
    "content": "﻿namespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class EarTrumpetCommunitySettingsPageViewModel : SettingsPageViewModel\r\n    {\r\n        private readonly AppSettings _settings;\r\n        public bool UseLogarithmicVolume\r\n        {\r\n            get => _settings.UseLogarithmicVolume;\r\n            set => _settings.UseLogarithmicVolume = value;\r\n        }\r\n        \r\n        public EarTrumpetCommunitySettingsPageViewModel(AppSettings settings) : base(null)\r\n        {\r\n            _settings = settings;\r\n            Title = Properties.Resources.CommunitySettingsPageText;\r\n            Glyph = \"\\xE902\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/EarTrumpetLegacySettingsPageViewModel.cs",
    "content": "﻿\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class EarTrumpetLegacySettingsPageViewModel : SettingsPageViewModel\r\n    {\r\n        public bool UseLegacyIcon\r\n        {\r\n            get => _settings.UseLegacyIcon;\r\n            set => _settings.UseLegacyIcon = value;\r\n        }\r\n\r\n        private readonly AppSettings _settings;\r\n\r\n        public EarTrumpetLegacySettingsPageViewModel(AppSettings settings) : base(null)\r\n        {\r\n            _settings = settings;\r\n            Title = Properties.Resources.LegacySettingsPageText;\r\n            Glyph = \"\\xE825\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs",
    "content": "﻿\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class EarTrumpetMouseSettingsPageViewModel : SettingsPageViewModel\r\n    {\r\n        public bool UseScrollWheelInTray\r\n        {\r\n            get => _settings.UseScrollWheelInTray;\r\n            set => _settings.UseScrollWheelInTray = value;\r\n        }\r\n\r\n        public bool UseGlobalMouseWheelHook\r\n        {\r\n            get => _settings.UseGlobalMouseWheelHook;\r\n            set => _settings.UseGlobalMouseWheelHook = value;\r\n        }\r\n\r\n        private readonly AppSettings _settings;\r\n\r\n        public EarTrumpetMouseSettingsPageViewModel(AppSettings settings) : base(null)\r\n        {\r\n            _settings = settings;\r\n            Title = Properties.Resources.MouseSettingsPageText;\r\n            Glyph = \"\\xE962\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/EarTrumpetShortcutsPageViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    internal class EarTrumpetShortcutsPageViewModel : SettingsPageViewModel\r\n    {\r\n        private static readonly string s_hotkeyNoneText = new HotkeyData().ToString();\r\n\r\n        public HotkeyViewModel OpenFlyoutHotkey { get; }\r\n        public string DefaultHotKey => s_hotkeyNoneText;\r\n\r\n        public HotkeyViewModel OpenMixerHotkey { get; }\r\n        public string DefaultMixerHotKey => s_hotkeyNoneText;\r\n\r\n        public HotkeyViewModel OpenSettingsHotkey { get; }\r\n        public string DefaultSettingsHotKey => s_hotkeyNoneText;\r\n\r\n        public HotkeyViewModel AbsoluteVolumeUpHotkey { get; }\r\n        public string DefaultAbsoluteVolumeUpHotkey => s_hotkeyNoneText;\r\n\r\n        public HotkeyViewModel AbsoluteVolumeDownHotkey { get; }\r\n        public string DefaultAbsoluteVolumeDownHotkey => s_hotkeyNoneText;\r\n\r\n        public EarTrumpetShortcutsPageViewModel(AppSettings settings) : base(null)\r\n        {\r\n            Title = Properties.Resources.ShortcutsPageText;\r\n            Glyph = \"\\xE765\";\r\n\r\n            OpenFlyoutHotkey = new HotkeyViewModel(settings.FlyoutHotkey, (newHotkey) => settings.FlyoutHotkey = newHotkey);\r\n            OpenMixerHotkey = new HotkeyViewModel(settings.MixerHotkey, (newHotkey) => settings.MixerHotkey = newHotkey);\r\n            OpenSettingsHotkey = new HotkeyViewModel(settings.SettingsHotkey, (newHotkey) => settings.SettingsHotkey = newHotkey);\r\n            AbsoluteVolumeUpHotkey = new HotkeyViewModel(settings.AbsoluteVolumeUpHotkey, (newHotkey) => settings.AbsoluteVolumeUpHotkey = newHotkey);\r\n            AbsoluteVolumeDownHotkey = new HotkeyViewModel(settings.AbsoluteVolumeDownHotkey, (newHotkey) => settings.AbsoluteVolumeDownHotkey = newHotkey);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/FlyoutViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Collections.Specialized;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class FlyoutViewModel : BindableBase, IPopupHostViewModel, IFlyoutViewModel\r\n    {\r\n        public event EventHandler<object> WindowSizeInvalidated;\r\n        public event EventHandler<object> StateChanged;\r\n\r\n        public ModalDialogViewModel Dialog { get; }\r\n        public bool IsExpanded { get; private set; }\r\n        public bool IsExpandingOrCollapsing { get; private set; }\r\n        public bool CanExpand => _mainViewModel.AllDevices.Count > 1;\r\n        public string DeviceNameText => Devices.Count > 0 ? Devices[0].DisplayName : null;\r\n        public FlyoutViewState State { get; private set; }\r\n        public ObservableCollection<DeviceViewModel> Devices { get; private set; }\r\n        public ICommand ExpandCollapse { get; private set; }\r\n        public InputType LastInput { get; private set; }\r\n        public ICommand DisplaySettingsChanged { get; }\r\n\r\n        private readonly DeviceCollectionViewModel _mainViewModel;\r\n        private readonly DispatcherTimer _deBounceTimer;\r\n        private readonly Dispatcher _currentDispatcher = Dispatcher.CurrentDispatcher;\r\n        private readonly Action _returnFocusToTray;\r\n        private readonly AppSettings _settings;\r\n        private bool _closedDuringOpen;\r\n        private MouseHook _mh;\r\n        private Rect _winRect;\r\n\r\n        public FlyoutViewModel(DeviceCollectionViewModel mainViewModel, Action returnFocusToTray, AppSettings settings)\r\n        {\r\n            _settings = settings;\r\n            IsExpanded = _settings.IsExpanded;\r\n            Dialog = new ModalDialogViewModel();\r\n            Devices = new ObservableCollection<DeviceViewModel>();\r\n            _returnFocusToTray = returnFocusToTray;\r\n            _mainViewModel = mainViewModel;\r\n            _mainViewModel.DefaultChanged += OnDefaultPlaybackDeviceChanged;\r\n            _mainViewModel.AllDevices.CollectionChanged += AllDevices_CollectionChanged;\r\n            AllDevices_CollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));\r\n\r\n            // This timer is used to enable clicking on the tray icon while the flyout is open, and not causing a\r\n            // rapid hide and show cycle.  This time represents the minimum time between which the flyout may be opened.\r\n            _deBounceTimer = new DispatcherTimer { Interval = TimeSpan.FromMilliseconds(300) };\r\n            _deBounceTimer.Tick += OnDeBounceTimerTick;\r\n\r\n            ExpandCollapse = new RelayCommand(() =>\r\n            {\r\n                IsExpandingOrCollapsing = true;\r\n                BeginClose(LastInput);\r\n            });\r\n            DisplaySettingsChanged = new RelayCommand(() => BeginClose(InputType.Command));\r\n\r\n            _mh = new MouseHook();\r\n            _mh.MouseWheelEvent += OnMouseWheelEvent;\r\n        }\r\n\r\n        public void UpdateWindowPos(double top, double left, double height, double width)\r\n        {\r\n            _winRect = new Rect(left, top, width, height);\r\n        }\r\n\r\n        private void OnDeBounceTimerTick(object sender, EventArgs e)\r\n        {\r\n            Debug.Assert(State == FlyoutViewState.Closing_Stage2);\r\n            _deBounceTimer.IsEnabled = false;\r\n            ChangeState(FlyoutViewState.Hidden);\r\n        }\r\n\r\n        private void AddDevice(DeviceViewModel device)\r\n        {\r\n            if (IsExpanded || Devices.Count == 0)\r\n            {\r\n                device.Apps.CollectionChanged += Apps_CollectionChanged;\r\n                Devices.Insert(0, device);\r\n            }\r\n        }\r\n\r\n        private void Apps_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case NotifyCollectionChangedAction.Remove:\r\n                    if (Dialog.Focused is FocusedAppItemViewModel &&\r\n                        (IAppItemViewModel)e.OldItems[0] == ((FocusedAppItemViewModel)Dialog.Focused)?.App)\r\n                    {\r\n                        Dialog.IsVisible = false;\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            InvalidateWindowSize();\r\n        }\r\n\r\n        private void RemoveDevice(string id)\r\n        {\r\n            var existing = Devices.FirstOrDefault(d => d.Id == id);\r\n            if (existing != null)\r\n            {\r\n                existing.Apps.CollectionChanged -= Apps_CollectionChanged;\r\n                Devices.Remove(existing);\r\n            }\r\n        }\r\n\r\n        private void AllDevices_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            switch (e.Action)\r\n            {\r\n                case NotifyCollectionChangedAction.Add:\r\n                    AddDevice((DeviceViewModel)e.NewItems[0]);\r\n                    break;\r\n\r\n                case NotifyCollectionChangedAction.Remove:\r\n                    RemoveDevice(((DeviceViewModel)e.OldItems[0]).Id);\r\n                    break;\r\n\r\n                case NotifyCollectionChangedAction.Reset:\r\n                    for (int i = Devices.Count - 1; i >= 0; i--)\r\n                    {\r\n                        RemoveDevice(Devices[i].Id);\r\n                    }\r\n\r\n                    foreach (var device in _mainViewModel.AllDevices)\r\n                    {\r\n                        AddDevice(device);\r\n                    }\r\n\r\n                    OnDefaultPlaybackDeviceChanged(null, _mainViewModel.Default);\r\n                    break;\r\n\r\n                default:\r\n                    throw new NotImplementedException();\r\n            }\r\n\r\n            UpdateTextVisibility();\r\n            RaiseDevicesChanged();\r\n        }\r\n\r\n        private void RaiseDevicesChanged()\r\n        {\r\n            RaisePropertyChanged(nameof(IsExpanded));\r\n            RaisePropertyChanged(nameof(CanExpand));\r\n            RaisePropertyChanged(nameof(DeviceNameText));\r\n            InvalidateWindowSize();\r\n        }\r\n\r\n        private void OnDefaultPlaybackDeviceChanged(object sender, DeviceViewModel e)\r\n        {\r\n            // No longer any devices.\r\n            if (e == null) return;\r\n\r\n            var foundDevice = Devices.FirstOrDefault(d => d.Id == e.Id);\r\n            if (foundDevice != null)\r\n            {\r\n                // Push to bottom.\r\n                Devices.Move(Devices.IndexOf(foundDevice), Devices.Count - 1);\r\n            }\r\n            else\r\n            {\r\n                var foundAllDevice = _mainViewModel.AllDevices.FirstOrDefault(d => d.Id == e.Id);\r\n                if (foundAllDevice != null)\r\n                {\r\n                    // We found the device in AllDevices which was not in Devices.\r\n                    // Thus: We are collapsed and can dump the single device in Devices:\r\n                    Devices.Clear();\r\n                    foundAllDevice.Apps.CollectionChanged += Apps_CollectionChanged;\r\n                    Devices.Add(foundAllDevice);\r\n                }\r\n            }\r\n            UpdateTextVisibility();\r\n            RaiseDevicesChanged();\r\n        }\r\n\r\n        private void UpdateTextVisibility()\r\n        {\r\n            // Show display name on only the \"top\" device, which handles Expanded and Collapsed.\r\n            for (var i = 0; i < Devices.Count; i++)\r\n            {\r\n                Devices[i].IsDisplayNameVisible = i > 0;\r\n            }\r\n        }\r\n\r\n        public void DoExpandCollapse()\r\n        {\r\n            IsExpanded = !IsExpanded;\r\n            _settings.IsExpanded = IsExpanded;\r\n            if (IsExpanded)\r\n            {\r\n                // Add any that aren't existing.\r\n                foreach (var device in _mainViewModel.AllDevices)\r\n                {\r\n                    if (!Devices.Contains(device))\r\n                    {\r\n                        device.Apps.CollectionChanged += Apps_CollectionChanged;\r\n                        Devices.Insert(0, device);\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // Remove all but the default.\r\n                for (int i = Devices.Count - 1; i >= 0; i--)\r\n                {\r\n                    var device = Devices[i];\r\n                    if (device.Id != _mainViewModel.Default?.Id)\r\n                    {\r\n                        device.Apps.CollectionChanged -= Apps_CollectionChanged;\r\n                        Devices.Remove(device);\r\n                    }\r\n                }\r\n            }\r\n\r\n            UpdateTextVisibility();\r\n            RaiseDevicesChanged();\r\n        }\r\n\r\n        private void InvalidateWindowSize()\r\n        {\r\n            // We must be async because otherwise SetWindowPos will pump messages before the UI has updated.\r\n            _currentDispatcher.BeginInvoke((Action)(() =>\r\n            {\r\n                WindowSizeInvalidated?.Invoke(this, null);\r\n            }));\r\n        }\r\n\r\n        public void ChangeState(FlyoutViewState state)\r\n        {\r\n            Trace.WriteLine($\"FlyoutViewModel ChangeState {state}\");\r\n            ValidateStateChange(state);\r\n            State = state;\r\n            StateChanged?.Invoke(this, null);\r\n\r\n            switch (State)\r\n            {\r\n                case FlyoutViewState.Open:\r\n                    _mainViewModel.OnTrayFlyoutShown();\r\n\r\n                    if (_closedDuringOpen)\r\n                    {\r\n                        _closedDuringOpen = false;\r\n                        BeginClose(InputType.Command);\r\n                    }\r\n                    break;\r\n                case FlyoutViewState.Closing_Stage1:\r\n                    _mainViewModel.OnTrayFlyoutHidden();\r\n                    Dialog.IsVisible = false;\r\n\r\n                    if (LastInput == InputType.Keyboard && !IsExpandingOrCollapsing)\r\n                    {\r\n                        _returnFocusToTray.Invoke();\r\n                    }\r\n                    break;\r\n                case FlyoutViewState.Closing_Stage2:\r\n                    _deBounceTimer.Start();\r\n                    break;\r\n                case FlyoutViewState.Hidden:\r\n                    if (IsExpandingOrCollapsing)\r\n                    {\r\n                        IsExpandingOrCollapsing = false;\r\n                        DoExpandCollapse();\r\n                        BeginOpen(LastInput);\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void ValidateStateChange(FlyoutViewState newState)\r\n        {\r\n            var oldState = State;\r\n            bool isValidStateTransition =\r\n                (oldState == FlyoutViewState.NotLoaded && newState == FlyoutViewState.Hidden) ||\r\n                (oldState == FlyoutViewState.Hidden && newState == FlyoutViewState.Opening) ||\r\n                (oldState == FlyoutViewState.Opening && newState == FlyoutViewState.Open) ||\r\n                (oldState == FlyoutViewState.Open && newState == FlyoutViewState.Closing_Stage1) ||\r\n                (oldState == FlyoutViewState.Closing_Stage1 && newState == FlyoutViewState.Closing_Stage2) ||\r\n                (oldState == FlyoutViewState.Closing_Stage1 && newState == FlyoutViewState.Hidden) ||\r\n                (oldState == FlyoutViewState.Closing_Stage2 && newState == FlyoutViewState.Hidden);\r\n            Debug.Assert(isValidStateTransition);\r\n        }\r\n\r\n        public void OpenPopup(object vm, FrameworkElement container)\r\n        {\r\n            Dialog.IsVisible = false;\r\n\r\n            if (vm is IAppItemViewModel)\r\n            {\r\n                Dialog.Focused = new FocusedAppItemViewModel(_mainViewModel, (IAppItemViewModel)vm);\r\n            }\r\n            else if (vm is DeviceViewModel)\r\n            {\r\n                var deviceViewModel = new FocusedDeviceViewModel(_mainViewModel, (DeviceViewModel)vm);\r\n                if (deviceViewModel.IsApplicable)\r\n                {\r\n                    Dialog.Focused = deviceViewModel;\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Dialog.Focused = (IFocusedViewModel)vm;\r\n            }\r\n\r\n            if (Dialog.Focused != null)\r\n            {\r\n                Dialog.Focused.RequestClose += () => Dialog.IsVisible = false;\r\n                Dialog.Source = container;\r\n                Dialog.IsVisible = true;\r\n            }\r\n        }\r\n\r\n        private int OnMouseWheelEvent(object sender, System.Windows.Forms.MouseEventArgs e)\r\n        {\r\n            var existing = _mainViewModel.Default;\r\n            if (existing != null)\r\n            {\r\n                if (!_winRect.Contains(new Point(e.X, e.Y)))\r\n                {\r\n                    existing.IncrementVolume(Math.Sign(e.Delta) * 2);\r\n                    return -1;\r\n                }\r\n            }\r\n            return 0;\r\n        }\r\n\r\n        public void BeginOpen(InputType inputType)\r\n        {\r\n            if (State == FlyoutViewState.Hidden)\r\n            {\r\n                LastInput = inputType;\r\n                ChangeState(FlyoutViewState.Opening);\r\n            }\r\n\r\n            if (_settings.UseGlobalMouseWheelHook)\r\n            {\r\n                _mh.SetHook();\r\n            }\r\n        }\r\n\r\n        public void BeginClose(InputType inputType)\r\n        {\r\n            if (State == FlyoutViewState.Open)\r\n            {\r\n                LastInput = inputType;\r\n                ChangeState(FlyoutViewState.Closing_Stage1);\r\n            }\r\n            else if (State == FlyoutViewState.Opening)\r\n            {\r\n                _closedDuringOpen = true;\r\n            }\r\n\r\n            _mh.UnHook();\r\n        }\r\n\r\n        public void OpenFlyout(InputType inputType)\r\n        {\r\n            switch (State)\r\n            {\r\n                case FlyoutViewState.Hidden:\r\n                    BeginOpen(inputType);\r\n                    break;\r\n                case FlyoutViewState.Open:\r\n                    BeginClose(inputType);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        public void OnDeactivated(object sender, EventArgs e)\r\n        {\r\n            if (State == FlyoutViewState.Opening)\r\n            {\r\n                return;\r\n            }\r\n            BeginClose(InputType.Command);\r\n        }\r\n\r\n        public void OnPreviewKeyDown(object sender, KeyEventArgs e)\r\n        {\r\n            if (e.Key == Key.Escape)\r\n            {\r\n                if (Dialog.IsVisible)\r\n                {\r\n                    Dialog.IsVisible = false;\r\n                }\r\n                else\r\n                {\r\n                    BeginClose(InputType.Keyboard);\r\n                }\r\n            }\r\n            else if (Keyboard.Modifiers == ModifierKeys.Alt && e.SystemKey == Key.Space)\r\n            {\r\n                // Disable the system menu.\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        public void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)\r\n        {\r\n            e.Cancel = true;\r\n            BeginClose(InputType.Keyboard);\r\n        }\r\n\r\n        public void OnLightDismissBorderPreviewMouseDown(object sender, MouseButtonEventArgs e)\r\n        {\r\n            Dialog.IsVisible = false;\r\n            e.Handled = true;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/FocusedAppItemViewModel.cs",
    "content": "﻿using EarTrumpet.Extensibility.Hosting;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class FocusedAppItemViewModel : IFocusedViewModel\r\n    {\r\n        public event Action RequestClose;\r\n\r\n        public IAppItemViewModel App { get; }\r\n        public ObservableCollection<ToolbarItemViewModel> Toolbar { get; }\r\n        public string DisplayName => App.DisplayName;\r\n        public ObservableCollection<object> Addons { get; }\r\n\r\n        public FocusedAppItemViewModel(DeviceCollectionViewModel parent, IAppItemViewModel app)\r\n        {\r\n            App = app;\r\n\r\n            Toolbar = new ObservableCollection<ToolbarItemViewModel>();\r\n            Toolbar.Add(new ToolbarItemViewModel\r\n            {\r\n                GlyphFontSize = 10,\r\n                DisplayName = Properties.Resources.CloseButtonAccessibleText,\r\n                Glyph = \"\\uE8BB\",\r\n                Command = new RelayCommand(() => RequestClose.Invoke())\r\n            });\r\n\r\n            if (app.IsMovable)\r\n            {\r\n                var persistedDeviceId = app.PersistedOutputDevice;\r\n\r\n                var items = parent.AllDevices.Select(dev => new ContextMenuItem\r\n                {\r\n                    DisplayName = dev.DisplayName,\r\n                    Command = new RelayCommand(() =>\r\n                    {\r\n                        parent.MoveAppToDevice(app, dev);\r\n                        RequestClose.Invoke();\r\n                    }),\r\n                    IsChecked = (dev.Id == persistedDeviceId),\r\n                }).ToList();\r\n\r\n                items.Insert(0, new ContextMenuItem\r\n                {\r\n                    DisplayName = Properties.Resources.DefaultDeviceText,\r\n                    IsChecked = (string.IsNullOrWhiteSpace(persistedDeviceId)),\r\n                    Command = new RelayCommand(() =>\r\n                    {\r\n                        parent.MoveAppToDevice(app, null);\r\n                        RequestClose.Invoke();\r\n                    }),\r\n                });\r\n                items.Insert(1, new ContextMenuSeparator());\r\n                Toolbar.Insert(0, new ToolbarItemViewModel\r\n                {\r\n                    GlyphFontSize = 16,\r\n                    DisplayName = Properties.Resources.MoveButtonAccessibleText,\r\n                    Glyph = \"\\uE8AB\",\r\n                    Menu = new ObservableCollection<ContextMenuItem>(items)\r\n                });\r\n            }\r\n\r\n            var contentItems = AddonManager.Host.AppContentItems;\r\n            if (contentItems != null)\r\n            {\r\n                Addons = new ObservableCollection<object>(contentItems.Select(a => a.GetContentForApp(App.Parent.Id, App.Id, () => RequestClose.Invoke())).ToArray());\r\n\r\n                var menuItems = contentItems.SelectMany(a => a.GetContextMenuItemsForApp(app.Parent.Id, app.AppId));\r\n                if (menuItems.Any())\r\n                {\r\n                    Toolbar.Insert(0, new ToolbarItemViewModel\r\n                    {\r\n                        GlyphFontSize = 16,\r\n                        DisplayName = Properties.Resources.MoreCommandsAccessibleText,\r\n                        Glyph = \"\\uE10C\",\r\n                        Menu = new ObservableCollection<ContextMenuItem>(menuItems)\r\n                    });\r\n                }\r\n            }\r\n        }\r\n\r\n        public void Closing()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/FocusedDeviceViewModel.cs",
    "content": "﻿using EarTrumpet.Extensibility.Hosting;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class FocusedDeviceViewModel : IFocusedViewModel\r\n    {\r\n        public event Action RequestClose;\r\n\r\n        public string DisplayName { get; }\r\n        public ObservableCollection<ToolbarItemViewModel> Toolbar { get; }\r\n\r\n        public ObservableCollection<object> Addons { get; }\r\n\r\n        public bool IsApplicable => (Addons != null && Addons.Count > 0);\r\n\r\n        public FocusedDeviceViewModel(DeviceCollectionViewModel mainViewModel, DeviceViewModel device)\r\n        {\r\n            DisplayName = device.DisplayName;\r\n            Toolbar = new ObservableCollection<ToolbarItemViewModel>();\r\n            Toolbar.Add(new ToolbarItemViewModel\r\n            {\r\n                GlyphFontSize = 10,\r\n                DisplayName = Properties.Resources.CloseButtonAccessibleText,\r\n                Glyph = \"\\uE8BB\",\r\n                Command = new RelayCommand(() => RequestClose.Invoke())\r\n            });\r\n\r\n            var contentItems = AddonManager.Host.DeviceContentItems;\r\n            if (contentItems != null)\r\n            {\r\n                Addons = new ObservableCollection<object>(contentItems.Select(a => a.GetContentForDevice(device.Id, () => RequestClose.Invoke())).Where(a => a != null).ToArray());\r\n\r\n                var menuItems = contentItems.SelectMany(a => a.GetContextMenuItemsForDevice(device.Id)).Where(m => m != null);\r\n                if (menuItems.Any())\r\n                {\r\n                    Toolbar.Insert(0, new ToolbarItemViewModel\r\n                    {\r\n                        GlyphFontSize = 16,\r\n                        DisplayName = Properties.Resources.MoreCommandsAccessibleText,\r\n                        Glyph = \"\\uE10C\",\r\n                        Menu = new ObservableCollection<ContextMenuItem>(menuItems)\r\n                    });\r\n                }\r\n            }\r\n        }\r\n\r\n        public void Closing() { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/FullWindowViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class FullWindowViewModel : BindableBase, IPopupHostViewModel\r\n    {\r\n        public static readonly int SmallDeviceCountLimit = 3;\r\n\r\n        public ObservableCollection<DeviceViewModel> AllDevices => _mainViewModel.AllDevices;\r\n        public ModalDialogViewModel Dialog { get; }\r\n        public ICommand DisplaySettingsChanged { get; }\r\n        public bool IsManyDevicesMode => AllDevices.Count > SmallDeviceCountLimit;\r\n\r\n        private readonly DeviceCollectionViewModel _mainViewModel;\r\n        private WindowViewState _state;\r\n\r\n        public FullWindowViewModel(DeviceCollectionViewModel mainViewModel)\r\n        {\r\n            Dialog = new ModalDialogViewModel();\r\n            _mainViewModel = mainViewModel;\r\n            _mainViewModel.OnFullWindowOpened();\r\n            _mainViewModel.AllDevices.CollectionChanged += OnDevicesChanged;\r\n\r\n            DisplaySettingsChanged = new RelayCommand(() => Dialog.IsVisible = false);\r\n        }\r\n\r\n        private void OnDevicesChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(nameof(IsManyDevicesMode));\r\n        }\r\n\r\n        public void OpenPopup(object vm, FrameworkElement container)\r\n        {\r\n            Dialog.IsVisible = false;\r\n\r\n            if (vm is IAppItemViewModel)\r\n            {\r\n                Dialog.Focused = new FocusedAppItemViewModel(_mainViewModel, (IAppItemViewModel)vm);\r\n            }\r\n            else\r\n            {\r\n                var deviceViewModel = new FocusedDeviceViewModel(_mainViewModel, (DeviceViewModel)vm);\r\n                if (deviceViewModel.IsApplicable)\r\n                {\r\n                    Dialog.Focused = deviceViewModel;\r\n                }\r\n            }\r\n\r\n            if (Dialog.Focused != null)\r\n            {\r\n                Dialog.Focused.RequestClose += () => Dialog.IsVisible = false;\r\n                Dialog.Source = container;\r\n                Dialog.IsVisible = true;\r\n            }\r\n        }\r\n\r\n        public void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)\r\n        {\r\n            switch (_state)\r\n            {\r\n                case WindowViewState.Open:\r\n                    _state = WindowViewState.Closing;\r\n                    e.Cancel = true;\r\n\r\n                    Dialog.IsVisible = false;\r\n                    _mainViewModel.OnFullWindowClosed();\r\n\r\n                    var window = (Window)sender;\r\n                    WindowAnimationLibrary.BeginWindowExitAnimation(window, () =>\r\n                    {\r\n                        _state = WindowViewState.CloseReady;\r\n                        window.Close();\r\n                    });\r\n                    break;\r\n                case WindowViewState.Closing:\r\n                    // Ignore any requests while playing the close animation.\r\n                    e.Cancel = true;\r\n                    break;\r\n                case WindowViewState.CloseReady:\r\n                    // Accept the close.\r\n                    break;\r\n            }\r\n        }\r\n\r\n        public void OnPreviewKeyDown(object sender, KeyEventArgs e)\r\n        {\r\n            if (e.Key == Key.Escape)\r\n            {\r\n                if (Dialog.IsVisible)\r\n                {\r\n                    Dialog.IsVisible = false;\r\n                }\r\n                else\r\n                {\r\n                    ((Window)sender).Close();\r\n                }\r\n            }\r\n        }\r\n\r\n        public void OnSizeChanged(object sender, SizeChangedEventArgs e)\r\n        {\r\n            Dialog.IsVisible = false;\r\n        }\r\n\r\n        public void OnLocationChanged(object sender, EventArgs e)\r\n        {\r\n            Dialog.IsVisible = false;\r\n        }\r\n\r\n        public void OnLightDismissBorderPreviewMouseDown(object sender, MouseButtonEventArgs e)\r\n        {\r\n            Dialog.IsVisible = false;\r\n            e.Handled = true;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/HotkeyViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class HotkeyViewModel : BindableBase\r\n    {\r\n        private string _hotkeyText;\r\n        public string HotkeyText\r\n        {\r\n            get => _hotkeyText;\r\n            set\r\n            {\r\n                if (_hotkeyText != value)\r\n                {\r\n                    _hotkeyText = value;\r\n                    RaisePropertyChanged(nameof(HotkeyText));\r\n\r\n                    if (string.IsNullOrWhiteSpace(_hotkeyText))\r\n                    {\r\n                        _hotkey.Modifiers = System.Windows.Forms.Keys.None;\r\n                        _hotkey.Key = System.Windows.Forms.Keys.None;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private readonly Action<HotkeyData> _save;\r\n        private HotkeyData _hotkey;\r\n        private HotkeyData _savedHotkey;\r\n\r\n        public HotkeyViewModel(HotkeyData hotkey, Action<HotkeyData> save)\r\n        {\r\n            _hotkey = hotkey;\r\n            _savedHotkey = new HotkeyData { Key = hotkey.Key, Modifiers = hotkey.Modifiers };\r\n            _save = save;\r\n\r\n            SetHotkeyText();\r\n        }\r\n\r\n        public void OnPreviewKeyDown(object sender, KeyEventArgs e)\r\n        {\r\n            // If Alt is down, a system key is being prepared\r\n            var key = (e.Key == Key.System) ? e.SystemKey : e.Key;\r\n\r\n            // Impossible hotkeys (even with modifiers):\r\n            // Tab, Backspace, Escape\r\n            if (key == Key.Tab)\r\n            {\r\n                return;\r\n            }\r\n\r\n            e.Handled = true;\r\n\r\n            if (key == Key.Escape || key == Key.Back)\r\n            {\r\n                // Clear selection\r\n                _hotkey.Key = System.Windows.Forms.Keys.None;\r\n                _hotkey.Modifiers = System.Windows.Forms.Keys.None;\r\n            }\r\n            else\r\n            {\r\n                _hotkey.Modifiers = System.Windows.Forms.Keys.None;\r\n                _hotkey.Key = System.Windows.Forms.Keys.None;\r\n\r\n                if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))\r\n                {\r\n                    _hotkey.Modifiers = System.Windows.Forms.Keys.Control;\r\n                }\r\n\r\n                if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))\r\n                {\r\n                    _hotkey.Modifiers |= System.Windows.Forms.Keys.Shift;\r\n                }\r\n\r\n                if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))\r\n                {\r\n                    _hotkey.Modifiers |= System.Windows.Forms.Keys.Alt;\r\n                }\r\n\r\n                if (Keyboard.IsKeyDown(Key.LWin) || Keyboard.IsKeyDown(Key.RWin))\r\n                {\r\n                    _hotkey.Modifiers |= System.Windows.Forms.Keys.LWin;\r\n                }\r\n\r\n                if (key == Key.LeftShift || key == Key.RightShift ||\r\n                    key == Key.LeftAlt || key == Key.RightAlt ||\r\n                    key == Key.LeftCtrl || key == Key.RightCtrl ||\r\n                    key == Key.CapsLock || key == Key.LWin || key == Key.RWin)\r\n                {\r\n                    // Ignore all types of modifiers\r\n                }\r\n                else\r\n                {\r\n                    _hotkey.Key = (System.Windows.Forms.Keys)KeyInterop.VirtualKeyFromKey(key);\r\n                }\r\n            }\r\n            SetHotkeyText();\r\n        }\r\n\r\n        public void OnLostFocus(object sender, RoutedEventArgs e)\r\n        {\r\n            // Disallow e.g. Alt+None modifier-only hotkeys.\r\n            if (_hotkey.Key == System.Windows.Forms.Keys.None &&\r\n                _hotkey.Modifiers != System.Windows.Forms.Keys.None)\r\n            {\r\n                _hotkey.Modifiers = System.Windows.Forms.Keys.None;\r\n                SetHotkeyText();\r\n            }\r\n\r\n            if (_hotkey != _savedHotkey)\r\n            {\r\n                _save(_hotkey);\r\n                _savedHotkey = new HotkeyData { Key = _hotkey.Key, Modifiers = _hotkey.Modifiers };\r\n            }\r\n            HotkeyManager.Current.Resume();\r\n        }\r\n\r\n        public void OnGotFocus(object sender, RoutedEventArgs e)\r\n        {\r\n            HotkeyManager.Current.Pause();\r\n        }\r\n\r\n        private void SetHotkeyText()\r\n        {\r\n            HotkeyText = _hotkey.ToString().Replace(System.Windows.Forms.Keys.None.ToString(), \"\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/IAppItemViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface IAppItemViewModel : IAppIconSource, INotifyPropertyChanged\r\n    {\r\n        string Id { get; }\r\n        bool IsMuted { get; set; }\r\n        int Volume { get; set; }\r\n        Color Background { get; }\r\n        ObservableCollection<IAppItemViewModel> ChildApps { get; }\r\n        string DisplayName { get; }\r\n        string ExeName { get; }\r\n        string AppId { get; }\r\n        char IconText { get; }\r\n        bool IsExpanded { get; }\r\n        bool IsMovable { get; }\r\n        float PeakValue1 { get; }\r\n        float PeakValue2 { get; }\r\n        string PersistedOutputDevice { get; }\r\n        int ProcessId { get; }\r\n        bool DoesGroupWith(IAppItemViewModel app);\r\n        void MoveToDevice(string id, bool hide);\r\n        void UpdatePeakValueForeground();\r\n        void UpdatePeakValueBackground();\r\n        IDeviceViewModel Parent { get; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/IDeviceViewModel.cs",
    "content": "﻿namespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface IDeviceViewModel\r\n    {\r\n        string Id { get; }\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/IFlyoutViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface IFlyoutViewModel\r\n    {\r\n        FlyoutViewState State { get; }\r\n        bool IsExpandingOrCollapsing { get; }\r\n\r\n        event EventHandler<object> StateChanged;\r\n        event EventHandler<object> WindowSizeInvalidated;\r\n\r\n        void ChangeState(FlyoutViewState state);\r\n        void UpdateWindowPos(double top, double left, double height, double width);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/IFocusedViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface IFocusedViewModel\r\n    {\r\n        event Action RequestClose;\r\n        string DisplayName { get; }\r\n        ObservableCollection<ToolbarItemViewModel> Toolbar { get; }\r\n        void Closing();\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/IPopupHostViewModel.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface IPopupHostViewModel\r\n    {\r\n        void OpenPopup(object vm, FrameworkElement container);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/ISettingsViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public interface ISettingsViewModel\r\n    {\r\n        void ShowDialog(string title, string description, string btn1, string btn2, Action btn1Clicked, Action btn2Clicked);\r\n        void CompleteNavigation(NavigationCookie cookie);\r\n    }\r\n}"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/ModalDialogViewModel.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class ModalDialogViewModel : BindableBase\r\n    {\r\n        private IFocusedViewModel _focused;\r\n        public IFocusedViewModel Focused\r\n        {\r\n            get => _focused;\r\n            set\r\n            {\r\n                if (_focused != value)\r\n                {\r\n                    if (_focused != null)\r\n                    {\r\n                        _focused.Closing();\r\n                    }\r\n\r\n                    _focused = value;\r\n                    RaisePropertyChanged(nameof(Focused));\r\n                }\r\n            }\r\n        }\r\n\r\n        private FrameworkElement _source;\r\n        public FrameworkElement Source\r\n        {\r\n            get => _source;\r\n            set\r\n            {\r\n                if (_source != value)\r\n                {\r\n                    _source = value;\r\n                    RaisePropertyChanged(nameof(Source));\r\n                }\r\n            }\r\n        }\r\n\r\n        private bool _isVisible;\r\n        public bool IsVisible\r\n        {\r\n            get => _isVisible;\r\n            set\r\n            {\r\n                if (_isVisible != value)\r\n                {\r\n                    _isVisible = value;\r\n                    RaisePropertyChanged(nameof(IsVisible));\r\n\r\n                    if (!_isVisible)\r\n                    {\r\n                        Focused = null;\r\n                        Source = null;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsAppItemViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class SettingsAppItemViewModel : BindableBase, IAppItemViewModel\r\n    {\r\n        public string Id { get; set; }\r\n        public bool IsDesktopApp { get; set; }\r\n\r\n        bool _isMuted;\r\n        public bool IsMuted\r\n        {\r\n            get => _isMuted;\r\n            set\r\n            {\r\n                if (_isMuted != value)\r\n                {\r\n                    _isMuted = value;\r\n                    RaisePropertyChanged(nameof(IsMuted));\r\n                }\r\n            }\r\n        }\r\n\r\n        int _volume;\r\n        public int Volume\r\n        {\r\n            get => _volume;\r\n            set\r\n            {\r\n                if (_volume != value)\r\n                {\r\n                    _volume = value;\r\n                    RaisePropertyChanged(nameof(Volume));\r\n                }\r\n            }\r\n        }\r\n\r\n        public Color Background { get; set; }\r\n        public ObservableCollection<IAppItemViewModel> ChildApps => null;\r\n        public string DisplayName { get; set; }\r\n        public string ExeName { get; set; }\r\n        public string AppId { get; set; }\r\n        public char IconText { get; set; }\r\n        public string IconPath { get; set; }\r\n        public bool IsExpanded => false;\r\n        public bool IsMovable => false;\r\n        public float PeakValue1 => 0;\r\n        public float PeakValue2 => 0;\r\n        public string PersistedOutputDevice => throw new NotImplementedException();\r\n        public int ProcessId => throw new NotImplementedException();\r\n        public IDeviceViewModel Parent => throw new NotImplementedException();\r\n\r\n        public ICommand Remove { get; set; }\r\n\r\n        public SettingsAppItemViewModel(IAudioDeviceSession session)\r\n        {\r\n            AppId = session.AppId;\r\n            DisplayName = session.DisplayName;\r\n            IsDesktopApp = session.IsDesktopApp;\r\n            IconPath = session.IconPath;\r\n            Id = session.AppId;\r\n        }\r\n\r\n        public SettingsAppItemViewModel()\r\n        {\r\n        }\r\n\r\n        public bool DoesGroupWith(IAppItemViewModel app)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hide)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void OpenPopup(FrameworkElement uIElement)\r\n        {\r\n\r\n        }\r\n\r\n        public void UpdatePeakValueBackground()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n\r\n        public void UpdatePeakValueForeground()\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsCategoryViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class SettingsCategoryViewModel : BindableBase\r\n    {\r\n        protected ISettingsViewModel _parent;\r\n        SettingsPageViewModel _selected;\r\n\r\n        public string Id { get; protected set; }\r\n        public bool IsAd { get; protected set; }\r\n\r\n        public SettingsPageViewModel Selected\r\n        {\r\n            get => _selected;\r\n            set\r\n            {\r\n                if (_selected != value)\r\n                {\r\n                    if (_selected != null)\r\n                    {\r\n                        if (!_selected.NavigatingFrom(new NavigationCookie(() => SelectImpl(value))))\r\n                        {\r\n                            RaisePropertyChanged(nameof(Selected));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    SelectImpl(value);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void SelectImpl(SettingsPageViewModel page)\r\n        {\r\n            if (_selected != null)\r\n            {\r\n                _selected.IsSelected = false;\r\n            }\r\n\r\n            _selected = page;\r\n            RaisePropertyChanged(nameof(Selected));\r\n\r\n            if (_selected != null)\r\n            {\r\n                _selected.IsSelected = true;\r\n                _selected.NavigatedTo();\r\n            }\r\n        }\r\n\r\n        public string Title { get; protected set; }\r\n        public string Glyph { get; protected set; }\r\n        public string Description { get; protected set; }\r\n        public ToolbarItemViewModel[] Toolbar { get; protected set; }\r\n        public ObservableCollection<SettingsPageViewModel> Pages { get; protected set; }\r\n\r\n        public SettingsCategoryViewModel(string title, string glyph, string description, string id, IEnumerable<SettingsPageViewModel> pages)\r\n        {\r\n            Title = title;\r\n            Glyph = glyph;\r\n            Description = description;\r\n            Id = id;\r\n            Pages = new ObservableCollection<SettingsPageViewModel>(pages);\r\n        }\r\n\r\n        public void NavigatedTo(ISettingsViewModel settingsViewModel)\r\n        {\r\n            _parent = settingsViewModel;\r\n        }\r\n\r\n        public bool NavigatingFrom(NavigationCookie cookie)\r\n        {\r\n            if (_selected != null)\r\n            {\r\n                return _selected.NavigatingFrom(cookie);\r\n            }\r\n            return true;\r\n        }\r\n\r\n        public void ShowDialog(string title, string description, string btn1, Action btn1Clicked, string btn2, Action btn2Clicked)\r\n        {\r\n            _parent.ShowDialog(title, description, btn1, btn2, btn1Clicked, btn2Clicked);\r\n        }\r\n\r\n        public override string ToString() => $\"{Title}\\n{Description}\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsDialogViewModel.cs",
    "content": "﻿using System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class SettingsDialogViewModel\r\n    {\r\n        public string Title { get; set; }\r\n        public string Description { get; set; }\r\n        public string Button1Text { get; set; }\r\n        public string Button2Text { get; set; }\r\n        public ICommand Button1Command { get; set; }\r\n        public ICommand Button2Command { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsPageHeaderViewModel.cs",
    "content": "﻿namespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class SettingsPageHeaderViewModel : BindableBase\r\n    {\r\n        public string Title => _settingsPageViewModel.Title;\r\n\r\n        private SettingsPageViewModel _settingsPageViewModel;\r\n\r\n        public SettingsPageHeaderViewModel(SettingsPageViewModel settingsPageViewModel)\r\n        {\r\n            _settingsPageViewModel = settingsPageViewModel;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsPageViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\n\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    // Intended to be used as a base class for every type of settings page\r\n    public class SettingsPageViewModel : BindableBase\r\n    {\r\n        public static readonly string DefaultManagementGroupName = Properties.Resources.DefaultManagementGroupName;\r\n\r\n        public string GroupName { get; }\r\n        public string NavigationId { get; }\r\n        public string Glyph { get; protected set; }\r\n\r\n        private string _title;\r\n        public string Title\r\n        {\r\n            get => _title;\r\n            set\r\n            {\r\n                if (_title != value)\r\n                {\r\n                    _title = value;\r\n                    RaisePropertyChanged(nameof(Title));\r\n                }\r\n            }\r\n        }\r\n\r\n        private bool _isSelected;\r\n        public bool IsSelected\r\n        {\r\n            get => _isSelected;\r\n            set\r\n            {\r\n                if (_isSelected != value)\r\n                {\r\n                    _isSelected = value;\r\n                    RaisePropertyChanged(nameof(IsSelected));\r\n                }\r\n            }\r\n        }\r\n\r\n        public SettingsPageHeaderViewModel Header { get; protected set; }\r\n\r\n        public virtual bool NavigatingFrom(NavigationCookie cookie)\r\n        {\r\n            return true;\r\n        }\r\n\r\n        public SettingsPageViewModel(string groupName)\r\n        {\r\n            GroupName = groupName;\r\n            Header = new SettingsPageHeaderViewModel(this);\r\n        }\r\n\r\n        public void NavigatedTo()\r\n        {\r\n\r\n        }\r\n\r\n        public override string ToString() => Title;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsSearchItemViewModel.cs",
    "content": "﻿using System;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class SettingsSearchItemViewModel\r\n    {\r\n        public string DisplayName { get; set; }\r\n        public string Glyph { get; set; }\r\n        public Action Invoke { get; set; }\r\n        public string SearchText { get; set; }\r\n\r\n        // This is kind of a hack, having the item report as the search text\r\n        // enables a ComboBoxItem to represent the item but also show in the \r\n        // TextBox as the text search query entered by the user.\r\n        public override string ToString() => SearchText;\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/SettingsViewModel.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class SettingsViewModel : BindableBase, ISettingsViewModel\r\n    {\r\n        public string Title { get; private set; }\r\n        public ICommand GoHome { get; }\r\n        public BackstackViewModel Backstack { get; } = new BackstackViewModel();\r\n        public ObservableCollection<SettingsCategoryViewModel> Categories { get; private set; }\r\n\r\n        private SettingsDialogViewModel _dialog;\r\n        public SettingsDialogViewModel Dialog\r\n        {\r\n            get => _dialog;\r\n            set\r\n            {\r\n                if (_dialog != value)\r\n                {\r\n                    _dialog = value;\r\n                    RaisePropertyChanged(nameof(Dialog));\r\n                }\r\n            }\r\n        }\r\n\r\n        public void OnInvoked(object sender, SettingsCategoryViewModel toSelect)\r\n        {\r\n            Selected = toSelect;\r\n        }\r\n\r\n        SettingsCategoryViewModel _selected;\r\n        public SettingsCategoryViewModel Selected\r\n        {\r\n            get => _selected;\r\n            set\r\n            {\r\n                if (_selected != value)\r\n                {\r\n                    if (value != null && value is AdvertisedCategorySettingsViewModel)\r\n                    {\r\n                        ((AdvertisedCategorySettingsViewModel)value).Activate();\r\n                        RaisePropertyChanged(nameof(Selected));\r\n                        return;\r\n                    }\r\n\r\n                    if (_selected != null)\r\n                    {\r\n                        if (!_selected.NavigatingFrom(new NavigationCookie(() => SelectImpl(value))))\r\n                        {\r\n                            RaisePropertyChanged(nameof(Selected));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    SelectImpl(value);\r\n                }\r\n            }\r\n        }\r\n\r\n        private WindowViewState _state;\r\n\r\n        public SettingsViewModel(string title, IEnumerable<SettingsCategoryViewModel> categories)\r\n        {\r\n            Title = title;\r\n            Categories = new ObservableCollection<SettingsCategoryViewModel>(categories);\r\n            GoHome = new RelayCommand(() => Selected = null);\r\n        }\r\n\r\n        public void InvokeSearchResult(SettingsCategoryViewModel cat, SettingsPageViewModel page)\r\n        {\r\n            if (Selected != null && !Selected.NavigatingFrom(new NavigationCookie(() =>\r\n                {\r\n                    Selected = cat;\r\n                    Selected.Selected = page;\r\n                })))\r\n            {\r\n                return;\r\n            }\r\n\r\n            Selected = cat;\r\n            Selected.Selected = page;\r\n        }\r\n\r\n        private void SelectImpl(SettingsCategoryViewModel categoryToSelect)\r\n        {\r\n            if (!Backstack.IsDisablingUpdates)\r\n            {\r\n                var oldSelected = _selected;\r\n                var oldPage = _selected == null ? null : _selected.Selected;\r\n                Backstack.Add(() =>\r\n                {\r\n                    Backstack.IsDisablingUpdates = true;\r\n                    Selected = oldSelected;\r\n                    if (Selected != null)\r\n                    {\r\n                        Selected.Selected = oldPage;\r\n                    }\r\n                    Backstack.IsDisablingUpdates = false;\r\n                });\r\n            }\r\n\r\n            _selected = categoryToSelect;\r\n            if (_selected != null && _selected.Pages.Count > 0)\r\n            {\r\n                _selected.Selected = _selected.Pages[0];\r\n            }\r\n\r\n            RaisePropertyChanged(nameof(Selected));\r\n\r\n            if (_selected != null)\r\n            {\r\n                _selected.NavigatedTo(this);\r\n            }\r\n        }\r\n\r\n        public void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)\r\n        {\r\n            switch (_state)\r\n            {\r\n                case WindowViewState.Open:\r\n                    // Reject the close if the client page requests.\r\n                    if (Selected != null && !Selected.NavigatingFrom(new NavigationCookie(() => Window.GetWindow((DependencyObject)sender)?.Close())))\r\n                    {\r\n                        return;\r\n                    }\r\n\r\n                    _state = WindowViewState.Closing;\r\n                    e.Cancel = true;\r\n                    WindowAnimationLibrary.BeginWindowExitAnimation((System.Windows.Window)sender, () =>\r\n                    {\r\n                        _state = WindowViewState.CloseReady;\r\n                        Window.GetWindow((DependencyObject)sender)?.Close();\r\n                    });\r\n                    break;\r\n                case WindowViewState.Closing:\r\n                    // Ignore any requests while playing the close animation.\r\n                    e.Cancel = true;\r\n                    break;\r\n                case WindowViewState.CloseReady:\r\n                    // Accept the close.\r\n                    break;\r\n            }\r\n        }\r\n\r\n        public void ShowDialog(string title, string description, string btn1, string btn2, Action btn1Clicked, Action btn2Clicked)\r\n        {\r\n            Dialog = new SettingsDialogViewModel\r\n            {\r\n                Title = title,\r\n                Description = description,\r\n                Button1Text = btn1,\r\n                Button2Text = btn2,\r\n                Button1Command = new RelayCommand(() =>\r\n                {\r\n                    Dialog = null;\r\n                    btn1Clicked();\r\n                }),\r\n                Button2Command = new RelayCommand(() =>\r\n                {\r\n                    Dialog = null;\r\n                    btn2Clicked();\r\n                })\r\n            };\r\n        }\r\n\r\n        public void CompleteNavigation(NavigationCookie cookie)\r\n        {\r\n            cookie.Execute();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/TemporaryAppItemViewModel.cs",
    "content": "﻿using EarTrumpet.DataModel;\r\nusing EarTrumpet.DataModel.Audio;\r\nusing EarTrumpet.DataModel.WindowsAudio;\r\nusing EarTrumpet.Extensions;\r\nusing System;\r\nusing System.Collections.ObjectModel;\r\nusing System.ComponentModel;\r\nusing System.Linq;\r\nusing System.Windows.Media;\r\nusing System.Windows.Threading;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    // This ViewModel is used in redirection scenarios. When we move a State=Inactive session to a device,\r\n    // this serves as the visualziation and data container for that app until a real session is created.\r\n    public class TemporaryAppItemViewModel : BindableBase, IAppItemViewModel\r\n    {\r\n        public event EventHandler Expired;\r\n\r\n        public string Id { get; }\r\n        public bool IsMuted\r\n        {\r\n            get => ChildApps != null ? ChildApps[0].IsMuted : _isMuted;\r\n            set\r\n            {\r\n                if (ChildApps != null)\r\n                {\r\n                    ChildApps[0].IsMuted = value;\r\n                }\r\n                else\r\n                {\r\n                    _isMuted = value;\r\n                    RaisePropertyChanged(nameof(IsMuted));\r\n                }\r\n            }\r\n        }\r\n        public int Volume\r\n        {\r\n            get => ChildApps != null ? ChildApps[0].Volume : _volume;\r\n            set\r\n            {\r\n                if (ChildApps != null)\r\n                {\r\n                    ChildApps[0].Volume = value;\r\n                }\r\n                else\r\n                {\r\n                    _volume = value;\r\n                    RaisePropertyChanged(nameof(Volume));\r\n                }\r\n            }\r\n        }\r\n        public Color Background { get; }\r\n        public ObservableCollection<IAppItemViewModel> ChildApps { get; }\r\n        public string DisplayName { get; }\r\n        public string ExeName { get; }\r\n        public string AppId { get; }\r\n        public char IconText { get; }\r\n        public string IconPath { get; }\r\n        public bool IsExpanded { get; }\r\n        public bool IsDesktopApp { get; }\r\n        public bool IsMovable { get; }\r\n        public float PeakValue1 { get; }\r\n        public float PeakValue2 { get; }\r\n        public string PersistedOutputDevice => ((IAudioDeviceManagerWindowsAudio)_deviceManager).GetDefaultEndPoint(ProcessId);\r\n        public int ProcessId { get; }\r\n        public IDeviceViewModel Parent { get; }\r\n\r\n        private readonly IAudioDeviceManager _deviceManager;\r\n        private readonly WeakReference<DeviceCollectionViewModel> _parent;\r\n        private readonly Dispatcher _currentDispatcher = Dispatcher.CurrentDispatcher;\r\n        private int[] _processIds;\r\n        private int _volume;\r\n        private bool _isMuted;\r\n\r\n        internal TemporaryAppItemViewModel(DeviceCollectionViewModel parent, IAudioDeviceManager deviceManager, IAppItemViewModel app, bool isChild = false)\r\n        {\r\n            _parent = new WeakReference<DeviceCollectionViewModel>(parent);\r\n            if (!isChild)\r\n            {\r\n                ChildApps = new ObservableCollection<IAppItemViewModel>();\r\n                foreach (var childApp in app.ChildApps)\r\n                {\r\n                    var vm = new TemporaryAppItemViewModel(parent, deviceManager, childApp, true);\r\n                    vm.PropertyChanged += ChildApp_PropertyChanged;\r\n                    ChildApps.Add(vm);\r\n                }\r\n            }\r\n\r\n            _deviceManager = deviceManager;\r\n            Id = app.Id;\r\n            _isMuted = app.IsMuted;\r\n            _volume = app.Volume;\r\n            Background = app.Background;\r\n            DisplayName = app.DisplayName;\r\n            ExeName = app.ExeName;\r\n            AppId = app.AppId;\r\n            IconText = app.IconText;\r\n            IconPath = app.IconPath;\r\n            IsDesktopApp = app.IsDesktopApp;\r\n            IsMovable = app.IsMovable;\r\n            IsExpanded = isChild;\r\n            PeakValue1 = 0;\r\n            PeakValue2 = 0;\r\n            ProcessId = app.ProcessId;\r\n            Parent = app.Parent;\r\n\r\n            if (ChildApps != null)\r\n            {\r\n                _processIds = ChildApps.Select(a => a.ProcessId).ToSet().ToArray();\r\n            }\r\n            else\r\n            {\r\n                _processIds = new int[] { ProcessId };\r\n            }\r\n\r\n            foreach (var pid in _processIds)\r\n            {\r\n                ProcessWatcherService.WatchProcess(pid, (pidQuit) =>\r\n                {\r\n                    _currentDispatcher.BeginInvoke((Action)(() =>\r\n                    {\r\n                        var newPids = _processIds.ToList();\r\n\r\n                        if (newPids.Contains(pidQuit))\r\n                        {\r\n                            newPids.Remove(pidQuit);\r\n                        }\r\n                        _processIds = newPids.ToArray();\r\n\r\n                        if (_processIds.Length == 0)\r\n                        {\r\n                            Expire();\r\n                        }\r\n                    }));\r\n                });\r\n            }\r\n\r\n#if VSDEBUG\r\n            Background = Colors.Red;\r\n#endif\r\n        }\r\n\r\n        private void ChildApp_PropertyChanged(object sender, PropertyChangedEventArgs e)\r\n        {\r\n            RaisePropertyChanged(e.PropertyName);\r\n        }\r\n\r\n        public bool DoesGroupWith(IAppItemViewModel app)\r\n        {\r\n            return ExeName == app.ExeName;\r\n        }\r\n\r\n        public void MoveToDevice(string id, bool hide)\r\n        {\r\n            // Update the output for all processes represented by this app.\r\n            foreach (var pid in _processIds)\r\n            {\r\n                ((IAudioDeviceManagerWindowsAudio)_deviceManager).SetDefaultEndPoint(id, pid);\r\n            }\r\n\r\n            if (hide)\r\n            {\r\n                Expire();\r\n            }\r\n        }\r\n\r\n        private void Expire()\r\n        {\r\n            Expired?.Invoke(this, null);\r\n        }\r\n\r\n        public void UpdatePeakValueBackground() { }\r\n        public void UpdatePeakValueForeground() { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/ToolbarItemViewModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    public class ToolbarItemViewModel\r\n    {\r\n        public string DisplayName { get; set; }\r\n        public string Glyph { get; set; }\r\n        public string Id { get; set; }\r\n        public int GlyphFontSize { get; set; }\r\n        public ObservableCollection<ContextMenuItem> Menu { get; set; }\r\n        public ICommand Command { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/ViewModels/WelcomeViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing System.Windows;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.ViewModels\r\n{\r\n    class WelcomeViewModel\r\n    {\r\n        public string VisibleTitle => \"\"; // We have a header instead\r\n        public string Title { get; } // Used for the window title.\r\n        public ICommand LearnMore { get; }\r\n        public ICommand OpenPrivacy { get; }\r\n        public ICommand DisplaySettingsChanged { get; }\r\n\r\n        public bool IsTelemetryEnabled\r\n        {\r\n            get => _settings.IsTelemetryEnabled;\r\n            set => _settings.IsTelemetryEnabled = value;\r\n        }\r\n\r\n        private readonly AppSettings _settings;\r\n        private WindowViewState _state;\r\n\r\n        public WelcomeViewModel(AppSettings settings)\r\n        {\r\n            _settings = settings;\r\n            Title = Properties.Resources.WelcomeDialogHeaderText;\r\n            LearnMore = new RelayCommand(() => ProcessHelper.StartNoThrow(\"https://github.com/File-New-Project/EarTrumpet\"));\r\n            OpenPrivacy = new RelayCommand(() => ProcessHelper.StartNoThrow(\"https://github.com/File-New-Project/EarTrumpet/blob/master/PRIVACY.md\"));\r\n        }\r\n\r\n        public void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)\r\n        {\r\n            switch (_state)\r\n            {\r\n                case WindowViewState.Open:\r\n                    _state = WindowViewState.Closing;\r\n                    e.Cancel = true;\r\n\r\n                    var window = (Window)sender;\r\n                    WindowAnimationLibrary.BeginWindowExitAnimation(window, () =>\r\n                    {\r\n                        _state = WindowViewState.CloseReady;\r\n                        window.Close();\r\n                    });\r\n                    break;\r\n                case WindowViewState.Closing:\r\n                    // Ignore any requests while playing the close animation.\r\n                    e.Cancel = true;\r\n                    break;\r\n                case WindowViewState.CloseReady:\r\n                    // Accept the close.\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/AppItemView.xaml",
    "content": "﻿<UserControl x:Class=\"EarTrumpet.UI.Views.AppItemView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n             xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n             Height=\"{DynamicResource Mutable_AppItemCellHeight}\"\r\n             IsTabStop=\"False\">\r\n    <Grid Name=\"GridRoot\" Background=\"Transparent\">\r\n        <Grid.ColumnDefinitions>\r\n            <ColumnDefinition Width=\"{DynamicResource Mutable_IconCellWidth}\" />\r\n            <ColumnDefinition Width=\"*\" />\r\n            <ColumnDefinition Width=\"{DynamicResource Mutable_VolumeCellWidth}\" />\r\n        </Grid.ColumnDefinitions>\r\n        <Grid Grid.Column=\"0\" Margin=\"{StaticResource DeviceOrAppIconMargin}\">\r\n            <Border Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    HorizontalAlignment=\"Center\">\r\n                <Border.Style>\r\n                    <Style TargetType=\"Border\">\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding IsMuted}\" Value=\"true\">\r\n                                <Setter Property=\"Opacity\" Value=\"{StaticResource MutedOpacity}\" />\r\n                            </DataTrigger>\r\n                            <DataTrigger Binding=\"{Binding Source, ElementName=AppIcon}\" Value=\"{x:Null}\">\r\n                                <Setter Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Border.Style>\r\n                <Grid>\r\n                    <ctl:ImageEx x:Name=\"AppIcon\"\r\n                                 Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                 Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                 SourceEx=\"{Binding}\"\r\n                                 Stretch=\"Fill\" />\r\n                    <Border>\r\n                        <Border.Style>\r\n                            <Style TargetType=\"{x:Type Border}\">\r\n                                <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding Source, ElementName=AppIcon}\" Value=\"{x:Null}\">\r\n                                        <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </Border.Style>\r\n\r\n                        <TextBlock Margin=\"0,-1,0,0\"\r\n                                   HorizontalAlignment=\"Center\"\r\n                                   VerticalAlignment=\"Center\"\r\n                                   Theme:Brush.Foreground=\"Text\"\r\n                                   FontSize=\"{DynamicResource Mutable_AppIconTextFontSize}\"\r\n                                   FontWeight=\"SemiBold\"\r\n                                   Text=\"{Binding IconText}\"\r\n                                   TextAlignment=\"Center\" />\r\n                    </Border>\r\n                </Grid>\r\n            </Border>\r\n            <Button Name=\"MuteButton\"\r\n                    Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                    Command=\"{Binding ToggleMute}\"\r\n                    IsTabStop=\"False\"\r\n                    ToolTip=\"{Binding DisplayName}\">\r\n                <Button.Style>\r\n                    <Style BasedOn=\"{StaticResource MuteButton}\" TargetType=\"Button\">\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding IsMuted}\" Value=\"true\">\r\n                                <Setter Property=\"Opacity\" Value=\"1\" />\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Button.Style>\r\n                <Button.Content>\r\n                    <TextBlock Theme:Brush.Foreground=\"{Binding (Theme:Brush.Foreground), RelativeSource={RelativeSource AncestorType=Button}}\"\r\n                               FontSize=\"{DynamicResource Mutable_DeviceVolumeTextFontSize}\"\r\n                               Opacity=\"0.8\"\r\n                               Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                               Text=\"&#xE74F;\" />\r\n                </Button.Content>\r\n            </Button>\r\n        </Grid>\r\n        <ctl:VolumeSlider Grid.Column=\"1\"\r\n                          PeakValue1=\"{Binding PeakValue1}\"\r\n                          PeakValue2=\"{Binding PeakValue2}\"\r\n                          Value=\"{Binding Volume, Mode=TwoWay}\">\r\n            <ctl:VolumeSlider.Style>\r\n                <Style BasedOn=\"{StaticResource {x:Type Slider}}\" TargetType=\"Slider\">\r\n                    <Style.Triggers>\r\n                        <DataTrigger Binding=\"{Binding IsMuted}\" Value=\"True\">\r\n                            <Setter Property=\"Opacity\" Value=\"{StaticResource MutedOpacity}\" />\r\n                        </DataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </ctl:VolumeSlider.Style>\r\n        </ctl:VolumeSlider>\r\n        <TextBlock Grid.Column=\"2\" Text=\"{Binding Volume, Mode=OneWay}\">\r\n            <TextBlock.Style>\r\n                <Style BasedOn=\"{StaticResource AppVolumeTextStyle}\" TargetType=\"TextBlock\">\r\n                    <Style.Triggers>\r\n                        <DataTrigger Binding=\"{Binding IsMuted}\" Value=\"True\">\r\n                            <Setter Property=\"Opacity\" Value=\"{StaticResource MutedOpacity}\" />\r\n                        </DataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </TextBlock.Style>\r\n        </TextBlock>\r\n    </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/AppItemView.xaml.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class AppItemView : UserControl\r\n    {\r\n        private IAppItemViewModel App => (IAppItemViewModel)DataContext;\r\n\r\n        public AppItemView()\r\n        {\r\n            InitializeComponent();\r\n\r\n            PreviewMouseRightButtonUp += (_, __) => OpenPopup();\r\n            Loaded += (_, __) =>\r\n            {\r\n                var container = this.FindVisualParent<ListViewItem>();\r\n                if (container != null)\r\n                {\r\n                    container.PreviewKeyDown += OnPreviewKeyDown;\r\n                }\r\n            };\r\n        }\r\n\r\n        private void OnPreviewKeyDown(object sender, KeyEventArgs e)\r\n        {\r\n            switch (e.Key)\r\n            {\r\n                case Key.M:\r\n                case Key.OemPeriod:\r\n                    App.IsMuted = !App.IsMuted;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Right:\r\n                case Key.OemPlus:\r\n                    App.Volume++;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Left:\r\n                case Key.OemMinus:\r\n                    App.Volume--;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Space:\r\n                    OpenPopup();\r\n                    e.Handled = true;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void OpenPopup()\r\n        {\r\n            var viewModel = Window.GetWindow(this).DataContext as IPopupHostViewModel;\r\n            if (viewModel != null && App != null && !App.IsExpanded)\r\n            {\r\n                viewModel.OpenPopup(App, this);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/DeviceView.xaml",
    "content": "﻿<UserControl x:Class=\"EarTrumpet.UI.Views.DeviceView\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n             xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n             xmlns:local=\"clr-namespace:EarTrumpet\"\r\n             xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n             xmlns:views=\"clr-namespace:EarTrumpet.UI.Views\"\r\n             IsTabStop=\"False\">\r\n    <Grid Name=\"GridRoot\">\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"Auto\" />\r\n            <RowDefinition Height=\"*\" />\r\n        </Grid.RowDefinitions>\r\n\r\n        <ListViewItem Name=\"DeviceListItem\"\r\n                      AutomationProperties.Name=\"{Binding Device.AccessibleName}\"\r\n                      Tag=\"{x:Static views:DeviceView.DeviceListItemKey}\">\r\n            <Border Theme:Brush.Background=\":=Transparent, Flyout:FlyoutBackground, Flyout:HighContrast=Window\" Theme:Brush.BorderBrush=\"Theme=Transparent, HighContrast=Text\">\r\n                <Border.Style>\r\n                    <Style TargetType=\"Border\">\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                                <Setter Property=\"BorderThickness\" Value=\"0,0,0,1\" />\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Border.Style>\r\n                <Grid Theme:Brush.Background=\":=Transparent, Flyout:Theme=SystemAccent/0.3/0.5, :HighContrast=Transparent, Flyout:HighContrast=Transparent\">\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n\r\n                    <Border Height=\"{DynamicResource Mutable_DeviceTitleCellHeight}\" Margin=\"{StaticResource WindowMargin}\">\r\n                        <TextBlock Text=\"{Binding Device.DisplayName}\" TextTrimming=\"CharacterEllipsis\">\r\n                            <TextBlock.Style>\r\n                                <Style BasedOn=\"{StaticResource DeviceTitleTextStyle}\" TargetType=\"TextBlock\">\r\n                                    <Style.Triggers>\r\n                                        <DataTrigger Binding=\"{Binding IsDisplayNameVisible}\" Value=\"False\">\r\n                                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                        </DataTrigger>\r\n                                    </Style.Triggers>\r\n                                </Style>\r\n                            </TextBlock.Style>\r\n                        </TextBlock>\r\n                    </Border>\r\n\r\n                    <Grid Grid.Row=\"1\" Height=\"{DynamicResource Mutable_DeviceItemCellHeight}\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"{DynamicResource Mutable_IconCellWidth}\" />\r\n                            <ColumnDefinition Width=\"*\" />\r\n                            <ColumnDefinition Width=\"{DynamicResource Mutable_VolumeCellWidth}\" />\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <Button Name=\"MuteButton\"\r\n                                Width=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                Height=\"{DynamicResource Mutable_AppIconSize}\"\r\n                                Margin=\"{StaticResource DeviceOrAppIconMargin}\"\r\n                                HorizontalAlignment=\"Center\"\r\n                                Background=\"Transparent\"\r\n                                Command=\"{Binding Device.ToggleMute}\"\r\n                                IsTabStop=\"False\"\r\n                                Opacity=\"1\"\r\n                                ToolTipService.ToolTip=\"{x:Static resx:Resources.ToggleMuteToolTip}\">\r\n                            <Button.Style>\r\n                                <Style BasedOn=\"{StaticResource MuteButton}\" TargetType=\"{x:Type Button}\" />\r\n                            </Button.Style>\r\n                            <Button.Content>\r\n                                <Grid>\r\n                                    <TextBlock Theme:Brush.Foreground=\"{Binding (Theme:Brush.Foreground), RelativeSource={RelativeSource AncestorType=Button}}\"\r\n                                               FontSize=\"{DynamicResource Mutable_DeviceVolumeTextFontSize}\"\r\n                                               Opacity=\"0.4\">\r\n                                        <TextBlock.Style>\r\n                                            <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"{x:Type TextBlock}\">\r\n                                                <Setter Property=\"Text\" Value=\"&#xE995;\" />\r\n                                                <Style.Triggers>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Mute\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE74F;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Microphone\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE720;\" />\r\n                                                    </DataTrigger>\r\n                                                </Style.Triggers>\r\n                                            </Style>\r\n                                        </TextBlock.Style>\r\n                                    </TextBlock>\r\n                                    <TextBlock Theme:Brush.Foreground=\"{Binding (Theme:Brush.Foreground), RelativeSource={RelativeSource AncestorType=Button}}\" FontSize=\"{DynamicResource Mutable_DeviceVolumeTextFontSize}\">\r\n                                        <TextBlock.Style>\r\n                                            <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"{x:Type TextBlock}\">\r\n                                                <Style.Triggers>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Mute\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE74F;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Microphone\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE720;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Bar0\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE992;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Bar1\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE993;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Bar2\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE994;\" />\r\n                                                    </DataTrigger>\r\n                                                    <DataTrigger Binding=\"{Binding Device.IconKind}\" Value=\"Bar3\">\r\n                                                        <Setter Property=\"Text\" Value=\"&#xE995;\" />\r\n                                                    </DataTrigger>\r\n                                                </Style.Triggers>\r\n                                            </Style>\r\n                                        </TextBlock.Style>\r\n                                    </TextBlock>\r\n                                </Grid>\r\n                            </Button.Content>\r\n                        </Button>\r\n\r\n                        <ctl:VolumeSlider Grid.Column=\"1\"\r\n                                          PeakValue1=\"{Binding Device.PeakValue1}\"\r\n                                          PeakValue2=\"{Binding Device.PeakValue2}\"\r\n                                          PreviewMouseUp=\"TouchSlider_MouseUp\"\r\n                                          PreviewTouchUp=\"TouchSlider_TouchUp\"\r\n                                          Style=\"{StaticResource {x:Type Slider}}\"\r\n                                          Value=\"{Binding Device.Volume, Mode=TwoWay}\" />\r\n                        <TextBlock Grid.Column=\"2\"\r\n                                   Style=\"{StaticResource DeviceVolumeTextStyle}\"\r\n                                   Text=\"{Binding Device.Volume, Mode=OneWay}\" />\r\n                    </Grid>\r\n                </Grid>\r\n            </Border>\r\n        </ListViewItem>\r\n\r\n        <Border Grid.Row=\"1\" Theme:Brush.Background=\":=Background, Flyout:FlyoutBackground\">\r\n            <Border.Style>\r\n                <Style TargetType=\"Border\">\r\n                    <Style.Triggers>\r\n                        <DataTrigger Binding=\"{Binding IsAppListVisible}\" Value=\"False\">\r\n                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                        </DataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </Border.Style>\r\n            <ListView Name=\"AppList\"\r\n                      Margin=\"{StaticResource VolumeAppListMargin}\"\r\n                      AutomationProperties.Name=\"{x:Static resx:Resources.AppsListAccessibleText}\"\r\n                      ItemsSource=\"{Binding Device.Apps, Mode=OneWay}\" />\r\n        </Border>\r\n    </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/DeviceView.xaml.cs",
    "content": "﻿using EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Documents;\r\nusing System.Windows.Input;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class DeviceView : UserControl\r\n    {\r\n        public static string DeviceListItemKey = \"DeviceListItem\";\r\n\r\n        public DeviceViewModel Device { get { return (DeviceViewModel)GetValue(DeviceProperty); } set { SetValue(DeviceProperty, value); } }\r\n        public static readonly DependencyProperty DeviceProperty =\r\n            DependencyProperty.Register(\"Device\", typeof(DeviceViewModel), typeof(DeviceView), new PropertyMetadata(new PropertyChangedCallback(DeviceChanged)));\r\n\r\n        public bool IsDisplayNameVisible { get { return (bool)GetValue(IsDisplayNameVisibleProperty); } set { SetValue(IsDisplayNameVisibleProperty, value); } }\r\n        public static readonly DependencyProperty IsDisplayNameVisibleProperty =\r\n            DependencyProperty.Register(\"IsDisplayNameVisible\", typeof(bool), typeof(DeviceView), new PropertyMetadata(true));\r\n\r\n        public bool IsAppListVisible { get { return (bool)GetValue(IsAppListVisibleProperty); } set { SetValue(IsAppListVisibleProperty, value); } }\r\n        public static readonly DependencyProperty IsAppListVisibleProperty =\r\n            DependencyProperty.Register(\"IsAppListVisible\", typeof(bool), typeof(DeviceView), new PropertyMetadata(true));\r\n\r\n        public DeviceView()\r\n        {\r\n            InitializeComponent();\r\n\r\n            DeviceListItem.PreviewKeyDown += OnPreviewKeyDown;\r\n            DeviceListItem.PreviewMouseRightButtonUp += (_, __) => OpenPopup();\r\n        }\r\n\r\n        public void FocusAndRemoveFocusVisual()\r\n        {\r\n            DeviceListItem.Focus();\r\n            RemoveFocusVisual(DeviceListItem);\r\n        }\r\n\r\n        private void RemoveFocusVisual(UIElement element)\r\n        {\r\n            var adornerLayer = AdornerLayer.GetAdornerLayer(element);\r\n            var adorners = adornerLayer.GetAdorners(element);\r\n            if (adorners != null)\r\n            {\r\n                foreach (var adorner in adorners)\r\n                {\r\n                    adornerLayer.Remove(adorner);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void OnPreviewKeyDown(object sender, KeyEventArgs e)\r\n        {\r\n            switch (e.Key)\r\n            {\r\n                case Key.M:\r\n                case Key.OemPeriod:\r\n                    Device.IsMuted = !Device.IsMuted;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Right:\r\n                case Key.OemPlus:\r\n                    Device.Volume++;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Left:\r\n                case Key.OemMinus:\r\n                    Device.Volume--;\r\n                    e.Handled = true;\r\n                    break;\r\n                case Key.Space:\r\n                    OpenPopup();\r\n                    e.Handled = true;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private static void DeviceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var self = (DeviceView)d;\r\n            self.GridRoot.DataContext = self;\r\n        }\r\n\r\n        private void TouchSlider_TouchUp(object sender, TouchEventArgs e)\r\n        {\r\n            SystemSoundsHelper.PlayBeepSound.Execute(null);\r\n        }\r\n\r\n        private void TouchSlider_MouseUp(object sender, MouseButtonEventArgs e)\r\n        {\r\n            if (e.ChangedButton == MouseButton.Left)\r\n            {\r\n                SystemSoundsHelper.PlayBeepSound.Execute(null);\r\n            }\r\n        }\r\n\r\n        private void OpenPopup()\r\n        {\r\n            var viewModel = Window.GetWindow(DeviceListItem).DataContext as IPopupHostViewModel;\r\n            if (viewModel != null)\r\n            {\r\n                viewModel.OpenPopup(Device, DeviceListItem);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/DialogWindow.xaml",
    "content": "﻿<Window x:Class=\"EarTrumpet.UI.Views.DialogWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n        xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n        xmlns:b=\"clr-namespace:EarTrumpet.UI.Behaviors\"\r\n        Name=\"WindowRoot\"\r\n        Title=\"{Binding Title}\"\r\n        Theme:AcrylicBrush.Background=\"AcrylicColor_Settings\"\r\n        Theme:Brush.Background=\"Background\"\r\n        Theme:Options.Source=\"App\"\r\n        b:FrameworkElementEx.DisplaySettingsChanged=\"{Binding DisplaySettingsChanged}\"\r\n        b:FrameworkElementEx.FlowDirection=\"Auto\"\r\n        Closing=\"{Event:Binding OnClosing}\"\r\n        ResizeMode=\"NoResize\"\r\n        SizeToContent=\"WidthAndHeight\"\r\n        Style=\"{StaticResource DialogWindowStyle}\"\r\n        TextOptions.TextFormattingMode=\"Display\"\r\n        UseLayoutRounding=\"True\"\r\n        WindowStartupLocation=\"CenterScreen\">\r\n    <Grid>\r\n        <DockPanel LastChildFill=\"True\">\r\n            <Grid DockPanel.Dock=\"Top\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"*\" />\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                </Grid.ColumnDefinitions>\r\n                <TextBlock Margin=\"14,0,0,0\"\r\n                           Text=\"{Binding VisibleTitle}\"\r\n                           TextAlignment=\"Left\" />\r\n                <Button x:Name=\"CloseButton\"\r\n                        Grid.Column=\"3\"\r\n                        Style=\"{StaticResource CloseButtonStyle}\" />\r\n            </Grid>\r\n            <Grid>\r\n                <ContentControl Content=\"{Binding}\"\r\n                                Focusable=\"False\"\r\n                                IsTabStop=\"False\" />\r\n            </Grid>\r\n        </DockPanel>\r\n    </Grid>\r\n</Window>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/DialogWindow.xaml.cs",
    "content": "﻿using System.Diagnostics;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class DialogWindow : Window\r\n    {\r\n        public DialogWindow()\r\n        {\r\n            Trace.WriteLine(\"DialogWindow .ctor\");\r\n            Closed += (_, __) => Trace.WriteLine(\"DialogWindow Closed\");\r\n\r\n            InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/FlyoutWindow.xaml",
    "content": "﻿<Window x:Class=\"EarTrumpet.UI.Views.FlyoutWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n        xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n        xmlns:b=\"clr-namespace:EarTrumpet.UI.Behaviors\"\r\n        xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n        xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n        xmlns:views=\"clr-namespace:EarTrumpet.UI.Views\"\r\n        xmlns:vm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n        Title=\"EarTrumpet\"\r\n        Width=\"{StaticResource WindowAndItemSize}\"\r\n        Theme:Brush.Foreground=\"Text\"\r\n        Theme:Options.Scope=\"Flyout\"\r\n        Theme:Options.Source=\"System\"\r\n        b:FrameworkElementEx.DisplaySettingsChanged=\"{Binding DisplaySettingsChanged}\"\r\n        b:FrameworkElementEx.FlowDirection=\"Auto\"\r\n        AllowsTransparency=\"True\"\r\n        Background=\"Transparent\"\r\n        Closing=\"{Event:Binding OnClosing}\"\r\n        Deactivated=\"{Event:Binding OnDeactivated}\"\r\n        Icon=\"{Binding Source={StaticResource EarTrumpetIconLight}}\"\r\n        PreviewKeyDown=\"{Event:Binding OnPreviewKeyDown}\"\r\n        ResizeMode=\"NoResize\"\r\n        ShowInTaskbar=\"False\"\r\n        SnapsToDevicePixels=\"True\"\r\n        TextOptions.TextFormattingMode=\"Display\"\r\n        UseLayoutRounding=\"True\"\r\n        WindowStyle=\"None\">\r\n    <Window.Resources>\r\n        <Style x:Key=\"ExpandCollapseButtonStyle\" TargetType=\"Button\">\r\n            <Setter Property=\"Background\" Value=\"Transparent\" />\r\n            <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\r\n            <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=ControlText\" />\r\n            <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"Button\">\r\n                        <Border x:Name=\"border\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                SnapsToDevicePixels=\"True\">\r\n                            <ContentPresenter RecognizesAccessKey=\"True\" />\r\n                        </Border>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n            <Style.Triggers>\r\n                <Trigger Property=\"IsMouseOver\" Value=\"true\">\r\n                    <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=#20FFFFFF, HighContrast=Highlight\" />\r\n                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                </Trigger>\r\n                <Trigger Property=\"IsPressed\" Value=\"true\">\r\n                    <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=#2FFFFFFF, HighContrast=Highlight\" />\r\n                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                </Trigger>\r\n                <MultiTrigger>\r\n                    <MultiTrigger.Conditions>\r\n                        <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                        <Condition Property=\"Theme:OS.IsWindows11\" Value=\"True\" />\r\n                    </MultiTrigger.Conditions>\r\n                    <MultiTrigger.Setters>\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=Control{Theme}SelectHighlightHover, HighContrast=Highlight\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                    </MultiTrigger.Setters>\r\n                </MultiTrigger>\r\n                <MultiTrigger>\r\n                    <MultiTrigger.Conditions>\r\n                        <Condition Property=\"IsPressed\" Value=\"True\" />\r\n                        <Condition Property=\"Theme:OS.IsWindows11\" Value=\"True\" />\r\n                    </MultiTrigger.Conditions>\r\n                    <MultiTrigger.Setters>\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=Control{Theme}SelectHighlightHover/0.20, HighContrast=Highlight\" />\r\n                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationText{Theme}Theme, HighContrast=HighlightText\" />\r\n                    </MultiTrigger.Setters>\r\n                </MultiTrigger>\r\n            </Style.Triggers>\r\n        </Style>\r\n\r\n        <Style x:Key=\"{x:Type ScrollViewer}\"\r\n               BasedOn=\"{StaticResource {x:Type ScrollViewer}}\"\r\n               TargetType=\"{x:Type ScrollViewer}\">\r\n            <Setter Property=\"CanContentScroll\" Value=\"True\" />\r\n            <Setter Property=\"PanningMode\" Value=\"VerticalOnly\" />\r\n            <Setter Property=\"Focusable\" Value=\"False\" />\r\n            <Setter Property=\"Margin\" Value=\"0\" />\r\n        </Style>\r\n        <DataTemplate DataType=\"{x:Type vm:DeviceViewModel}\">\r\n            <views:DeviceView Width=\"{StaticResource WindowAndItemSize}\"\r\n                              Device=\"{Binding}\"\r\n                              IsDisplayNameVisible=\"{Binding IsDisplayNameVisible}\" />\r\n        </DataTemplate>\r\n    </Window.Resources>\r\n    <Grid x:Name=\"LayoutRoot\">\r\n        <ScrollViewer Name=\"BaseVisual\" VerticalScrollBarVisibility=\"Auto\">\r\n            <Grid Name=\"ContentGrid\" VerticalAlignment=\"Top\">\r\n\r\n                <Border VerticalAlignment=\"Center\" Theme:Brush.Background=\"FlyoutBackground\">\r\n                    <Border.Style>\r\n                        <Style TargetType=\"Border\">\r\n                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Devices.Count}\" Value=\"0\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </Border.Style>\r\n                    <TextBlock Margin=\"{StaticResource NoItemsPaneMargin}\"\r\n                               HorizontalAlignment=\"Center\"\r\n                               FontSize=\"{StaticResource {x:Static SystemFonts.MessageFontSizeKey}}\"\r\n                               Text=\"{x:Static resx:Resources.NoDevicesPanelContent}\"\r\n                               TextWrapping=\"Wrap\" />\r\n                </Border>\r\n                <Grid>\r\n                    <Grid.Style>\r\n                        <Style TargetType=\"Grid\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Devices.Count}\" Value=\"0\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </Grid.Style>\r\n                    <ItemsControl Name=\"DevicesList\"\r\n                                  FocusVisualStyle=\"{x:Null}\"\r\n                                  IsTabStop=\"False\"\r\n                                  ItemsSource=\"{Binding Devices}\" />\r\n                    <Button Height=\"{DynamicResource Mutable_DeviceTitleCellHeight}\"\r\n                            Command=\"{Binding ExpandCollapse}\"\r\n                            IsEnabled=\"{Binding CanExpand}\">\r\n                        <Button.Style>\r\n                            <Style BasedOn=\"{StaticResource ExpandCollapseButtonStyle}\" TargetType=\"{x:Type Button}\">\r\n                                <Style.Triggers>\r\n                                    <MultiDataTrigger>\r\n                                        <MultiDataTrigger.Conditions>\r\n                                            <Condition Binding=\"{Binding CanExpand}\" Value=\"True\" />\r\n                                            <Condition Binding=\"{Binding IsExpanded}\" Value=\"True\" />\r\n                                        </MultiDataTrigger.Conditions>\r\n                                        <Setter Property=\"AutomationProperties.Name\" Value=\"{x:Static resx:Resources.CollapseAccessibleText}\" />\r\n                                    </MultiDataTrigger>\r\n                                    <MultiDataTrigger>\r\n                                        <MultiDataTrigger.Conditions>\r\n                                            <Condition Binding=\"{Binding CanExpand}\" Value=\"True\" />\r\n                                            <Condition Binding=\"{Binding IsExpanded}\" Value=\"False\" />\r\n                                        </MultiDataTrigger.Conditions>\r\n                                        <Setter Property=\"AutomationProperties.Name\" Value=\"{x:Static resx:Resources.ExpandAccessibleText}\" />\r\n                                    </MultiDataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </Button.Style>\r\n                        <Button.Content>\r\n                            <Grid>\r\n                                <TextBlock Margin=\"12,0,32,0\"\r\n                                           HorizontalAlignment=\"Left\"\r\n                                           Theme:Brush.Foreground=\"{Binding (Theme:Brush.Foreground), RelativeSource={RelativeSource AncestorType=Button}}\"\r\n                                           Style=\"{StaticResource DeviceTitleTextStyle}\"\r\n                                           Text=\"{Binding DeviceNameText}\"\r\n                                           TextTrimming=\"CharacterEllipsis\" />\r\n                                <TextBlock Margin=\"{StaticResource WindowMargin}\"\r\n                                           HorizontalAlignment=\"Right\"\r\n                                           Theme:Brush.Foreground=\"{Binding (Theme:Brush.Foreground), RelativeSource={RelativeSource AncestorType=Button}}\"\r\n                                           FontSize=\"{DynamicResource Mutable_ExpandCollapseButtonGlyphFontSize}\">\r\n                                    <TextBlock.Style>\r\n                                        <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"{x:Type TextBlock}\">\r\n                                            <Style.Triggers>\r\n                                                <MultiDataTrigger>\r\n                                                    <MultiDataTrigger.Conditions>\r\n                                                        <Condition Binding=\"{Binding CanExpand}\" Value=\"True\" />\r\n                                                        <Condition Binding=\"{Binding IsExpanded}\" Value=\"True\" />\r\n                                                    </MultiDataTrigger.Conditions>\r\n                                                    <Setter Property=\"Text\" Value=\"&#xe011;\" />\r\n                                                </MultiDataTrigger>\r\n                                                <MultiDataTrigger>\r\n                                                    <MultiDataTrigger.Conditions>\r\n                                                        <Condition Binding=\"{Binding CanExpand}\" Value=\"True\" />\r\n                                                        <Condition Binding=\"{Binding IsExpanded}\" Value=\"False\" />\r\n                                                    </MultiDataTrigger.Conditions>\r\n                                                    <Setter Property=\"Text\" Value=\"&#xe010;\" />\r\n                                                </MultiDataTrigger>\r\n                                            </Style.Triggers>\r\n                                        </Style>\r\n                                    </TextBlock.Style>\r\n                                </TextBlock>\r\n                            </Grid>\r\n                        </Button.Content>\r\n                    </Button>\r\n                </Grid>\r\n            </Grid>\r\n        </ScrollViewer>\r\n        <Border Name=\"LightDismissBorder\"\r\n                Theme:Brush.Background=\"Background\"\r\n                PreviewMouseDown=\"{Event:Binding OnLightDismissBorderPreviewMouseDown}\">\r\n            <Border.Style>\r\n                <Style TargetType=\"{x:Type Border}\">\r\n                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                    <Style.Triggers>\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Dialog.IsVisible}\" Value=\"True\" />\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"True\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"EnterLightDismiss_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Visible}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"ExitLightDismiss_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"1\"\r\n                                                         To=\"0\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00.15\" Value=\"{x:Static Visibility.Collapsed}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Dialog.IsVisible}\" Value=\"True\" />\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"False\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"EnterLightDismiss_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Visible}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"ExitLightDismiss_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Collapsed}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </Border.Style>\r\n            <Border Margin=\"0,0,0,14\">\r\n                <Border.Effect>\r\n                    <BlurEffect KernelType=\"Gaussian\"\r\n                                Radius=\"{StaticResource WindowBlurRadius}\"\r\n                                RenderingBias=\"Performance\" />\r\n                </Border.Effect>\r\n                <Border.Background>\r\n\r\n                    <VisualBrush AlignmentX=\"Left\"\r\n                                 AlignmentY=\"Top\"\r\n                                 Stretch=\"UniformToFill\"\r\n                                 Visual=\"{Binding ElementName=BaseVisual}\" />\r\n                </Border.Background>\r\n            </Border>\r\n        </Border>\r\n        <ctl:AppPopup IsOpen=\"{Binding Dialog.IsVisible, Mode=TwoWay}\"\r\n                      PlacementTarget=\"{Binding Dialog.Source}\"\r\n                      Style=\"{StaticResource AppPopup}\">\r\n            <ContentControl Content=\"{Binding Dialog.Focused}\" />\r\n        </ctl:AppPopup>\r\n    </Grid>\r\n</Window>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/FlyoutWindow.xaml.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing EarTrumpet.UI.Helpers;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System;\r\nusing System.Windows;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class FlyoutWindow\r\n    {\r\n        private readonly IFlyoutViewModel _viewModel;\r\n\r\n        public FlyoutWindow(IFlyoutViewModel viewModel)\r\n        {\r\n            _viewModel = viewModel;\r\n            DataContext = _viewModel;\r\n\r\n            InitializeComponent();\r\n\r\n            _viewModel.StateChanged += OnStateChanged;\r\n            _viewModel.WindowSizeInvalidated += OnWindowsSizeInvalidated;\r\n            SourceInitialized += (_, __) =>\r\n            {\r\n                this.Cloak();\r\n                this.EnableRoundedCornersIfApplicable();\r\n            };\r\n            Themes.Manager.Current.ThemeChanged += () => EnableAcrylicIfApplicable(WindowsTaskbar.Current);\r\n        }\r\n\r\n        public void Initialize()\r\n        {\r\n            Show();\r\n            Hide();\r\n            // Prevent showing up in Alt+Tab.\r\n            this.ApplyExtendedWindowStyle(User32.WS_EX_TOOLWINDOW);\r\n\r\n            _viewModel.ChangeState(FlyoutViewState.Hidden);\r\n        }\r\n\r\n        private void OnStateChanged(object sender, object e)\r\n        {\r\n            switch (_viewModel.State)\r\n            {\r\n                case FlyoutViewState.Opening:\r\n                    var taskbar = WindowsTaskbar.Current;\r\n\r\n                    Show();\r\n                    EnableAcrylicIfApplicable(taskbar);\r\n                    PositionWindowRelativeToTaskbar(taskbar);\r\n\r\n                    // Focus the first device if available.\r\n                    DevicesList.FindVisualChild<DeviceView>()?.FocusAndRemoveFocusVisual();\r\n\r\n                    // Prevent showing stale adnorners.\r\n                    this.WaitForKeyboardVisuals(() =>\r\n                    {\r\n                        WindowAnimationLibrary.BeginFlyoutEntranceAnimation(this, taskbar, () =>\r\n                        {\r\n                            _viewModel.ChangeState(FlyoutViewState.Open);\r\n                        });\r\n                    });\r\n                    break;\r\n\r\n                case FlyoutViewState.Closing_Stage1:\r\n                    DevicesList.FindVisualChild<DeviceView>()?.FocusAndRemoveFocusVisual();\r\n                \r\n                    if (_viewModel.IsExpandingOrCollapsing)\r\n                    {\r\n                        WindowAnimationLibrary.BeginFlyoutExitanimation(this, () =>\r\n                        {\r\n                            this.Cloak();\r\n                            AccentPolicyLibrary.DisableAcrylic(this);\r\n                \r\n                            // Go directly to ViewState.Hidden to avoid the stage 2 hide delay (debounce for tray clicks),\r\n                            // we want to show again immediately.\r\n                            _viewModel.ChangeState(FlyoutViewState.Hidden);\r\n                        });\r\n                    }\r\n                    else\r\n                    {\r\n                        // No animation for normal exit.\r\n                        this.Cloak();\r\n                        AccentPolicyLibrary.DisableAcrylic(this);\r\n                \r\n                        // Prevent de-queueing partially on show and showing stale adnorners.\r\n                        this.WaitForKeyboardVisuals(() =>\r\n                        {\r\n                            Hide();\r\n                            _viewModel.ChangeState(FlyoutViewState.Closing_Stage2);\r\n                        });\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void OnWindowsSizeInvalidated(object sender, object e)\r\n        {\r\n            // Avoid doing extra work in the background, only update the window when we're actually visible.\r\n            switch (_viewModel.State)\r\n            {\r\n                case FlyoutViewState.Open:\r\n                case FlyoutViewState.Opening:\r\n                    PositionWindowRelativeToTaskbar(WindowsTaskbar.Current);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void PositionWindowRelativeToTaskbar(WindowsTaskbar.State taskbar)\r\n        {\r\n            // We're not ready if we don't have a taskbar and monitor. (e.g. RDP transition)\r\n            if (taskbar.ContainingScreen == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Force layout so we can be sure lists have created/removed containers.\r\n            UpdateLayout();\r\n            LayoutRoot.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\r\n\r\n            // Working area accounts for normal taskbar and docked windows.\r\n            var adjustedWorkingAreaRight = taskbar.ContainingScreen.WorkingArea.Right;\r\n            var adjustedWorkingAreaLeft = taskbar.ContainingScreen.WorkingArea.Left;\r\n            var adjustedWorkingAreaTop = taskbar.ContainingScreen.WorkingArea.Top;\r\n            var adjustedWorkingAreaBottom = taskbar.ContainingScreen.WorkingArea.Bottom;\r\n\r\n            // Taskbar won't carve space out for itself if it's configured to auto-hide, so manually\r\n            // adjust the working area to compensate. This is only done if the working area edge\r\n            // reaches into Taskbar space. This accounts for 0..n docked windows that may not\r\n            // push the working area out far enough.\r\n\r\n            if (taskbar.IsAutoHideEnabled)\r\n            {\r\n                switch (taskbar.Location)\r\n                {\r\n                    case WindowsTaskbar.Position.Left:\r\n                        if (taskbar.ContainingScreen.WorkingArea.Left < taskbar.Size.Right)\r\n                        {\r\n                            adjustedWorkingAreaLeft = taskbar.Size.Right;\r\n                        }\r\n                        break;\r\n                    case WindowsTaskbar.Position.Right:\r\n                        if (taskbar.ContainingScreen.WorkingArea.Right > taskbar.Size.Left)\r\n                        {\r\n                            adjustedWorkingAreaRight = taskbar.Size.Left;\r\n                        }\r\n                        break;\r\n                    case WindowsTaskbar.Position.Top:\r\n                        if (taskbar.ContainingScreen.WorkingArea.Top < taskbar.Size.Bottom)\r\n                        {\r\n                            adjustedWorkingAreaTop = taskbar.Size.Bottom;\r\n                        }\r\n                        break;\r\n                    case WindowsTaskbar.Position.Bottom:\r\n                        if (taskbar.ContainingScreen.WorkingArea.Bottom > taskbar.Size.Top)\r\n                        {\r\n                            adjustedWorkingAreaBottom = taskbar.Size.Top;\r\n                        }\r\n                        break;\r\n                }\r\n            }\r\n\r\n            double flyoutWidth = Width * this.DpiX();\r\n            double flyoutHeight = (LayoutRoot.DesiredSize.Height) * this.DpiY();\r\n\r\n            double yOffset = 0;\r\n            double xOffset = 0;\r\n            if(Environment.OSVersion.IsAtLeast(OSVersions.Windows11))\r\n            {\r\n                xOffset += 12 * this.DpiX();\r\n                yOffset += 12 * this.DpiY();\r\n            }\r\n\r\n            var workingAreaHeight = Math.Abs(adjustedWorkingAreaTop - adjustedWorkingAreaBottom) - (yOffset * 2);\r\n            if (flyoutHeight > workingAreaHeight)\r\n            {\r\n                flyoutHeight = workingAreaHeight;\r\n            }\r\n\r\n            double top = 0;\r\n            double left = 0;\r\n            switch (taskbar.Location)\r\n            {\r\n                case WindowsTaskbar.Position.Left:\r\n                    top = adjustedWorkingAreaBottom - flyoutHeight;\r\n                    left = adjustedWorkingAreaLeft;\r\n                    break;\r\n                case WindowsTaskbar.Position.Right:\r\n                    top = adjustedWorkingAreaBottom - flyoutHeight;\r\n                    left = adjustedWorkingAreaRight - flyoutWidth;\r\n                    break;\r\n                case WindowsTaskbar.Position.Top:\r\n                    top = adjustedWorkingAreaTop + xOffset;\r\n                    left = FlowDirection == FlowDirection.LeftToRight ? adjustedWorkingAreaRight - flyoutWidth - xOffset : adjustedWorkingAreaLeft + xOffset;\r\n                    break;\r\n                case WindowsTaskbar.Position.Bottom:\r\n                    top = adjustedWorkingAreaBottom - flyoutHeight - yOffset;\r\n                    left = FlowDirection == FlowDirection.LeftToRight ? adjustedWorkingAreaRight - flyoutWidth - xOffset : adjustedWorkingAreaLeft + xOffset;\r\n                    break;\r\n            }\r\n            this.SetWindowPos(top, left, flyoutHeight, flyoutWidth);\r\n            _viewModel.UpdateWindowPos(top, left, flyoutHeight, flyoutWidth);\r\n        }\r\n\r\n        private void EnableAcrylicIfApplicable(WindowsTaskbar.State taskbar)\r\n        {\r\n            // Note: Enable when in Opening as well as Open in case we get a theme change during a show cycle.\r\n            if (_viewModel.State == FlyoutViewState.Opening || _viewModel.State == FlyoutViewState.Open)\r\n            {\r\n                AccentPolicyLibrary.EnableAcrylic(this, Themes.Manager.Current.ResolveRef(this, \"AcrylicColor_Flyout\"), GetAccentFlags(taskbar));\r\n            }\r\n            else\r\n            {\r\n                // Disable to avoid visual issues like showing a pane of acrylic while we're Hidden+cloaked.\r\n                AccentPolicyLibrary.DisableAcrylic(this);\r\n            }\r\n        }\r\n\r\n        private User32.AccentFlags GetAccentFlags(WindowsTaskbar.State taskbar)\r\n        {\r\n            if (Environment.OSVersion.IsAtLeast(OSVersions.Windows11))\r\n            {\r\n                return User32.AccentFlags.DrawAllBorders;\r\n            }\r\n\r\n            switch (taskbar.Location)\r\n            {\r\n                case WindowsTaskbar.Position.Left:\r\n                    return User32.AccentFlags.DrawRightBorder | User32.AccentFlags.DrawTopBorder;\r\n                case WindowsTaskbar.Position.Right:\r\n                    return User32.AccentFlags.DrawLeftBorder | User32.AccentFlags.DrawTopBorder;\r\n                case WindowsTaskbar.Position.Top:\r\n                    return User32.AccentFlags.DrawLeftBorder | User32.AccentFlags.DrawBottomBorder;\r\n                case WindowsTaskbar.Position.Bottom:\r\n                    return User32.AccentFlags.DrawTopBorder | User32.AccentFlags.DrawLeftBorder;\r\n            }\r\n            return User32.AccentFlags.None;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/FullWindow.xaml",
    "content": "﻿<Window x:Class=\"EarTrumpet.UI.Views.FullWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n        xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n        xmlns:b=\"clr-namespace:EarTrumpet.UI.Behaviors\"\r\n        xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n        xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n        xmlns:views=\"clr-namespace:EarTrumpet.UI.Views\"\r\n        xmlns:vm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n        Name=\"WindowRoot\"\r\n        Title=\"{x:Static resx:Resources.FullWindowTitleText}\"\r\n        MinWidth=\"{StaticResource WindowAndItemSize}\"\r\n        Theme:AcrylicBrush.Background=\"AcrylicColor_Settings\"\r\n        Theme:Options.Source=\"App\"\r\n        b:FrameworkElementEx.DisplaySettingsChanged=\"{Binding DisplaySettingsChanged}\"\r\n        b:FrameworkElementEx.FlowDirection=\"Auto\"\r\n        Background=\"Transparent\"\r\n        Closing=\"{Event:Binding OnClosing}\"\r\n        LocationChanged=\"{Event:Binding OnLocationChanged}\"\r\n        PreviewKeyDown=\"{Event:Binding OnPreviewKeyDown}\"\r\n        SizeChanged=\"{Event:Binding OnSizeChanged}\"\r\n        SizeToContent=\"WidthAndHeight\"\r\n        Style=\"{StaticResource DialogWindowStyle}\"\r\n        TextOptions.TextFormattingMode=\"Display\"\r\n        UseLayoutRounding=\"True\"\r\n        WindowStartupLocation=\"CenterOwner\">\r\n    <Window.Resources>\r\n        <DataTemplate DataType=\"{x:Type vm:DeviceViewModel}\">\r\n            <views:DeviceView Width=\"{StaticResource WindowAndItemSize}\" Device=\"{Binding}\" />\r\n        </DataTemplate>\r\n    </Window.Resources>\r\n    <Grid>\r\n        <Border Name=\"AcrylicBackgroundActive\" Theme:Brush.Background=\"AcrylicBackground\" />\r\n        <Border Name=\"AcrylicBackgroundWhileDragging\">\r\n            <Border.Style>\r\n                <Style TargetType=\"{x:Type Border}\">\r\n                    <Setter Property=\"Theme:Brush.Background\" Value=\"AcrylicBackgroundFallback\" />\r\n                    <Setter Property=\"Opacity\" Value=\"0\" />\r\n                    <Style.Triggers>\r\n                        <DataTrigger Binding=\"{Binding ElementName=WindowRoot, Path=(Theme:AcrylicBrush.IsSuppressed)}\" Value=\"True\">\r\n                            <DataTrigger.EnterActions>\r\n                                <BeginStoryboard Name=\"IsSuppressed_Enter_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\"\r\n                                                         Duration=\"00:00:00\" />\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </DataTrigger.EnterActions>\r\n                            <DataTrigger.ExitActions>\r\n                                <BeginStoryboard Name=\"IsSuppressed_Exit_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimationUsingKeyFrames BeginTime=\"0:0:0\"\r\n                                                                       Storyboard.TargetProperty=\"Opacity\"\r\n                                                                       Duration=\"0:00:00.25\">\r\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:0.1\" Value=\"1\" />\r\n                                            <EasingDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\" />\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </DataTrigger.ExitActions>\r\n                        </DataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </Border.Style>\r\n        </Border>\r\n        <Border Name=\"AcrylicBackgroundInactive\">\r\n            <Border.Style>\r\n                <Style TargetType=\"{x:Type Border}\">\r\n                    <Setter Property=\"Theme:Brush.Background\" Value=\"AcrylicBackgroundFallback\" />\r\n                    <Setter Property=\"Opacity\" Value=\"1\" />\r\n                    <Style.Triggers>\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"True\" />\r\n                                <Condition Binding=\"{Binding ElementName=WindowRoot, Path=IsActive}\" Value=\"True\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"IsActive_Enter_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"1\"\r\n                                                         To=\"0\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"IsActive_Exit_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"False\" />\r\n                                <Condition Binding=\"{Binding ElementName=WindowRoot, Path=IsActive}\" Value=\"True\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"IsActive_Enter_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"1\"\r\n                                                         To=\"0\"\r\n                                                         Duration=\"00:00:00\" />\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"IsActive_Exit_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\"\r\n                                                         Duration=\"00:00:00\" />\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </Border.Style>\r\n        </Border>\r\n        <DockPanel x:Name=\"ContentRoot\">\r\n            <DockPanel DockPanel.Dock=\"Top\">\r\n                <Grid>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"*\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock Padding=\"12,8,12,8\"\r\n                               Text=\"{Binding ElementName=WindowRoot, Path=Title}\"\r\n                               TextAlignment=\"Left\" />\r\n                    <Button x:Name=\"CloseButton\"\r\n                            Grid.Column=\"2\"\r\n                            Style=\"{StaticResource CloseButtonStyle}\" />\r\n                </Grid>\r\n            </DockPanel>\r\n            <Grid>\r\n                <ScrollViewer x:Name=\"BaseVisual\"\r\n                              HorizontalScrollBarVisibility=\"Auto\"\r\n                              VerticalScrollBarVisibility=\"Auto\">\r\n                    <Grid Name=\"ContentGrid\">\r\n                        <Border Width=\"{StaticResource WindowAndItemSize}\"\r\n                                VerticalAlignment=\"Center\"\r\n                                Theme:Brush.Background=\"FlyoutBackground\">\r\n                            <Border.Style>\r\n                                <Style TargetType=\"Border\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                    <Style.Triggers>\r\n                                        <DataTrigger Binding=\"{Binding AllDevices.Count}\" Value=\"0\">\r\n                                            <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                                        </DataTrigger>\r\n                                    </Style.Triggers>\r\n                                </Style>\r\n                            </Border.Style>\r\n                            <TextBlock Margin=\"{StaticResource NoItemsPaneMargin}\"\r\n                                       HorizontalAlignment=\"Center\"\r\n                                       FontSize=\"{StaticResource {x:Static SystemFonts.MessageFontSizeKey}}\"\r\n                                       Text=\"{x:Static resx:Resources.NoDevicesPanelContent}\"\r\n                                       TextWrapping=\"Wrap\" />\r\n                        </Border>\r\n                        <Grid>\r\n                            <Grid.Style>\r\n                                <Style TargetType=\"Grid\">\r\n                                    <Style.Triggers>\r\n                                        <DataTrigger Binding=\"{Binding AllDevices.Count}\" Value=\"0\">\r\n                                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                        </DataTrigger>\r\n                                    </Style.Triggers>\r\n                                </Style>\r\n                            </Grid.Style>\r\n                            <Grid.RowDefinitions>\r\n                                <RowDefinition Height=\"*\" />\r\n                                <RowDefinition Height=\"Auto\" />\r\n                            </Grid.RowDefinitions>\r\n                            <ItemsControl IsTabStop=\"False\" ItemsSource=\"{Binding AllDevices}\">\r\n                                <ItemsControl.ItemsPanel>\r\n                                    <ItemsPanelTemplate>\r\n                                        <StackPanel Orientation=\"Horizontal\" />\r\n                                    </ItemsPanelTemplate>\r\n                                </ItemsControl.ItemsPanel>\r\n                            </ItemsControl>\r\n                            <Border Grid.Row=\"1\" Theme:Brush.Background=\"Background\">\r\n                                <Border.Style>\r\n                                    <Style TargetType=\"{x:Type Border}\">\r\n                                        <Style.Triggers>\r\n                                            <DataTrigger Binding=\"{Binding IsManyDevicesMode}\" Value=\"True\">\r\n                                                <Setter Property=\"Height\" Value=\"12\" />\r\n                                            </DataTrigger>\r\n                                        </Style.Triggers>\r\n                                    </Style>\r\n                                </Border.Style>\r\n                            </Border>\r\n                        </Grid>\r\n                    </Grid>\r\n                </ScrollViewer>\r\n                <ctl:AppPopup IsOpen=\"{Binding Dialog.IsVisible, Mode=TwoWay}\"\r\n                              PlacementTarget=\"{Binding Dialog.Source}\"\r\n                              Style=\"{StaticResource AppPopup}\">\r\n                    <ContentControl Content=\"{Binding Dialog.Focused}\" />\r\n                </ctl:AppPopup>\r\n            </Grid>\r\n        </DockPanel>\r\n        <Border Name=\"LightDismissBorder\"\r\n                Theme:Brush.Background=\"Background\"\r\n                PreviewMouseDown=\"{Event:Binding OnLightDismissBorderPreviewMouseDown}\">\r\n            <Border.Style>\r\n                <Style TargetType=\"{x:Type Border}\">\r\n                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                    <Style.Triggers>\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Dialog.IsVisible}\" Value=\"True\" />\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"True\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"EnterLightDismiss_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Visible}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOff\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOff\" />\r\n                                <BeginStoryboard Name=\"ExitLightDismiss_AnimationsOn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                         From=\"1\"\r\n                                                         To=\"0\"\r\n                                                         Duration=\"00:00:00.15\" />\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00.15\" Value=\"{x:Static Visibility.Collapsed}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n\r\n                        <MultiDataTrigger>\r\n                            <MultiDataTrigger.Conditions>\r\n                                <Condition Binding=\"{Binding Dialog.IsVisible}\" Value=\"True\" />\r\n                                <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"False\" />\r\n                            </MultiDataTrigger.Conditions>\r\n                            <MultiDataTrigger.EnterActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"EnterLightDismiss_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Visible}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.EnterActions>\r\n                            <MultiDataTrigger.ExitActions>\r\n                                <StopStoryboard BeginStoryboardName=\"EnterLightDismiss_AnimationsOn\" />\r\n                                <StopStoryboard BeginStoryboardName=\"ExitLightDismiss_AnimationsOn\" />\r\n                                <BeginStoryboard Name=\"ExitLightDismiss_AnimationsOff\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames BeginTime=\"00:00:00\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"00:00:00\" Value=\"{x:Static Visibility.Collapsed}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </BeginStoryboard>\r\n                            </MultiDataTrigger.ExitActions>\r\n                        </MultiDataTrigger>\r\n                    </Style.Triggers>\r\n                </Style>\r\n            </Border.Style>\r\n            <Border Margin=\"0,0,0,14\" Opacity=\"0.8\">\r\n                <Border.Effect>\r\n                    <BlurEffect KernelType=\"Gaussian\"\r\n                                Radius=\"{StaticResource WindowBlurRadius}\"\r\n                                RenderingBias=\"Performance\" />\r\n                </Border.Effect>\r\n                <Border.Background>\r\n                    <VisualBrush AlignmentX=\"Left\"\r\n                                 AlignmentY=\"Top\"\r\n                                 Stretch=\"UniformToFill\"\r\n                                 Visual=\"{Binding ElementName=ContentRoot}\" />\r\n                </Border.Background>\r\n            </Border>\r\n        </Border>\r\n    </Grid>\r\n</Window>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/FullWindow.xaml.cs",
    "content": "using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.UI.ViewModels;\r\nusing System.Diagnostics;\r\nusing System.Windows;\r\nusing System.Windows.Interop;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class FullWindow : Window\r\n    {\r\n        private readonly double _windowAndItemSize;\r\n        private FullWindowViewModel ViewModel => (FullWindowViewModel)DataContext;\r\n\r\n        public FullWindow()\r\n        {\r\n            Trace.WriteLine(\"FullWindow .ctor\");\r\n            Closed += (_, __) => Trace.WriteLine(\"FullWindow Closed\");\r\n\r\n            _windowAndItemSize = (double)App.Current.Resources[\"WindowAndItemSize\"];\r\n\r\n            InitializeComponent();\r\n            SourceInitialized += (sender, __) =>\r\n            {\r\n                this.Cloak();\r\n                this.EnableRoundedCornersIfApplicable();\r\n\r\n                if (App.Settings.FullMixerWindowPlacement != null)\r\n                {\r\n                    User32.SetWindowPlacement(new WindowInteropHelper((Window)sender).Handle, App.Settings.FullMixerWindowPlacement.Value);\r\n                }\r\n            };\r\n\r\n            Closing += (sender, __) =>\r\n            {\r\n                if (User32.GetWindowPlacement(new WindowInteropHelper((Window)sender).Handle, out var placement))\r\n                {\r\n                    App.Settings.FullMixerWindowPlacement = placement;\r\n                }\r\n            };\r\n\r\n            // Auto-size on the first layout pass.\r\n            SizeToContent = SizeToContent.WidthAndHeight;\r\n            MaxWidth = FullWindowViewModel.SmallDeviceCountLimit * _windowAndItemSize;\r\n            ContentRendered += (_, __) =>\r\n            {\r\n                // Update the size as devices change:\r\n                ViewModel.AllDevices.CollectionChanged += OnDevicesChanged;\r\n                OnDevicesChanged(null, null);\r\n            };\r\n        }\r\n\r\n        private void OnDevicesChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)\r\n        {\r\n            if (ViewModel.AllDevices.Count == FullWindowViewModel.SmallDeviceCountLimit + 1 && e != null && e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)\r\n            {\r\n                // We're growing from auto-size to fixed-size, we need to make space for the padding at the bottom.\r\n                MaxWidth = FullWindowViewModel.SmallDeviceCountLimit * _windowAndItemSize;\r\n                UpdateLayout();\r\n            }\r\n\r\n            if (ViewModel.AllDevices.Count == 0)\r\n            {\r\n                // No devices panel with auto layout.\r\n                MaxWidth = double.PositiveInfinity;\r\n                MinHeight = 0;\r\n            }\r\n            else\r\n            {\r\n                // Pick a value so the user can't make the window too small by accident.\r\n                MinHeight = 200;\r\n                // Don't let the user expand past the last device.\r\n                MaxWidth = 2 /* Window borders */ + \r\n                    ViewModel.AllDevices.Count * _windowAndItemSize;\r\n            }\r\n\r\n            SizeToContent = ViewModel.IsManyDevicesMode ? SizeToContent.Manual : SizeToContent.WidthAndHeight;\r\n            ResizeMode = ViewModel.IsManyDevicesMode ? ResizeMode.CanResize : ResizeMode.NoResize;\r\n            this.RemoveWindowStyle(User32.WS_MAXIMIZEBOX);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/SettingsWindow.xaml",
    "content": "﻿<Window x:Class=\"EarTrumpet.UI.Views.SettingsWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding\"\r\n        xmlns:Theme=\"clr-namespace:EarTrumpet.UI.Themes\"\r\n        xmlns:b=\"clr-namespace:EarTrumpet.UI.Behaviors\"\r\n        xmlns:ctl=\"clr-namespace:EarTrumpet.UI.Controls\"\r\n        xmlns:datamodel=\"clr-namespace:EarTrumpet.DataModel\"\r\n        xmlns:local=\"clr-namespace:EarTrumpet\"\r\n        xmlns:resx=\"clr-namespace:EarTrumpet.Properties\"\r\n        xmlns:vm=\"clr-namespace:EarTrumpet.UI.ViewModels\"\r\n        Name=\"WindowRoot\"\r\n        Title=\"{Binding Title}\"\r\n        Width=\"800\"\r\n        Height=\"600\"\r\n        MinWidth=\"770\"\r\n        MinHeight=\"320\"\r\n        Theme:AcrylicBrush.Background=\"AcrylicColor_Settings\"\r\n        Theme:Options.Source=\"App\"\r\n        b:FrameworkElementEx.DisplaySettingsChanged=\"{Binding DisplaySettingsChanged}\"\r\n        b:FrameworkElementEx.FlowDirection=\"Auto\"\r\n        Background=\"Transparent\"\r\n        Closing=\"{Event:Binding OnClosing}\"\r\n        ResizeMode=\"CanResize\"\r\n        Style=\"{StaticResource DialogWindowStyle}\"\r\n        TextOptions.TextFormattingMode=\"Display\"\r\n        UseLayoutRounding=\"True\"\r\n        WindowStartupLocation=\"CenterScreen\">\r\n    <Window.Resources>\r\n        <DataTemplate DataType=\"{x:Type vm:EarTrumpetShortcutsPageViewModel}\">\r\n            <StackPanel Orientation=\"Vertical\">\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.SettingsOpenEarTrumpetText}\" />\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.DefaultHotkeyDescriptionText}\" />\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{Binding DefaultHotKey}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.HotkeyDescriptionText}\" />\r\n                    <ContentControl Grid.Row=\"1\"\r\n                                    Grid.Column=\"1\"\r\n                                    Content=\"{Binding OpenFlyoutHotkey}\"\r\n                                    IsTabStop=\"False\" />\r\n                </Grid>\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.SettingsOpenMixerText}\" />\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.DefaultHotkeyDescriptionText}\" />\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{Binding DefaultMixerHotKey}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.HotkeyDescriptionText}\" />\r\n                    <ContentControl Grid.Row=\"1\"\r\n                                    Grid.Column=\"1\"\r\n                                    Content=\"{Binding OpenMixerHotkey}\"\r\n                                    IsTabStop=\"False\" />\r\n                </Grid>\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.SettingsOpenSettingsText}\" />\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.DefaultHotkeyDescriptionText}\" />\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{Binding DefaultSettingsHotKey}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.HotkeyDescriptionText}\" />\r\n                    <ContentControl Grid.Row=\"1\"\r\n                                    Grid.Column=\"1\"\r\n                                    Content=\"{Binding OpenSettingsHotkey}\"\r\n                                    IsTabStop=\"False\" />\r\n                </Grid>\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.SettingsAbsoluteVolumeUpText}\" />\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.DefaultHotkeyDescriptionText}\" />\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{Binding DefaultSettingsHotKey}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.HotkeyDescriptionText}\" />\r\n                    <ContentControl Grid.Row=\"1\"\r\n                                    Grid.Column=\"1\"\r\n                                    Content=\"{Binding AbsoluteVolumeUpHotkey}\"\r\n                                    IsTabStop=\"False\" />\r\n                </Grid>\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.SettingsAbsoluteVolumeDownText}\" />\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <TextBlock VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.DefaultHotkeyDescriptionText}\" />\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{Binding DefaultSettingsHotKey}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               VerticalAlignment=\"Center\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{x:Static resx:Resources.HotkeyDescriptionText}\" />\r\n                    <ContentControl Grid.Row=\"1\"\r\n                                    Grid.Column=\"1\"\r\n                                    Content=\"{Binding AbsoluteVolumeDownHotkey}\"\r\n                                    IsTabStop=\"False\" />\r\n                </Grid>\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:EarTrumpetMouseSettingsPageViewModel}\">\r\n            <StackPanel Orientation=\"Vertical\">\r\n                <CheckBox HorizontalAlignment=\"Left\"\r\n                          Content=\"{x:Static resx:Resources.SettingsUseScrollWheelInTray}\"\r\n                          IsChecked=\"{Binding UseScrollWheelInTray, Mode=TwoWay}\" />\r\n                <CheckBox HorizontalAlignment=\"Left\"\r\n                          Content=\"{x:Static resx:Resources.SettingsUseGlobalMouseWheelHook}\"\r\n                          IsChecked=\"{Binding UseGlobalMouseWheelHook, Mode=TwoWay}\" />\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:EarTrumpetCommunitySettingsPageViewModel}\">\r\n            <StackPanel Orientation=\"Vertical\">\r\n                <CheckBox HorizontalAlignment=\"Left\"\r\n                          Content=\"{x:Static resx:Resources.SettingsUseLogarithmicVolume}\"\r\n                          IsChecked=\"{Binding UseLogarithmicVolume, Mode=TwoWay}\" />\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:EarTrumpetLegacySettingsPageViewModel}\">\r\n            <StackPanel Orientation=\"Vertical\">\r\n                <CheckBox HorizontalAlignment=\"Left\"\r\n                          Content=\"{x:Static resx:Resources.SettingsUseLegacyEarTrumpetIcon}\"\r\n                          IsChecked=\"{Binding UseLegacyIcon, Mode=TwoWay}\" />\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:EarTrumpetAboutPageViewModel}\">\r\n            <StackPanel>\r\n                <StackPanel Margin=\"12,24\" Orientation=\"Horizontal\">\r\n                    <Border Width=\"40\"\r\n                            Height=\"30\"\r\n                            Margin=\"0,0,8,0\">\r\n                        <Canvas>\r\n                            <Path Width=\"40\"\r\n                                  Height=\"30\"\r\n                                  Theme:Brush.Fill=\"Text\"\r\n                                  Data=\"F 1 M 64.1,24.9 C 63.3,31.7 58.6,46.4 53.9,51 55.1,48.7 55.7,46.1 55.6,43.3 55.3,35.4 48.8,28.8 40.8,28.5 32,28.1 24.8,35.2 24.8,43.9 24.8,47.2 25.9,50.3 27.7,52.9 17.8,48.3 10,41.2 9.3,40.7 8.1,40.3 6.1,43.6 6.8,44.8 59.8,89.8 81.5,34.4 82.2,32.8 75.2,31.4 74.8,25.5 64.1,24.9 Z M 38.7,31.9 C 46.6,30.9 53.3,37.6 52.3,45.5 51.6,50.9 47.3,55.3 41.9,55.9 34,56.9 27.3,50.2 28.3,42.3 28.9,37 33.3,32.6 38.7,31.9 Z\"\r\n                                  Stretch=\"Uniform\" />\r\n                        </Canvas>\r\n                    </Border>\r\n                    <TextBlock FontSize=\"24\" Text=\"EarTrumpet\" />\r\n                </StackPanel>\r\n                <StackPanel Orientation=\"Horizontal\">\r\n                    <StackPanel>\r\n                        <TextBlock VerticalAlignment=\"Center\"\r\n                                   Style=\"{StaticResource BodyText}\"\r\n                                   Text=\"{Binding AboutText}\" />\r\n                        <TextBlock VerticalAlignment=\"Center\"\r\n                                   Style=\"{StaticResource BodyText}\"\r\n                                   Text=\"© File-New-Project\" />\r\n                        <CheckBox Margin=\"12,24,12,-6\"\r\n                                  HorizontalAlignment=\"Left\"\r\n                                  Content=\"{x:Static resx:Resources.PrivacyCheckboxText}\"\r\n                                  IsChecked=\"{Binding IsTelemetryEnabled, Mode=TwoWay}\" />\r\n                        <TextBlock Style=\"{StaticResource HyperlinkBlock}\">\r\n                            <Hyperlink Command=\"{Binding OpenPrivacyPolicyCommand}\">\r\n                                <Run Text=\"{x:Static resx:Resources.PrivacyPolicyText}\" />\r\n                            </Hyperlink>\r\n                        </TextBlock>\r\n                        <TextBlock Style=\"{StaticResource HyperlinkBlock}\"><Hyperlink Command=\"{Binding OpenAboutCommand}\">\r\n                                <Run Text=\"{x:Static resx:Resources.WebsiteText}\" />\r\n                            </Hyperlink>\r\n                        </TextBlock>\r\n                        <TextBlock Style=\"{StaticResource HyperlinkBlock}\">\r\n                            <Hyperlink Command=\"{Binding OpenFeedbackCommand}\">\r\n                                <Run Text=\"{x:Static resx:Resources.ContextMenuSendFeedback}\" />\r\n                            </Hyperlink>\r\n                        </TextBlock>\r\n                        <TextBlock Style=\"{StaticResource HyperlinkBlock}\">\r\n                            <Hyperlink Command=\"{Binding OpenDiagnosticsCommand}\">\r\n                                <Run Text=\"{x:Static resx:Resources.TroubleshootEarTrumpetText}\" />\r\n                            </Hyperlink>\r\n                        </TextBlock>\r\n                    </StackPanel>\r\n                </StackPanel>\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:SettingsPageHeaderViewModel}\">\r\n            <Grid Height=\"64\">\r\n                <TextBlock Margin=\"24,0,0,6\"\r\n                           VerticalAlignment=\"Bottom\"\r\n                           FontSize=\"26\"\r\n                           Text=\"{Binding Title}\" />\r\n            </Grid>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:AddonAboutPageViewModel}\">\r\n            <StackPanel Orientation=\"Vertical\">\r\n                <Grid>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                        <ColumnDefinition Width=\"Auto\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"Auto\" />\r\n                    </Grid.RowDefinitions>\r\n\r\n                    <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.AddonNameText}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{x:Static resx:Resources.PublisherText}\" />\r\n                    <TextBlock Grid.Row=\"2\"\r\n                               Style=\"{StaticResource BodyText}\"\r\n                               Text=\"{x:Static resx:Resources.VersionText}\" />\r\n\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{Binding DisplayName}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               Grid.Column=\"1\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{Binding PublisherName}\" />\r\n                    <TextBlock Grid.Row=\"2\"\r\n                               Grid.Column=\"1\"\r\n                               Style=\"{StaticResource BodySubText}\"\r\n                               Text=\"{Binding Version}\" />\r\n                </Grid>\r\n                <TextBlock Style=\"{StaticResource HyperlinkBlock}\"><Hyperlink Command=\"{Binding OpenHelpLink}\">\r\n                        <Run Text=\"{x:Static resx:Resources.WebsiteText}\" />\r\n                    </Hyperlink></TextBlock>\r\n\r\n                <TextBlock Style=\"{StaticResource HeadingText}\" Text=\"{x:Static resx:Resources.AddonUninstallTitle}\" />\r\n                <TextBlock Style=\"{StaticResource BodyText}\" Text=\"{x:Static resx:Resources.AddonUninstallDescriptionText}\" />\r\n                <Button Command=\"{Binding Uninstall}\" Content=\"{x:Static resx:Resources.AddonUninstallButtonText}\" />\r\n            </StackPanel>\r\n        </DataTemplate>\r\n        <DataTemplate DataType=\"{x:Type vm:SettingsCategoryViewModel}\">\r\n            <Grid PreviewMouseRightButtonDown=\"{Event:HandledBinding}\">\r\n                <Grid.Style>\r\n                    <Style TargetType=\"Grid\">\r\n                        <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding IsAd}\" Value=\"True\">\r\n                                <Setter Property=\"Theme:Brush.Background\" Value=\"AcrylicBackgroundFallback\" />\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Grid.Style>\r\n\r\n                <Polygon HorizontalAlignment=\"Right\"\r\n                         Theme:Brush.Fill=\"SystemAccent\"\r\n                         Points=\"0,0 40,0 40,40\">\r\n                    <Polygon.Style>\r\n                        <Style TargetType=\"Polygon\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding IsAd}\" Value=\"False\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </Polygon.Style>\r\n                </Polygon>\r\n\r\n                <TextBlock Margin=\"4,6,4,4\"\r\n                           HorizontalAlignment=\"Right\"\r\n                           VerticalAlignment=\"Top\"\r\n                           Theme:Brush.Foreground=\"ApplicationTextDarkTheme\"\r\n                           FontSize=\"12\"\r\n                           Text=\"&#xE896;\">\r\n                    <TextBlock.Style>\r\n                        <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding IsAd}\" Value=\"False\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </TextBlock.Style>\r\n                </TextBlock>\r\n\r\n                <Grid>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\" />\r\n                        <RowDefinition Height=\"*\" />\r\n                    </Grid.RowDefinitions>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"58\" />\r\n                        <ColumnDefinition Width=\"*\" />\r\n                    </Grid.ColumnDefinitions>\r\n\r\n                    <TextBlock Grid.RowSpan=\"2\"\r\n                               Margin=\"0,-6,0,0\"\r\n                               VerticalAlignment=\"Center\"\r\n                               FontSize=\"30\"\r\n                               Text=\"{Binding Glyph}\">\r\n                        <TextBlock.Style>\r\n                            <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                                <Setter Property=\"Theme:Brush.Foreground\" Value=\"SystemAccent\" />\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding IsAd}\" Value=\"True\">\r\n                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"DarkGray\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </TextBlock.Style>\r\n                    </TextBlock>\r\n                    <TextBlock Grid.Column=\"1\"\r\n                               Margin=\"6,12,0,0\"\r\n                               VerticalAlignment=\"Top\"\r\n                               FontSize=\"15\"\r\n                               Text=\"{Binding Title}\" />\r\n                    <TextBlock Grid.Row=\"1\"\r\n                               Grid.Column=\"1\"\r\n                               Margin=\"6,2,8,6\"\r\n                               VerticalAlignment=\"Top\"\r\n                               Theme:Brush.Foreground=\"GrayText\"\r\n                               FontSize=\"12\"\r\n                               Text=\"{Binding Description}\"\r\n                               TextWrapping=\"Wrap\" />\r\n                </Grid>\r\n            </Grid>\r\n        </DataTemplate>\r\n        <Style x:Key=\"SettingsListViewItem\" TargetType=\"{x:Type ListViewItem}\">\r\n            <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n            <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\" />\r\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\r\n            <Setter Property=\"Background\" Value=\"Transparent\" />\r\n            <Setter Property=\"Height\" Value=\"48\" />\r\n            <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"{x:Type ListViewItem}\">\r\n                        <Border x:Name=\"Bd\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                SnapsToDevicePixels=\"true\">\r\n                            <ContentPresenter Margin=\"0\"\r\n                                              HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                              VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                              SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                        </Border>\r\n                        <ControlTemplate.Triggers>\r\n                            <MultiTrigger>\r\n                                <MultiTrigger.Conditions>\r\n                                    <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                                </MultiTrigger.Conditions>\r\n                                <Setter TargetName=\"Bd\" Property=\"Theme:Brush.Background\" Value=\"Theme={Theme}ListLow, HighContrast=Highlight\" />\r\n                            </MultiTrigger>\r\n                        </ControlTemplate.Triggers>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n        </Style>\r\n        <Style x:Key=\"SettingsListView\" TargetType=\"{x:Type ListView}\">\r\n            <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n            <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\" />\r\n            <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"true\" />\r\n            <Setter Property=\"ItemContainerStyle\" Value=\"{StaticResource SettingsListViewItem}\" />\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"{x:Type ListView}\">\r\n                        <Border x:Name=\"Bd\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                SnapsToDevicePixels=\"true\">\r\n                            <ScrollViewer Padding=\"{TemplateBinding Padding}\" Focusable=\"false\">\r\n                                <ItemsPresenter SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </ScrollViewer>\r\n                        </Border>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n        </Style>\r\n        <Style x:Key=\"MainListItem\" TargetType=\"{x:Type ListViewItem}\">\r\n            <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n            <Setter Property=\"SnapsToDevicePixels\" Value=\"True\" />\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n            <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n            <Setter Property=\"Height\" Value=\"86\" />\r\n            <Setter Property=\"Width\" Value=\"250\" />\r\n            <Setter Property=\"Margin\" Value=\"12\" />\r\n            <Setter Property=\"Background\" Value=\"Transparent\" />\r\n            <Setter Property=\"FocusVisualStyle\" Value=\"{StaticResource Windows10FocusVisualStyle}\" />\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"{x:Type ListViewItem}\">\r\n                        <Border x:Name=\"Bd\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                BorderThickness=\"2\"\r\n                                SnapsToDevicePixels=\"true\">\r\n\r\n                            <ContentPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                              VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                              SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n\r\n                        </Border>\r\n                        <ControlTemplate.Triggers>\r\n                            <MultiTrigger>\r\n                                <MultiTrigger.Conditions>\r\n                                    <Condition Property=\"IsMouseOver\" Value=\"True\" />\r\n                                </MultiTrigger.Conditions>\r\n                                <Setter TargetName=\"Bd\" Property=\"Theme:Brush.BorderBrush\" Value=\"Light=LightBaseMediumLow/0.12, Dark=DarkBaseMediumLow/0.12, HighContrast=Highlight\" />\r\n                            </MultiTrigger>\r\n                        </ControlTemplate.Triggers>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n        </Style>\r\n        <Style x:Key=\"MainList\" TargetType=\"{x:Type ListView}\">\r\n            <Setter Property=\"OverridesDefaultStyle\" Value=\"True\" />\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\r\n            <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Auto\" />\r\n            <Setter Property=\"ScrollViewer.CanContentScroll\" Value=\"true\" />\r\n            <Setter Property=\"ItemContainerStyle\" Value=\"{StaticResource MainListItem}\" />\r\n            <Setter Property=\"Template\">\r\n                <Setter.Value>\r\n                    <ControlTemplate TargetType=\"{x:Type ListView}\">\r\n                        <Border x:Name=\"Bd\"\r\n                                Background=\"{TemplateBinding Background}\"\r\n                                SnapsToDevicePixels=\"true\">\r\n                            <ScrollViewer Padding=\"{TemplateBinding Padding}\" Focusable=\"false\">\r\n                                <ItemsPresenter HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" SnapsToDevicePixels=\"{TemplateBinding SnapsToDevicePixels}\" />\r\n                            </ScrollViewer>\r\n                        </Border>\r\n                    </ControlTemplate>\r\n                </Setter.Value>\r\n            </Setter>\r\n        </Style>\r\n    </Window.Resources>\r\n    <Grid>\r\n        <!--  Background  -->\r\n        <Grid>\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"320\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Border Name=\"AcrylicBackgroundActive\" Theme:Brush.Background=\"AcrylicBackground\" />\r\n            <Border Name=\"AcrylicBackgroundWhileDragging\">\r\n                <Border.Style>\r\n                    <Style TargetType=\"{x:Type Border}\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"AcrylicBackgroundFallback\" />\r\n                        <Setter Property=\"Opacity\" Value=\"0\" />\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding ElementName=WindowRoot, Path=(Theme:AcrylicBrush.IsSuppressed)}\" Value=\"True\">\r\n                                <DataTrigger.EnterActions>\r\n                                    <BeginStoryboard Name=\"IsSuppressed_Enter_AnimationsOn\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                             From=\"0\"\r\n                                                             To=\"1\"\r\n                                                             Duration=\"00:00:00\" />\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </DataTrigger.EnterActions>\r\n                                <DataTrigger.ExitActions>\r\n                                    <BeginStoryboard Name=\"IsSuppressed_Exit_AnimationsOn\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimationUsingKeyFrames BeginTime=\"0:0:0\"\r\n                                                                           Storyboard.TargetProperty=\"Opacity\"\r\n                                                                           Duration=\"0:00:00.25\">\r\n                                                <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"1\" />\r\n                                                <EasingDoubleKeyFrame KeyTime=\"0:0:0.1\" Value=\"1\" />\r\n                                                <EasingDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\" />\r\n                                            </DoubleAnimationUsingKeyFrames>\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </DataTrigger.ExitActions>\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Border.Style>\r\n            </Border>\r\n            <Border Name=\"AcrylicBackgroundInactive\">\r\n                <Border.Style>\r\n                    <Style TargetType=\"{x:Type Border}\">\r\n                        <Setter Property=\"Theme:Brush.Background\" Value=\"AcrylicBackgroundFallback\" />\r\n                        <Setter Property=\"Opacity\" Value=\"1\" />\r\n                        <Style.Triggers>\r\n                            <MultiDataTrigger>\r\n                                <MultiDataTrigger.Conditions>\r\n                                    <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"True\" />\r\n                                    <Condition Binding=\"{Binding ElementName=WindowRoot, Path=IsActive}\" Value=\"True\" />\r\n                                </MultiDataTrigger.Conditions>\r\n                                <MultiDataTrigger.EnterActions>\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOff\" />\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOff\" />\r\n                                    <BeginStoryboard Name=\"IsActive_Enter_AnimationsOn\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                             From=\"1\"\r\n                                                             To=\"0\"\r\n                                                             Duration=\"00:00:00.15\" />\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </MultiDataTrigger.EnterActions>\r\n                                <MultiDataTrigger.ExitActions>\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOff\" />\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOff\" />\r\n                                    <BeginStoryboard Name=\"IsActive_Exit_AnimationsOn\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                             From=\"0\"\r\n                                                             To=\"1\"\r\n                                                             Duration=\"00:00:00.15\" />\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </MultiDataTrigger.ExitActions>\r\n                            </MultiDataTrigger>\r\n                            <MultiDataTrigger>\r\n                                <MultiDataTrigger.Conditions>\r\n                                    <Condition Binding=\"{Binding Source={StaticResource ThemeManager}, Path=AnimationsEnabled}\" Value=\"False\" />\r\n                                    <Condition Binding=\"{Binding ElementName=WindowRoot, Path=IsActive}\" Value=\"True\" />\r\n                                </MultiDataTrigger.Conditions>\r\n                                <MultiDataTrigger.EnterActions>\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOn\" />\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOn\" />\r\n                                    <BeginStoryboard Name=\"IsActive_Enter_AnimationsOff\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                             From=\"1\"\r\n                                                             To=\"0\"\r\n                                                             Duration=\"00:00:00\" />\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </MultiDataTrigger.EnterActions>\r\n                                <MultiDataTrigger.ExitActions>\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Exit_AnimationsOn\" />\r\n                                    <StopStoryboard BeginStoryboardName=\"IsActive_Enter_AnimationsOn\" />\r\n                                    <BeginStoryboard Name=\"IsActive_Exit_AnimationsOff\">\r\n                                        <Storyboard>\r\n                                            <DoubleAnimation Storyboard.TargetProperty=\"Opacity\"\r\n                                                             From=\"0\"\r\n                                                             To=\"1\"\r\n                                                             Duration=\"00:00:00\" />\r\n                                        </Storyboard>\r\n                                    </BeginStoryboard>\r\n                                </MultiDataTrigger.ExitActions>\r\n                            </MultiDataTrigger>\r\n                        </Style.Triggers>\r\n                    </Style>\r\n                </Border.Style>\r\n            </Border>\r\n            <Border Theme:Brush.Background=\"Background\">\r\n                <Border.Style>\r\n                    <Style TargetType=\"Border\">\r\n                        <Style.Triggers>\r\n                            <DataTrigger Binding=\"{Binding Selected}\" Value=\"{x:Null}\">\r\n                                <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                            </DataTrigger>\r\n                        </Style.Triggers>\r\n                        <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                    </Style>\r\n                </Border.Style>\r\n            </Border>\r\n            <Border Grid.Column=\"1\" Theme:Brush.Background=\"Background\" />\r\n        </Grid>\r\n        <DockPanel LastChildFill=\"True\">\r\n            <!--  TitleBar  -->\r\n            <Grid DockPanel.Dock=\"Top\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                    <ColumnDefinition Width=\"*\" />\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                    <ColumnDefinition Width=\"Auto\" />\r\n                </Grid.ColumnDefinitions>\r\n                <Button x:Name=\"BackButton\"\r\n                        Command=\"{Binding Backstack.GoBack}\"\r\n                        FontSize=\"13\">\r\n                    <Button.Style>\r\n                        <Style BasedOn=\"{StaticResource CaptionButtonStyle}\" TargetType=\"Button\">\r\n                            <Setter Property=\"IsEnabled\" Value=\"False\" />\r\n                            <Setter Property=\"Content\" Value=\"&#xE72B;\" />\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Backstack.CanGoBack}\" Value=\"False\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                                <DataTrigger Binding=\"{Binding Source={x:Static datamodel:SystemSettings.IsRTL}}\" Value=\"True\">\r\n                                    <Setter Property=\"Content\" Value=\"&#xE72A;\" />\r\n                                </DataTrigger>\r\n                                <Trigger Property=\"IsMouseOver\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextDarkTheme, HighContrast=HighlightText\" />\r\n                                    <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <Trigger Property=\"IsPressed\" Value=\"True\">\r\n                                    <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=ApplicationTextDarkTheme, HighContrast=HighlightText\" />\r\n                                    <Setter Property=\"Theme:Brush.Background\" Value=\"Theme=SystemAccent{Theme}1, HighContrast=Highlight\" />\r\n                                </Trigger>\r\n                                <DataTrigger Binding=\"{Binding Dialog}\" Value=\"{x:Null}\">\r\n                                    <Setter Property=\"IsEnabled\" Value=\"True\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </Button.Style>\r\n                </Button>\r\n\r\n                <TextBlock Grid.Column=\"1\"\r\n                           Margin=\"14,0,0,0\"\r\n                           Text=\"{Binding Title}\"\r\n                           TextAlignment=\"Left\" />\r\n                <Button x:Name=\"MinimizeButton\"\r\n                        Grid.Column=\"2\"\r\n                        Style=\"{StaticResource MinimizeButton}\" />\r\n                <Button x:Name=\"MaximizeRestoreButton\"\r\n                        Grid.Column=\"3\"\r\n                        Style=\"{StaticResource MaximizeButton}\" />\r\n                <Button x:Name=\"CloseButton\"\r\n                        Grid.Column=\"4\"\r\n                        Style=\"{StaticResource CloseButtonStyle}\" />\r\n            </Grid>\r\n            <Grid>\r\n                <!--  Main  -->\r\n                <Grid>\r\n                    <Grid.Style>\r\n                        <Style TargetType=\"Grid\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Selected}\" Value=\"{x:Null}\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                            <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                        </Style>\r\n                    </Grid.Style>\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"90\" />\r\n                        <RowDefinition Height=\"46\" />\r\n                        <RowDefinition Height=\"*\" />\r\n                    </Grid.RowDefinitions>\r\n                    <TextBlock HorizontalAlignment=\"Center\"\r\n                               FontSize=\"26\"\r\n                               FontWeight=\"Light\"\r\n                               Style=\"{StaticResource HeadingText}\"\r\n                               Text=\"{x:Static resx:Resources.SettingsTitle}\" />\r\n                    <ComboBox Grid.Row=\"1\"\r\n                              Width=\"332\"\r\n                              Height=\"32\"\r\n                              Margin=\"0\"\r\n                              VerticalContentAlignment=\"Center\"\r\n                              b:ComboBoxEx.SearchItemsSource=\"{Binding}\" />\r\n                    <ctl:ListView Grid.Row=\"2\"\r\n                                  ItemInvoked=\"{Event:Binding OnInvoked}\"\r\n                                  ItemsSource=\"{Binding Categories}\"\r\n                                  Style=\"{StaticResource MainList}\">\r\n                        <ListView.ItemsPanel>\r\n                            <ItemsPanelTemplate>\r\n                                <WrapPanel Margin=\"0,24\" />\r\n                            </ItemsPanelTemplate>\r\n                        </ListView.ItemsPanel>\r\n                    </ctl:ListView>\r\n                </Grid>\r\n                <!--  Subview  -->\r\n                <Grid>\r\n                    <Grid.Style>\r\n                        <Style TargetType=\"Grid\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Selected}\" Value=\"{x:Null}\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                            <Setter Property=\"Visibility\" Value=\"Visible\" />\r\n                        </Style>\r\n                    </Grid.Style>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"320\" />\r\n                        <ColumnDefinition Width=\"*\" />\r\n                    </Grid.ColumnDefinitions>\r\n                    <Grid>\r\n                        <Grid.Resources>\r\n                            <CollectionViewSource x:Key=\"cvs\"\r\n                                                  IsLiveGroupingRequested=\"True\"\r\n                                                  Source=\"{Binding Selected.Pages}\">\r\n                                <CollectionViewSource.GroupDescriptions>\r\n                                    <PropertyGroupDescription PropertyName=\"GroupName\" />\r\n                                </CollectionViewSource.GroupDescriptions>\r\n                            </CollectionViewSource>\r\n                        </Grid.Resources>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"16\" />\r\n                            <RowDefinition Height=\"48\" />\r\n                            <RowDefinition Height=\"48\" />\r\n                            <RowDefinition Height=\"48\" />\r\n                            <RowDefinition Height=\"*\" />\r\n                        </Grid.RowDefinitions>\r\n                        <Button Grid.Row=\"1\"\r\n                                HorizontalAlignment=\"Stretch\"\r\n                                HorizontalContentAlignment=\"Stretch\"\r\n                                AutomationProperties.Name=\"{x:Static resx:Resources.HomeButtonText}\"\r\n                                Command=\"{Binding GoHome}\"\r\n                                Style=\"{StaticResource InvisibleButtonStyle}\">\r\n                            <Button.Content>\r\n                                <Grid>\r\n                                    <Grid.ColumnDefinitions>\r\n                                        <ColumnDefinition Width=\"Auto\" />\r\n                                        <ColumnDefinition Width=\"*\" />\r\n                                    </Grid.ColumnDefinitions>\r\n                                    <TextBlock Margin=\"16,0,4,0\"\r\n                                               FontSize=\"16\"\r\n                                               Text=\"&#xE10F;\">\r\n                                        <TextBlock.Style>\r\n                                            <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                                                <Style.Triggers>\r\n                                                    <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                                    </DataTrigger>\r\n                                                </Style.Triggers>\r\n                                            </Style>\r\n                                        </TextBlock.Style>\r\n                                    </TextBlock>\r\n                                    <TextBlock Grid.Column=\"1\"\r\n                                               HorizontalAlignment=\"Left\"\r\n                                               VerticalAlignment=\"Center\"\r\n                                               FontSize=\"15\"\r\n                                               Text=\"{x:Static resx:Resources.HomeButtonText}\">\r\n                                        <TextBlock.Style>\r\n                                            <Style BasedOn=\"{StaticResource BodyText}\" TargetType=\"TextBlock\">\r\n                                                <Style.Triggers>\r\n                                                    <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Button}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                                        <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                                    </DataTrigger>\r\n                                                </Style.Triggers>\r\n                                            </Style>\r\n                                        </TextBlock.Style>\r\n                                    </TextBlock>\r\n                                </Grid>\r\n                            </Button.Content>\r\n                        </Button>\r\n                        <ComboBox Grid.Row=\"2\"\r\n                                  Height=\"32\"\r\n                                  Margin=\"16,2,16,0\"\r\n                                  VerticalContentAlignment=\"Center\"\r\n                                  b:ComboBoxEx.SearchItemsSource=\"{Binding}\" />\r\n                        <Grid Grid.Row=\"3\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"*\" />\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                            </Grid.ColumnDefinitions>\r\n                            <TextBlock Margin=\"16,0,0,0\"\r\n                                       FontSize=\"15\"\r\n                                       FontWeight=\"Bold\"\r\n                                       Text=\"{Binding Selected.Title}\" />\r\n                            <ItemsControl Grid.Column=\"1\"\r\n                                          IsTabStop=\"False\"\r\n                                          ItemsSource=\"{Binding Selected.Toolbar}\">\r\n                                <ItemsControl.ItemsPanel>\r\n                                    <ItemsPanelTemplate>\r\n                                        <StackPanel Orientation=\"Horizontal\" />\r\n                                    </ItemsPanelTemplate>\r\n                                </ItemsControl.ItemsPanel>\r\n                                <ItemsControl.ItemTemplate>\r\n                                    <DataTemplate DataType=\"{x:Type vm:ToolbarItemViewModel}\">\r\n                                        <Button VerticalAlignment=\"Center\"\r\n                                                HorizontalContentAlignment=\"Stretch\"\r\n                                                AutomationProperties.Name=\"{Binding DisplayName}\"\r\n                                                BorderThickness=\"0\"\r\n                                                Command=\"{Binding Command}\"\r\n                                                Style=\"{StaticResource ToolbarButtonStyle}\"\r\n                                                ToolTipService.ToolTip=\"{Binding DisplayName}\">\r\n                                            <TextBlock FontSize=\"{Binding GlyphFontSize}\"\r\n                                                       Style=\"{StaticResource GlyphTextBlockStyle}\"\r\n                                                       Text=\"{Binding Glyph}\" />\r\n                                        </Button>\r\n                                    </DataTemplate>\r\n                                </ItemsControl.ItemTemplate>\r\n                            </ItemsControl>\r\n                        </Grid>\r\n                        <ListView Grid.Row=\"4\"\r\n                                  IsSynchronizedWithCurrentItem=\"True\"\r\n                                  ItemsSource=\"{Binding Source={StaticResource cvs}}\"\r\n                                  ScrollViewer.CanContentScroll=\"False\"\r\n                                  SelectedItem=\"{Binding Selected.Selected, Mode=TwoWay}\"\r\n                                  Style=\"{StaticResource SettingsListView}\">\r\n                            <ListView.ItemTemplate>\r\n                                <DataTemplate>\r\n                                    <Grid>\r\n                                        <Grid.ColumnDefinitions>\r\n                                            <ColumnDefinition Width=\"4\" />\r\n                                            <ColumnDefinition Width=\"30\" />\r\n                                            <ColumnDefinition Width=\"*\" />\r\n                                        </Grid.ColumnDefinitions>\r\n                                        <Border x:Name=\"selectedIndicator\"\r\n                                                Width=\"4\"\r\n                                                Height=\"24\">\r\n                                            <Border.Style>\r\n                                                <Style TargetType=\"Border\">\r\n                                                    <Setter Property=\"Theme:Brush.Background\" Value=\"Transparent\" />\r\n                                                    <Style.Triggers>\r\n                                                        <DataTrigger Binding=\"{Binding IsSelected}\" Value=\"True\">\r\n                                                            <Setter Property=\"Theme:Brush.Background\" Value=\"SystemAccent\" />\r\n                                                        </DataTrigger>\r\n                                                    </Style.Triggers>\r\n                                                </Style>\r\n                                            </Border.Style>\r\n                                        </Border>\r\n                                        <TextBlock Grid.Column=\"1\"\r\n                                                   HorizontalAlignment=\"Center\"\r\n                                                   FontSize=\"16\"\r\n                                                   Text=\"{Binding Glyph}\">\r\n                                            <TextBlock.Style>\r\n                                                <Style BasedOn=\"{StaticResource GlyphTextBlockStyle}\" TargetType=\"TextBlock\">\r\n                                                    <Style.Triggers>\r\n                                                        <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                                            <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                                        </DataTrigger>\r\n                                                    </Style.Triggers>\r\n                                                </Style>\r\n                                            </TextBlock.Style>\r\n                                        </TextBlock>\r\n                                        <TextBlock Grid.Column=\"2\"\r\n                                                   Margin=\"4,0,12,0\"\r\n                                                   FontSize=\"15\"\r\n                                                   Text=\"{Binding Title}\">\r\n                                            <TextBlock.Style>\r\n                                                <Style TargetType=\"TextBlock\">\r\n                                                    <Style.Triggers>\r\n                                                        <DataTrigger Binding=\"{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsMouseOver}\" Value=\"True\">\r\n                                                            <Setter Property=\"Theme:Brush.Foreground\" Value=\"Theme=Text, HighContrast=HighlightText\" />\r\n                                                        </DataTrigger>\r\n                                                    </Style.Triggers>\r\n                                                </Style>\r\n                                            </TextBlock.Style>\r\n                                        </TextBlock>\r\n                                    </Grid>\r\n                                </DataTemplate>\r\n                            </ListView.ItemTemplate>\r\n                            <ListView.GroupStyle>\r\n                                <GroupStyle>\r\n                                    <GroupStyle.HeaderTemplate>\r\n                                        <DataTemplate>\r\n                                            <TextBlock Margin=\"16,12,0,6\"\r\n                                                       Theme:Brush.Foreground=\"GrayText\"\r\n                                                       FontSize=\"15\"\r\n                                                       Text=\"{Binding Name}\">\r\n                                                <TextBlock.Style>\r\n                                                    <Style TargetType=\"TextBlock\">\r\n                                                        <Style.Triggers>\r\n                                                            <DataTrigger Binding=\"{Binding Name}\" Value=\"{x:Null}\">\r\n                                                                <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                                            </DataTrigger>\r\n                                                        </Style.Triggers>\r\n                                                    </Style>\r\n                                                </TextBlock.Style>\r\n                                            </TextBlock>\r\n                                        </DataTemplate>\r\n                                    </GroupStyle.HeaderTemplate>\r\n                                </GroupStyle>\r\n                            </ListView.GroupStyle>\r\n                        </ListView>\r\n                    </Grid>\r\n                    <Border Grid.Column=\"1\" Theme:Brush.BorderBrush=\"Theme=Transparent, HighContrast=Text\">\r\n                        <Border.Style>\r\n                            <Style TargetType=\"Border\">\r\n                                <Style.Triggers>\r\n                                    <DataTrigger Binding=\"{Binding Source={StaticResource ThemeManager}, Path=IsHighContrast}\" Value=\"True\">\r\n                                        <Setter Property=\"BorderThickness\" Value=\"1,0,0,0\" />\r\n                                    </DataTrigger>\r\n                                </Style.Triggers>\r\n                            </Style>\r\n                        </Border.Style>\r\n\r\n                        <Grid>\r\n                            <Grid.RowDefinitions>\r\n                                <RowDefinition Height=\"Auto\" />\r\n                                <RowDefinition Height=\"*\" />\r\n                            </Grid.RowDefinitions>\r\n                            <ContentControl Content=\"{Binding Selected.Selected.Header}\" IsTabStop=\"False\" />\r\n                            <ScrollViewer Grid.Row=\"1\"\r\n                                          b:ScrollViewerEx.ScrollToTopOnChanged=\"{Binding Selected.Selected}\"\r\n                                          HorizontalScrollBarVisibility=\"Disabled\"\r\n                                          VerticalScrollBarVisibility=\"Auto\">\r\n                                <ContentControl Margin=\"12,0,0,0\"\r\n                                                Content=\"{Binding Selected.Selected}\"\r\n                                                FocusVisualStyle=\"{x:Null}\"\r\n                                                Focusable=\"False\"\r\n                                                IsTabStop=\"False\" />\r\n                            </ScrollViewer>\r\n                        </Grid>\r\n                    </Border>\r\n                </Grid>\r\n                <!--  Dialog  -->\r\n                <Grid>\r\n                    <Grid.Style>\r\n                        <Style TargetType=\"Grid\">\r\n                            <Style.Triggers>\r\n                                <DataTrigger Binding=\"{Binding Dialog}\" Value=\"{x:Null}\">\r\n                                    <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n                                </DataTrigger>\r\n                            </Style.Triggers>\r\n                        </Style>\r\n                    </Grid.Style>\r\n                    <Grid Background=\"LightGray\" Opacity=\"0.5\" />\r\n                    <Border MinWidth=\"300\"\r\n                            HorizontalAlignment=\"Center\"\r\n                            VerticalAlignment=\"Center\"\r\n                            Theme:Brush.BorderBrush=\"SystemAccent\"\r\n                            BorderThickness=\"1\">\r\n                        <Grid Theme:Brush.Background=\"Background\">\r\n                            <Grid Margin=\"12\" KeyboardNavigation.TabNavigation=\"Cycle\">\r\n                                <Grid.RowDefinitions>\r\n                                    <RowDefinition Height=\"*\" />\r\n                                    <RowDefinition Height=\"Auto\" />\r\n                                </Grid.RowDefinitions>\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                </Grid.ColumnDefinitions>\r\n                                <StackPanel Grid.ColumnSpan=\"2\" Orientation=\"Vertical\">\r\n                                    <TextBlock Margin=\"12,12,12,0\"\r\n                                               Style=\"{StaticResource HeadingText}\"\r\n                                               Text=\"{Binding Dialog.Title}\" />\r\n                                    <TextBlock Margin=\"12,12,12,24\"\r\n                                               Style=\"{StaticResource BodyText}\"\r\n                                               Text=\"{Binding Dialog.Description}\" />\r\n                                </StackPanel>\r\n                                <Button Grid.Row=\"1\"\r\n                                        Margin=\"12,12,2,12\"\r\n                                        HorizontalAlignment=\"Stretch\"\r\n                                        Theme:Brush.Background=\"SystemAccent\"\r\n                                        Theme:Brush.Foreground=\"Light=ApplicationTextDarkTheme, Dark=Text\"\r\n                                        Command=\"{Binding Dialog.Button1Command}\"\r\n                                        Content=\"{Binding Dialog.Button1Text}\" />\r\n                                <Button Grid.Row=\"1\"\r\n                                        Grid.Column=\"1\"\r\n                                        Margin=\"2,12,12,12\"\r\n                                        HorizontalAlignment=\"Stretch\"\r\n                                        Command=\"{Binding Dialog.Button2Command}\"\r\n                                        Content=\"{Binding Dialog.Button2Text}\" />\r\n                            </Grid>\r\n                        </Grid>\r\n                    </Border>\r\n                </Grid>\r\n            </Grid>\r\n        </DockPanel>\r\n    </Grid>\r\n</Window>\r\n"
  },
  {
    "path": "EarTrumpet/UI/Views/SettingsWindow.xaml.cs",
    "content": "﻿using EarTrumpet.Extensions;\r\nusing EarTrumpet.Interop;\r\nusing EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.Windows;\r\nusing System.Windows.Interop;\r\n\r\nnamespace EarTrumpet.UI.Views\r\n{\r\n    public partial class SettingsWindow : Window\r\n    {\r\n        public SettingsWindow()\r\n        {\r\n            Trace.WriteLine(\"SettingsWindow .ctor\");\r\n            Closed += (_, __) => Trace.WriteLine(\"SettingsWindow Closed\");\r\n\r\n            InitializeComponent();\r\n\r\n            SourceInitialized += (sender, __) =>\r\n            {\r\n                this.Cloak();\r\n                this.EnableRoundedCornersIfApplicable();\r\n\r\n                if (App.Settings.SettingsWindowPlacement != null)\r\n                {\r\n                    User32.SetWindowPlacement(new WindowInteropHelper((Window)sender).Handle, App.Settings.SettingsWindowPlacement.Value);\r\n                }\r\n            };\r\n\r\n            StateChanged += OnWindowStateChanged;\r\n\r\n            Closing += (sender, __) =>\r\n            {\r\n                if (User32.GetWindowPlacement(new WindowInteropHelper((Window)sender).Handle, out var placement))\r\n                {\r\n                    App.Settings.SettingsWindowPlacement = placement;\r\n                }\r\n            };\r\n        }\r\n\r\n        private void OnWindowStateChanged(object sender, EventArgs e)\r\n        {\r\n            var chrome = System.Windows.Shell.WindowChrome.GetWindowChrome(this);\r\n            chrome.ResizeBorderThickness = WindowState == WindowState.Maximized ? new Thickness(0) : SystemParameters.WindowResizeBorderThickness;\r\n\r\n            if (WindowState == WindowState.Maximized)\r\n            {\r\n                WindowSizeHelper.RestrictMaximizedSizeToWorkArea(this);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<packages>\r\n  <package id=\"Bugsnag\" version=\"2.2.0\" targetFramework=\"net462\" />\r\n  <package id=\"Bugsnag.ConfigurationSection\" version=\"2.2.0\" targetFramework=\"net462\" />\r\n  <package id=\"GitVersionTask\" version=\"5.5.1\" targetFramework=\"net462\" developmentDependency=\"true\" />\r\n  <package id=\"Newtonsoft.Json\" version=\"13.0.2\" targetFramework=\"net462\" />\r\n  <package id=\"XamlAnimatedGif\" version=\"2.1.0\" targetFramework=\"net462\" />\r\n</packages>"
  },
  {
    "path": "EarTrumpet/prebuild.ps1",
    "content": "﻿param($version)\r\n\r\n$PackageManifestPath = \"$PSScriptRoot\\..\\EarTrumpet.Package\\Package.appxmanifest\"\r\n\r\n$xml = [xml](Get-Content \"$PackageManifestPath\")\r\n$xml.Package.Identity.Version = \"$version\"\r\n$xml.Save(\"$PackageManifestPath\")\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/App.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<configuration>\r\n    <startup> \r\n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.2\"/>\r\n    </startup>\r\n</configuration>\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/App.xaml",
    "content": "﻿<Application x:Class=\"EarTrumpet.ColorTool.App\"\r\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n             xmlns:local=\"clr-namespace:EarTrumpet.ColorTool\"\r\n             StartupUri=\"MainWindow.xaml\">\r\n    <Application.Resources />\r\n</Application>\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/App.xaml.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace EarTrumpet.ColorTool\r\n{\r\n    public partial class App : Application\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/ColorItemViewModel.cs",
    "content": "﻿using System.Windows.Media;\r\n\r\nnamespace EarTrumpet.ColorTool\r\n{\r\n    public class ColorItemViewModel\r\n    {\r\n        public ColorItemViewModel() { }\r\n\r\n        public string Name { get; set; }\r\n        public string Opacity { get; set; }\r\n        public SolidColorBrush Color { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/ColorViewModel.cs",
    "content": "﻿using EarTrumpet.Interop.Helpers;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Windows;\r\nusing System.Windows.Controls;\r\nusing System.Windows.Media;\r\n\r\nnamespace EarTrumpet.ColorTool\r\n{\r\n    public class ColorViewModel : BindableBase\r\n    {\r\n        public IEnumerable<ColorItemViewModel> Colors { get; private set; }\r\n\r\n        public ColorViewModel()\r\n        {\r\n            Refresh();\r\n        }\r\n\r\n        public void OnTextChanged(object sender, TextChangedEventArgs e)\r\n        {\r\n            Refresh(((TextBox)sender).Text);\r\n        }\r\n\r\n        public void Refresh(string search = null)\r\n        {\r\n            var colors = new List<ColorItemViewModel>();\r\n\r\n            if (SystemParameters.HighContrast)\r\n            {\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ActiveBorderBrush, Name = \"ActiveBorderBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ActiveCaptionBrush, Name = \"ActiveCaptionBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.AppWorkspaceBrush, Name = \"AppWorkspaceBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlBrush, Name = \"ControlBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlDarkBrush, Name = \"ControlDarkBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlDarkDarkBrush, Name = \"ControlDarkDarkBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlLightBrush, Name = \"ControlLightBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlLightLightBrush, Name = \"ControlLightLightBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ControlTextBrush, Name = \"ControlTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.DesktopBrush, Name = \"DesktopBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.GradientActiveCaptionBrush, Name = \"GradientActiveCaptionBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.GradientInactiveCaptionBrush, Name = \"GradientInactiveCaptionBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.GrayTextBrush, Name = \"GrayTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.HighlightBrush, Name = \"HighlightBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.HighlightTextBrush, Name = \"HighlightTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.HotTrackBrush, Name = \"HotTrackBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InactiveBorderBrush, Name = \"InactiveBorderBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InactiveCaptionBrush, Name = \"InactiveCaptionBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InactiveSelectionHighlightBrush, Name = \"InactiveSelectionHighlightBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InactiveSelectionHighlightTextBrush, Name = \"InactiveSelectionHighlightTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InfoBrush, Name = \"InfoBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.InfoTextBrush, Name = \"InfoTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.MenuBarBrush, Name = \"MenuBarBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.MenuBrush, Name = \"MenuBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.MenuHighlightBrush, Name = \"MenuHighlightBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.MenuTextBrush, Name = \"MenuTextBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.ScrollBarBrush, Name = \"ScrollBarBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.WindowBrush, Name = \"WindowBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.WindowFrameBrush, Name = \"WindowFrameBrush\" });\r\n                colors.Add(new ColorItemViewModel { Color = SystemColors.WindowTextBrush, Name = \"WindowTextBrush\" });\r\n            }\r\n            else\r\n            {\r\n                foreach (var c in ImmersiveSystemColors.GetList().OrderBy(d => d.Key))\r\n                {\r\n                    if (!string.IsNullOrWhiteSpace(search))\r\n                    {\r\n                        if (!c.Key.ToLower().Contains(search.ToLower())) continue;\r\n                    }\r\n\r\n                    // Exclude junk UI-specific colors that are stale anyway.\r\n                    if (c.Key.Contains(\"Boot\")) continue;\r\n                    if (c.Key.Contains(\"Start\")) continue;\r\n                    if (c.Key.Contains(\"Hardware\")) continue;\r\n                    if (c.Key.Contains(\"Files\")) continue;\r\n                    if (c.Key.Contains(\"Multitasking\")) continue;\r\n\r\n                    var color = c.Value;\r\n                    // color.A = 255; // Very misleading to render on white otherwise!\r\n                    colors.Add(new ColorItemViewModel { Color = new SolidColorBrush(color), Opacity = $\"{Math.Round(((float)color.A / 255) * 100, 0)}%\", Name = c.Key });\r\n                }\r\n            }\r\n\r\n            Colors = colors;\r\n            RaisePropertyChanged(nameof(Colors));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/EarTrumpet.ColorTool.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\r\n    <ProjectGuid>{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}</ProjectGuid>\r\n    <OutputType>WinExe</OutputType>\r\n    <RootNamespace>EarTrumpet.ColorTool</RootNamespace>\r\n    <AssemblyName>EarTrumpet.ColorTool</AssemblyName>\r\n    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>\r\n    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <FileAlignment>512</FileAlignment>\r\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <WarningLevel>4</WarningLevel>\r\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\r\n    <TargetFrameworkProfile />\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>..\\Build\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\r\n    <DebugType>full</DebugType>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\r\n    <OutputPath>..\\Build\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <DebugType>pdbonly</DebugType>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Reference Include=\"System\" />\r\n    <Reference Include=\"System.Data\" />\r\n    <Reference Include=\"System.Xml\" />\r\n    <Reference Include=\"Microsoft.CSharp\" />\r\n    <Reference Include=\"System.Core\" />\r\n    <Reference Include=\"System.Xml.Linq\" />\r\n    <Reference Include=\"System.Xaml\">\r\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\r\n    </Reference>\r\n    <Reference Include=\"WindowsBase\" />\r\n    <Reference Include=\"PresentationCore\" />\r\n    <Reference Include=\"PresentationFramework\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ApplicationDefinition Include=\"App.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </ApplicationDefinition>\r\n    <Page Include=\"MainWindow.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Compile Include=\"App.xaml.cs\">\r\n      <DependentUpon>App.xaml</DependentUpon>\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n    <Compile Include=\"ColorItemViewModel.cs\" />\r\n    <Compile Include=\"ColorViewModel.cs\" />\r\n    <Compile Include=\"MainWindow.xaml.cs\">\r\n      <DependentUpon>MainWindow.xaml</DependentUpon>\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\r\n      <SubType>Code</SubType>\r\n    </Compile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"App.config\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\EarTrumpet\\EarTrumpet.csproj\">\r\n      <Project>{ba3c7b42-84b0-468c-8640-217e2a24cf81}</Project>\r\n      <Name>EarTrumpet</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\r\n</Project>"
  },
  {
    "path": "EarTrumpet.ColorTool/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"EarTrumpet.ColorTool.MainWindow\"\r\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n        xmlns:Event=\"clr-namespace:EarTrumpet.Extensions.EventBinding;assembly=EarTrumpet\"\r\n        xmlns:local=\"clr-namespace:EarTrumpet.ColorTool\"\r\n        Title=\"Color Viewer\"\r\n        Width=\"800\"\r\n        Height=\"450\"\r\n        WindowStartupLocation=\"CenterScreen\">\r\n    <Window.DataContext>\r\n        <local:ColorViewModel />\r\n    </Window.DataContext>\r\n    <Grid>\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"Auto\" />\r\n            <RowDefinition Height=\"*\" />\r\n        </Grid.RowDefinitions>\r\n        <TextBox TextChanged=\"{Event:Binding OnTextChanged}\" />\r\n        <ListView Grid.Row=\"1\" ItemsSource=\"{Binding Colors}\">\r\n            <ListView.ItemTemplate>\r\n                <DataTemplate DataType=\"local:ColorItemViewModel\">\r\n                    <StackPanel Height=\"14\" Orientation=\"Horizontal\">\r\n                        <TextBlock Width=\"30\"\r\n                                   VerticalAlignment=\"Center\"\r\n                                   Text=\"{Binding Opacity}\" />\r\n                        <Border Width=\"40\"\r\n                                Height=\"14\"\r\n                                Background=\"{Binding Color}\" />\r\n                        <TextBlock VerticalAlignment=\"Center\" Text=\"{Binding Name}\" />\r\n                    </StackPanel>\r\n                </DataTemplate>\r\n            </ListView.ItemTemplate>\r\n        </ListView>\r\n    </Grid>\r\n</Window>\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/MainWindow.xaml.cs",
    "content": "﻿using System.Windows;\r\n\r\nnamespace EarTrumpet.ColorTool\r\n{\r\n    public partial class MainWindow : Window\r\n    {\r\n        public MainWindow()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "EarTrumpet.ColorTool/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\r\nusing System.Runtime.InteropServices;\r\nusing System.Windows;\r\n\r\n[assembly: AssemblyTitle(\"EarTrumpet.ColorTool\")]\r\n[assembly: AssemblyDescription(\"\")]\r\n[assembly: AssemblyConfiguration(\"\")]\r\n[assembly: AssemblyCompany(\"\")]\r\n[assembly: AssemblyProduct(\"EarTrumpet.ColorTool\")]\r\n[assembly: AssemblyCopyright(\"\")]\r\n[assembly: AssemblyTrademark(\"\")]\r\n[assembly: AssemblyCulture(\"\")]\r\n[assembly: ComVisible(false)]\r\n[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]\r\n[assembly: AssemblyVersion(\"0.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"0.0.0.0\")]\r\n"
  },
  {
    "path": "EarTrumpet.Package/EarTrumpet.Package.wapproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Condition=\"'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'\">\r\n    <VisualStudioVersion>15.0</VisualStudioVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|x86\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x86</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x86\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x86</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <WapProjPath Condition=\"'$(WapProjPath)'==''\">$(MSBuildExtensionsPath)\\Microsoft\\DesktopBridge\\</WapProjPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.props\" />\r\n  <PropertyGroup>\r\n    <ProjectGuid>ea5510ed-f014-4587-a505-64c59d5b2627</ProjectGuid>\r\n    <TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>\r\n    <TargetPlatformMinVersion>10.0.14393.0</TargetPlatformMinVersion>\r\n    <DefaultLanguage>en-US</DefaultLanguage>\r\n    <PackageCertificateKeyFile>EarTrumpet.Package_StoreKey.pfx</PackageCertificateKeyFile>\r\n    <EntryPointProjectUniqueName>..\\EarTrumpet\\EarTrumpet.csproj</EntryPointProjectUniqueName>\r\n    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>\r\n    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>\r\n    <AppxBundlePlatforms>x86</AppxBundlePlatforms>\r\n    <AppInstallerUpdateFrequency>1</AppInstallerUpdateFrequency>\r\n    <AppInstallerCheckForUpdateFrequency>OnApplicationRun</AppInstallerCheckForUpdateFrequency>\r\n    <AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>\r\n    <PackageCertificateThumbprint>3E10717CB4915430F2920FECAC4F20570137B9FC</PackageCertificateThumbprint>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x86'\">\r\n    <AppxBundle>Always</AppxBundle>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x86'\">\r\n    <AppxBundle>Always</AppxBundle>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <AppxManifest Include=\"Package.appxmanifest\">\r\n      <SubType>Designer</SubType>\r\n    </AppxManifest>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\EarTrumpet\\EarTrumpet.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"EarTrumpet.Package_StoreKey.pfx\" />\r\n    <None Include=\"Package.xml\" />\r\n    <None Include=\"Package.StoreAssociation.xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Assets\\LargeTile.scale-100.png\" />\r\n    <Content Include=\"Assets\\LargeTile.scale-125.png\" />\r\n    <Content Include=\"Assets\\LargeTile.scale-150.png\" />\r\n    <Content Include=\"Assets\\LargeTile.scale-200.png\" />\r\n    <Content Include=\"Assets\\LargeTile.scale-400.png\" />\r\n    <Content Include=\"Assets\\SmallTile.scale-100.png\" />\r\n    <Content Include=\"Assets\\SmallTile.scale-125.png\" />\r\n    <Content Include=\"Assets\\SmallTile.scale-150.png\" />\r\n    <Content Include=\"Assets\\SmallTile.scale-200.png\" />\r\n    <Content Include=\"Assets\\SmallTile.scale-400.png\" />\r\n    <Content Include=\"Assets\\SplashScreen.scale-100.png\" />\r\n    <Content Include=\"Assets\\SplashScreen.scale-125.png\" />\r\n    <Content Include=\"Assets\\SplashScreen.scale-150.png\" />\r\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\r\n    <Content Include=\"Assets\\SplashScreen.scale-400.png\" />\r\n    <Content Include=\"Assets\\Square150x150Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Square150x150Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Square150x150Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Square150x150Logo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.altform-unplated_targetsize-16.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.altform-unplated_targetsize-24.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.altform-unplated_targetsize-256.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.altform-unplated_targetsize-32.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.altform-unplated_targetsize-48.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-16.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-256.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-32.png\" />\r\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-48.png\" />\r\n    <Content Include=\"Assets\\StoreLogo.scale-100.png\" />\r\n    <Content Include=\"Assets\\StoreLogo.scale-125.png\" />\r\n    <Content Include=\"Assets\\StoreLogo.scale-150.png\" />\r\n    <Content Include=\"Assets\\StoreLogo.scale-200.png\" />\r\n    <Content Include=\"Assets\\StoreLogo.scale-400.png\" />\r\n    <Content Include=\"Assets\\welcome.gif\" />\r\n    <Content Include=\"Assets\\Wide310x150Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Wide310x150Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Wide310x150Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Wide310x150Logo.scale-400.png\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.targets\" />\r\n</Project>"
  },
  {
    "path": "EarTrumpet.Package/Package.StoreAssociation.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<StoreAssociation xmlns=\"http://schemas.microsoft.com/appx/2010/storeassociation\">\r\n  <Publisher>CN=6099D0EF-9374-47ED-BDFE-A82136831235</Publisher>\r\n  <PublisherDisplayName>File-New-Project</PublisherDisplayName>\r\n  <DeveloperAccountType>MSA</DeveloperAccountType>\r\n  <GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>\r\n  <SupportedLocales>\r\n    <Language Code=\"af\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"af-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"am\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"am-et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ae\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-bh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-dz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-eg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-iq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-jo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-kw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-lb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ly\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ma\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-om\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-qa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-sa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-sy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-tn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ye\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"as\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"as-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-arab-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-cyrl-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-latn-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"be-by\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bg-bg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn-bd\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-cyrl-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-latn-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca-es-valencia\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-cher\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-cher-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cs-cz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cy-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"da\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"da-dk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-at\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-de\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-li\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"el\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"el-gr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-011\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-014\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-018\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-021\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-029\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-053\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-au\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-bz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ie\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-jm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-kz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-my\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-nz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ph\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-tt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-vn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-zw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-019\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-419\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ar\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-bo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-cl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-co\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-cr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-do\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ec\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-gt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-hn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-mx\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ni\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pe\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-py\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-sv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-uy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ve\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"et-ee\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"eu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"eu-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fa-ir\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fi-fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil-ph\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-011\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-015\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-021\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-029\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-155\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-cd\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ci\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-cm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-fr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ht\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ma\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-mc\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ml\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-re\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"frc-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"frp-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ga\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ga-ie\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gd-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gd-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gl-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gu-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha-latn-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"he\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"he-il\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hi-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr-hr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hu-hu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hy-am\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"id-id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ig-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ig-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"is\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"is-is\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it-it\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-cans\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-latn-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ja\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ja-jp\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ka\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ka-ge\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kk-kz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"km\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"km-kh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kn-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ko\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ko-kr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kok\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kok-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ku-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ku-arab-iq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ky-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ky-kg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lb-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lo-la\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lt-lt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lv-lv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi-nz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mk-mk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ml\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ml-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-mn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-mong\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-phag\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mr-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms-bn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms-my\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mt-mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nb-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ne\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ne-np\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl-be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl-nl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nn-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"no-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nso\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nso-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"or\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"or-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-arab-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-deva\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pl-pl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs-af\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt-br\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt-pt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quc-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"qut-gt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"qut-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-bo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-ec\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-pe\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ro\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ro-ro\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ru-ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"rw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"rw-rw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-arab-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-deva\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"si\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"si-lk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sk-sk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sl-si\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sq-al\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-me\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-rs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-me\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-rs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv-fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv-se\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sw-ke\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ta\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ta-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"te\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"te-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-cyrl-tj\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"th\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"th-th\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ti\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ti-et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-cyrl-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-latn-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-tm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn-bw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tr-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uk-ua\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ur\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ur-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-latn-uz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"vi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"vi-vn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"wo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"wo-sn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"xh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"xh-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"yo-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"yo-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-mo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-tw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-mo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-tw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zu-za\" InMinimumRequirementSet=\"true\" />\r\n  </SupportedLocales>\r\n  <ProductReservedInfo>\r\n    <MainPackageIdentityName>40459File-New-Project.EarTrumpet</MainPackageIdentityName>\r\n    <ReservedNames>\r\n      <ReservedName>EarTrumpet</ReservedName>\r\n    </ReservedNames>\r\n  </ProductReservedInfo>\r\n  <AccountPackageIdentityNames />\r\n  <PackageInfoList LandingUrl=\"https://developer.microsoft.com/dashboard/Application?appId=9NBLGGH516XP\" />\r\n</StoreAssociation>"
  },
  {
    "path": "EarTrumpet.Package/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\" xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\" xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\" xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\" xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\" IgnorableNamespaces=\"uap mp rescap desktop\">\r\n  <Identity Name=\"40459File-New-Project.EarTrumpet\" ProcessorArchitecture=\"x86\" Publisher=\"CN=6099D0EF-9374-47ED-BDFE-A82136831235\" Version=\"2.1.8.173\" />\r\n  <Properties>\r\n    <DisplayName>EarTrumpet</DisplayName>\r\n    <PublisherDisplayName>File-New-Project</PublisherDisplayName>\r\n    <Logo>Assets\\StoreLogo.png</Logo>\r\n  </Properties>\r\n  <Dependencies>\r\n    <TargetDeviceFamily Name=\"Windows.Desktop\" MinVersion=\"10.0.14393.0\" MaxVersionTested=\"10.0.14393.0\" />\r\n    <PackageDependency Name=\"Microsoft.VCLibs.140.00\" MinVersion=\"14.0.24123.0\" Publisher=\"CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US\" />\r\n  </Dependencies>\r\n  <Resources>\r\n    <Resource Language=\"x-generate\" />\r\n  </Resources>\r\n  <Applications>\r\n    <Application Id=\"EarTrumpet\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"$targetentrypoint$\">\r\n      <uap:VisualElements DisplayName=\"EarTrumpet\" Description=\"EarTrumpet\" BackgroundColor=\"transparent\" Square150x150Logo=\"Assets\\Square150x150Logo.png\" Square44x44Logo=\"Assets\\Square44x44Logo.png\">\r\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\" Square71x71Logo=\"Assets\\SmallTile.png\" Square310x310Logo=\"Assets\\LargeTile.png\">\r\n          <uap:ShowNameOnTiles>\r\n            <uap:ShowOn Tile=\"square150x150Logo\" />\r\n            <uap:ShowOn Tile=\"wide310x150Logo\" />\r\n            <uap:ShowOn Tile=\"square310x310Logo\" />\r\n          </uap:ShowNameOnTiles>\r\n        </uap:DefaultTile>\r\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\r\n      </uap:VisualElements>\r\n      <Extensions>\r\n        <desktop:Extension Category=\"windows.startupTask\" Executable=\"EarTrumpet\\EarTrumpet.exe\" EntryPoint=\"Windows.FullTrustApplication\">\r\n          <desktop:StartupTask TaskId=\"EarTrumpet\" Enabled=\"true\" DisplayName=\"EarTrumpet\" />\r\n        </desktop:Extension>\r\n      </Extensions>\r\n    </Application>\r\n  </Applications>\r\n  <Capabilities>\r\n    <rescap:Capability Name=\"runFullTrust\" />\r\n  </Capabilities>\r\n</Package>"
  },
  {
    "path": "EarTrumpet.Package/Package.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<StoreAssociation xmlns=\"http://schemas.microsoft.com/appx/2010/storeassociation\">\r\n  <Publisher>CN=6099D0EF-9374-47ED-BDFE-A82136831235</Publisher>\r\n  <PublisherDisplayName>File-New-Project</PublisherDisplayName>\r\n  <DeveloperAccountType>MSA</DeveloperAccountType>\r\n  <GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>\r\n  <SupportedLocales>\r\n    <Language Code=\"af\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"af-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"am\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"am-et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ae\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-bh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-dz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-eg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-iq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-jo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-kw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-lb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ly\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ma\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-om\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-qa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-sa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-sy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-tn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ar-ye\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"as\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"as-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-arab-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-cyrl-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"az-latn-az\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"be-by\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bg-bg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn-bd\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bn-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-cyrl-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"bs-latn-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ca-es-valencia\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-cher\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-cher-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"chr-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cs-cz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"cy-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"da\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"da-dk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-at\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-de\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-li\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"de-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"el\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"el-gr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-011\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-014\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-018\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-021\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-029\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-053\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-au\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-bz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ie\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-jm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-kz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-my\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-nz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-ph\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-tt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-vn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"en-zw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-019\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-419\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ar\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-bo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-cl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-co\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-cr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-do\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ec\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-gt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-hn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-mx\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ni\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pe\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-pr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-py\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-sv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-us\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-uy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"es-ve\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"et-ee\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"eu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"eu-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fa-ir\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fi-fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fil-ph\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-011\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-015\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-021\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-029\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-155\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-cd\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ci\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-cm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-fr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ht\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ma\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-mc\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-ml\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"fr-re\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"frc-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"frp-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ga\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ga-ie\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gd-gb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gd-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gl-es\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"gu-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ha-latn-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"he\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"he-il\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hi-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hr-hr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hu-hu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hy\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"hy-am\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"id-id\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ig-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ig-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"is\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"is-is\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it-ch\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"it-it\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-cans\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"iu-latn-ca\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ja\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ja-jp\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ka\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ka-ge\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kk-kz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"km\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"km-kh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kn-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ko\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ko-kr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kok\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"kok-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ku-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ku-arab-iq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ky-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ky-kg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lb-lu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lo-la\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lt-lt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"lv-lv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mi-nz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mk-mk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ml\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ml-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-mn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-mong\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mn-phag\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mr-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms-bn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ms-my\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"mt-mt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nb\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nb-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ne\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ne-np\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl-be\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nl-nl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nn-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"no-no\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nso\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"nso-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"or\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"or-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-arab-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-deva\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pa-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pl-pl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs-af\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"prs-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt-br\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"pt-pt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quc-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"qut-gt\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"qut-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-bo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-ec\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"quz-pe\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ro\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ro-ro\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ru-ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"rw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"rw-rw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-arab-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sd-deva\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"si\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"si-lk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sk-sk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sl-si\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sq\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sq-al\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-me\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-cyrl-rs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-ba\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-cs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-me\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sr-latn-rs\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv-fi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sv-se\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"sw-ke\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ta\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ta-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"te\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"te-in\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-cyrl-tj\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tg-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"th\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"th-th\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ti\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ti-et\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-cyrl-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-latn-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tk-tm\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn-bw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tn-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tr-tr\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"tt-ru\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-arab\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ug-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uk-ua\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ur\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"ur-pk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-cyrl\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"uz-latn-uz\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"vi\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"vi-vn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"wo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"wo-sn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"xh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"xh-za\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"yo-latn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"yo-ng\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans-cn\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hans-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-mo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hant-tw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-hk\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-mo\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-sg\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zh-tw\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zu\" InMinimumRequirementSet=\"true\" />\r\n    <Language Code=\"zu-za\" InMinimumRequirementSet=\"true\" />\r\n  </SupportedLocales>\r\n  <ProductReservedInfo>\r\n    <MainPackageIdentityName>40459File-New-Project.EarTrumpet</MainPackageIdentityName>\r\n    <ReservedNames>\r\n      <ReservedName>EarTrumpet</ReservedName>\r\n      <ReservedName>EarTrumpet - Volume Control for Windows</ReservedName>\r\n    </ReservedNames>\r\n  </ProductReservedInfo>\r\n  <AccountPackageIdentityNames />\r\n  <PackageInfoList LandingUrl=\"https://developer.microsoft.com/dashboard/Application?appId=9NBLGGH516XP\" />\r\n</StoreAssociation>"
  },
  {
    "path": "EarTrumpet.vs15.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.29306.81\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"EarTrumpet\", \"EarTrumpet\\EarTrumpet.csproj\", \"{BA3C7B42-84B0-468C-8640-217E2A24CF81}\"\r\nEndProject\r\nProject(\"{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}\") = \"EarTrumpet.Package\", \"EarTrumpet.Package\\EarTrumpet.Package.wapproj\", \"{EA5510ED-F014-4587-A505-64C59D5B2627}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{8F56ECD6-00C6-4C4A-AB1F-C01ED14EF53B}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\tCHANGELOG.md = CHANGELOG.md\r\n\t\tCOMPILING.md = COMPILING.md\r\n\t\tCONTRIBUTING.md = CONTRIBUTING.md\r\n\t\tGitVersion.yml = GitVersion.yml\r\n\t\tLICENSE = LICENSE\r\n\t\tPRIVACY.md = PRIVACY.md\r\n\t\tREADME.md = README.md\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"EarTrumpet.ColorTool\", \"EarTrumpet.ColorTool\\EarTrumpet.ColorTool.csproj\", \"{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|x86 = Release|x86\r\n\t\tVSDebug|x86 = VSDebug|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.Release|x86.Build.0 = Release|x86\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.VSDebug|x86.ActiveCfg = VSDebug|x86\r\n\t\t{BA3C7B42-84B0-468C-8640-217E2A24CF81}.VSDebug|x86.Build.0 = VSDebug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Debug|x86.Deploy.0 = Debug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Release|x86.Build.0 = Release|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.Release|x86.Deploy.0 = Release|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.VSDebug|x86.ActiveCfg = Debug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.VSDebug|x86.Build.0 = Debug|x86\r\n\t\t{EA5510ED-F014-4587-A505-64C59D5B2627}.VSDebug|x86.Deploy.0 = Debug|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.Release|x86.Build.0 = Release|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.VSDebug|x86.ActiveCfg = Debug|x86\r\n\t\t{E5B2C3B5-4CED-4C82-8A82-D290A7E0FC5D}.VSDebug|x86.Build.0 = Debug|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {228AD06A-DAC2-406B-8F21-3E7B980B1B37}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "GitVersion.yml",
    "content": "assembly-versioning-scheme: MajorMinorPatchTag\r\nbranches:\r\n  feature:\r\n    mode: ContinuousDeployment\r\n    tag: useBranchName\r\n    increment: none\r\n    prevent-increment-of-merged-branch-version: false\r\n    track-merge-target: false\r\n    regex: (feature|experiment){1}[/-]\r\n    source-branches:\r\n      - dev\r\n    tracks-release-branches: false\r\n    is-release-branch: false\r\n    is-mainline: false\r\n  dev:\r\n    mode: ContinuousDeployment\r\n    tag: dev\r\n    increment: none\r\n    prevent-increment-of-merged-branch-version: false\r\n    track-merge-target: true\r\n    regex: dev$\r\n    source-branches:\r\n      - feature\r\n    tracks-release-branches: true\r\n    is-release-branch: false\r\n    is-mainline: false\r\n  master:\r\n    mode: ContinuousDeployment\r\n    tag: ''\r\n    increment: none\r\n    prevent-increment-of-merged-branch-version: true\r\n    track-merge-target: false\r\n    regex: master$\r\n    source-branches:\r\n    - dev\r\n    - release\r\n    tracks-release-branches: false\r\n    is-release-branch: false\r\n    is-mainline: true\r\n  release:\r\n    mode: ContinuousDeployment\r\n    tag: beta\r\n    increment: none\r\n    prevent-increment-of-merged-branch-version: true\r\n    track-merge-target: false\r\n    regex: release{1}[/-]\r\n    source-branches:\r\n    - dev\r\n    - master\r\n    - release\r\n    - feature\r\n    tracks-release-branches: false\r\n    is-release-branch: true\r\n    is-mainline: false"
  },
  {
    "path": "LICENSE",
    "content": "The following legal persons or entities (collectively, the \"Excluded Entities\") are\r\nexpressly excluded from the licensing terms set forth below and, as such, do not\r\nhave the right to reproduce, distribute, or create derivative works from the\r\nsoftware or associated documentation files:\r\n\r\n    Yellow Elephant Productions\r\n    Tidal Media Inc.\r\n    Articent Group LLC\r\n\r\nThe Excluded Entities may not exercise any of the rights granted to other users\r\nunder these licensing terms.\r\n\r\n---\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2015\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n\r\n"
  },
  {
    "path": "PRIVACY.md",
    "content": "# Information Collected And Transmitted By EarTrumpet\r\n\r\nFirst, a reminder: EarTrumpet is provided \"as is\", without warranty of any kind, express or\r\nimplied, including but not limited to the warranties of merchantability,\r\nfitness for a particular purpose and noninfringement.\r\n\r\nWith that out of the way, here's a breakdown of all the information we may [collect](./EarTrumpet/Diagnosis/SnapshotData.cs) **at crash time** via Bugsnag.\r\n\r\n### Application-Level\r\nIncludes:\r\n* Exception information\r\n  * Could, in rare cases, contain paths to applications on your computer\r\n* Version number (e.g. 2.0.x.x)\r\n* App state (e.g. is shutting down)\r\n* App identity present (true/false)\r\n* Time between starting and crashing (e.g. 30 minutes)\r\n* Handle count (e.g. 1002)\r\n* GDI and User object counts (e.g. 900)\r\n\r\n### Operating System-Level\r\nIncludes:\r\n* Architecture (e.g. 32-bit)\r\n* Windows Build (e.g. 17134.1.amd64fre.rs4_release.180410-1804)\r\n* Available processors/cores (e.g. 8 cores)\r\n* .NET Framework Common Language Runtime version (e.g. 4.0.30319.42000)\r\n* Light/Dark mode configuration (light/dark)\r\n* Right-to-Left configuration (on/off)\r\n* Transparency configuration (on/off)\r\n* Accent color configuration (on/off)\r\n* System Animations configuration (on/off)\r\n* High Contrast theme configuration (on/off)\r\n* Language and region (e.g. en-US)\r\n\r\n### Third-Party Policies\r\n\r\n* Bugsnag https://docs.bugsnag.com/legal/privacy-policy/\r\n* Microsoft Store https://docs.microsoft.com/en-us/legal/windows/agreements/store-policies"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ar-SA/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">إيرمتروبيت</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">الصوت</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">متحكم صوتي</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">مستوى الصوت</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">الصوت</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">التحكم</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">الجهاز</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">إيرمتروبيت هو تطبيق قوي للتحكم في الصوت لنظام ويندوز</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">سجل التغييرات الكامل متاح على: https://github.com/File-New-Project/Eartrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">يتحكم في أحجام التطبيقات الكلاسيكية والحديثة</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">يتحكم في جهاز الصوت الافتراضي بنقرتين</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">يطابق مظهر وشعور ويندوز</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">يدعم نقل التطبيقات بين أجهزة التشغيل</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">مدمج مع مركز التعليقات</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/bs-latn-ba/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Zvuk</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mikseta</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Jačina zvuka</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Zvuk</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontrola</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Uređaj</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet je moćna aplikacija za kontrolu zvuka za Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Pun rekord promjena je dostupan na: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Kontrolira glasnoću klasičnih i modernih aplikacija</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Kontrolira zadani audio uređaj sa dva klika</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Harmonizovan s izgledom i osjećajom Windowsa</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Podržava pomjeranje aplikacija između uređaja za reprodukciju</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integriran s Centrom za povratne informacije</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ca-ES/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">So</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mesclador</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volum</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Control</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispositiu</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">L'EarTrumpet és una poderosa aplicació per controlar el volum del Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Registre de canvis complet disponible a: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controla el volum d'aplicacions clàssiques i modernes</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Canvia el dispositiu d'àudio per defecte en dos clics</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Concorda amb l'aparença de Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Permet moure aplicacions entre dispositius de reproducció</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrat amb el Centre d'opinions</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/cs-CZ/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Zvuk</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Směšovač</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Hlasitost</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Zvuk</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Ovládání</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Zařízení</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet je výkonná aplikace pro ovládání hlasitosti pro Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Celý seznam změn je k dispozici na adrese: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Ovládá hlasitost klasických i moderních aplikací</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Ovládá výchozí zvukové zařízení dvěma kliknutími</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Odpovídá vzhledu a stylu Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Podporuje přesun aplikací mezi přehrávacími zařízeními</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrovaná s aplikací Centrum Feedback</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/da-DK/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Lyde</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Lydstyrke</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Lyd</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontrollér</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Enhed</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet er en kraftfuld lydstyrke app til Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Fuld ændringslog tilgængelig på: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Styrer klassiske og moderne app lydstyrker</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Skift standard lydenheden med to klik</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Matcher udseendet og følelsen af Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Understøtter flytning af apps mellem afspilningsenheder</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integreret med Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/de-DE/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Klang</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Lautstärke</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Ton</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Steuerung</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Gerät</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet ist eine leistungsstarke App zur Regelung der Lautstärke in Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Alle Änderungen sind verfügbar auf: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Steuert die Lautstärke von klassischen und modernen Apps</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Steuert das standard Audiogerät mit zwei Klicks</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Entspricht dem Aussehen und der Handhabung von Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Unterstützt das Verschieben von Apps zwischen Wiedergabegeräten</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Feedback Hub integriert</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/el-GR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Ήχος</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Μείκτης</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Ένταση</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Ήχος</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Έλεγχος</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Συσκευή</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">Το EarTrumpet είναι μια πανίσχυρη εφαρμογή ελέγχου έντασης του ήχου για τα Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Πλήρες αρχείο αλλαγών διαθέσιμο στο: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Ελέγχει τις κλασικές και τις σύγχρονους εφαρμογές έντασης ήχου</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Ελέγχει την προεπιλεγμένη συσκευή ήχου με δύο κλικ</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Ταιριάζει με την εμφάνιση και την αίσθηση των Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Υποστηρίζει τη μετακίνηση εφαρμογών μεταξύ συσκευών αναπαραγωγής</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Ενσωματωμένο με Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/en-us/pdp.xml",
    "content": "<ProductDescription\r\n\txmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n  Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Sound</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Control</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Device</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet is a powerful volume control app for Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"></SortTitle>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"></DevStudio>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Full changelog available at: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"></Caption>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets></AdditionalAssets>\r\n  <Trailers></Trailers>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controls classic and modern app volumes</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Controls default audio device with two clicks</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Matches the look and feel of Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Supports moving apps between playback devices</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrated with Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware></RecommendedHardware>\r\n  <MinimumHardware></MinimumHardware>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"></AdditionalLicenseTerms>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"></SupportContactInfo>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"></PrivacyPolicyURL>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/es-ES/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Sonido</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mezclador</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volumen</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Control</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispositivo</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet es una poderosa aplicación para controlar el volumen en Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Registro de cambios completo disponible en: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controla el volumen de apps clásicas y modernas</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Cambia el dispositivo de audio predeterminado con dos clics</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Coincide con la apariencia de Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Permite mover aplicaciones entre los dispositivos de reproducción</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrado con el Centro de opiniones</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/fr-FR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Son</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mélangeur</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Contrôle</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Périphérique</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet est une application puissante de contrôle de volume pour Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Changelog complet disponible sur : https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Contrôle le volume des applications classiques et modernes</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Contrôle le périphérique audio par défaut en deux clics</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Correspond à l'apparence de Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Supporte le déplacement des applications entre les périphériques de lecture</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Intégré au Hub de Commentaires</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/he-IL/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">חצוצרתאוזן</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">צליל</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">מערבל</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">ווליום</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">שמע</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">שליטה</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">התקן</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet היא תוכנת ווליום עוצמתית לווינדוס</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">רשימת השינויים המלאה זמינה בקישור הבא: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">שולט במערכות ווליום ישנות וחדשות</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">שולט במכשיר ההשמעה ברירת המחדל בשתי לחיצות</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">תואם למראה ולהרגשה של ווינדוס</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">תומך בלהזיז אפליקציות בין מכשירי השמעה</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">אינטגרציה עם Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/hr-HR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Zvuk</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mikser</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Glasnoća</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontrola</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Uređaj</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet je moćna aplikacija za kontrolu glasnoće za Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Pun zapis promjena dostupan je na: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Kontrolira glasnoću klasičnih i modernih aplikacija</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Kontrolira zadani audio uređaj s dva klika</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Usklađen s izgledom i osjećajom Windowsa</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Podržava prebacivanje aplikacije između uređaja za reprodukciju</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integriran s Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/hu-HU/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Hang</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Keverő</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Hangerő</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audió</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Vezérlés</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Eszköz</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">Az EarTrumpet egy erőteljes hangerőszabályzó alkalmazás a Windowsra</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Teljes váltózási napló elérhető a következő címen: https://github.com/FileNewProject/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">A klasszikus és a modern alkalmazások hangját is vezérli</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Két kattintással vezérli az alapértelmezett audioeszközt</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Megfelel a Windows megjelenésének</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Támogatja az alkalmazások mozgatását a lejátszó eszközök között</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrálva a Feedback Hubbal</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/it-IT/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Suono</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Controllo</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispositivo</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet è una potente applicazione per il controllo del volume di Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">La lista dei cambiamenti completa disponibile all'indirizzo: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controllare il volume delle app classiche e moderne</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Permette di impostare il dispositivo audio predefinito in due click</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Corrisponde all'aspetto e allo stile di Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Supporta lo spostamento delle app tra i dispositivi di riproduzione</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrata con Hub di Feedback</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ja-JP/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">サウンド</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">ミキサー</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">音量</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">オーディオ</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">制御</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">デバイス</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet は使いやすい音量制御アプリ、Windows 用です</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">完全な更新履歴はこちら: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">標準またはモダンなアプリの音量を制御</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">2回クリックで既定のオーディオデバイスを制御</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Windows の外観・使用感に調和</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">再生デバイス間でのアプリの移動に対応</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">フィードバック Hub を統合</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ko-KR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">이어트럼펫</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">소리</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">믹서</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">볼륨</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">오디오</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">제어</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">장치</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet 은 Windows를 위한 강력한 볼륨 컨트롤 앱입니다.</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">모든 변경 사항은 https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md 에서 확인할 수 있습니다.</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">클래식 및 모던 앱 볼륨 조절</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">두 번 클릭만으로 기본 소리 장치 설정</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Windows의 모양과 일치하는 UI</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">재생 장치 간 앱 이동 지원</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">피드백 허브 통합</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/nl-NL/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Geluid</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Beheer</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Apparaat</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet is een krachtige volumebeheer app voor Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Volledige changelog beschikbaar op: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Regelt klassieke en moderne app volumes</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Bepaalt standaard audioapparaat met twee muisklikken</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Komt overeen met het uiterlijk van Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Ondersteunt bewegende apps tussen afspeelapparaten</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Geïntegreerd met de Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/no-NO/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Lyd</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mikser</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volum</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Lyd</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontroll</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Enhet</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet er en kraftfull volumkontroll app for Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Full endringslogg tilgjengelig på: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Kontroller klassiske og moderne appvolumer</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Kontrollerer standard lydenhet med to klikk</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Matcher med utseendet til Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Støtter flytting av apper mellom avspillingsenheter</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrert med Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/pl-PL/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Dźwięk</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mikser</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Głośność</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontrola</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Urządzenie</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet jest potężną aplikacją do kontroli głośności dla Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Pełna lista zmian dostępna pod adresem: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Kontroluje głośność klasycznych i nowoczesnych aplikacji</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Kontroluje domyślne urządzenie audio za pomocą dwóch kliknięć</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Dopasowuje się do wyglądu systemu Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Wspiera przenoszenie aplikacji pomiędzy urządzeniami do odtwarzania</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Zintegrowany z Centrum Opinii</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/pt-BR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Som</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixador</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Áudio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Controle</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispositivo</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet é um poderoso aplicativo de controle de volume para Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">O changelog completo disponível em: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controla os volumes de aplicativos clássicos e modernos</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Controla o dispositivo de áudio padrão com dois cliques</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Corresponde à aparência do Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Suporta alterar saída dos aplicativos entre os dispositivos de saída de áudio</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrado com Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/pt-PT/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Som</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Misturador</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volume</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Áudio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Controlo</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispositivo</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">O EarTrumpet é uma poderosa aplicação de controlo de volume para Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">O registo de alterações completo está disponível em: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controla os volumes de aplicações clássicas e modernas</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Altera o dispositivo de áudio predefinido com dois cliques</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">A sua apresentação e navegação assemelha-se à do Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Permite mover aplicações entre os dispositivos de reprodução</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrado com Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ro-RO/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Sunet</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volum</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Audio</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Control</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Dispozitiv</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet este o aplicație puternică de control al volumului pentru Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Changelog complet disponibil la: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Controlează volumul în aplicațiile clasice și moderne</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Controlează dispozitivul audio implicit cu două click-uri</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Potrivește aspectul și senzația din Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Suportă migrarea aplicațiilor între dispozitive de redare</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrat cu Platforma de feedback</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/ru-RU/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Звук</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Микшер</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Громкость</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Аудио</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Управление</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Устройство</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet - это мощное приложение для управления громкостью для Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Полный список изменений доступен здесь: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Управляет громкостью классических и современных приложений</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Управляет аудио устройством по-умолчанию в два клика</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Соответствует внешнему виду Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Поддерживает перемещение приложений между устройствами воспроизведения</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Интегрирован с центром отзывов Windows 10</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/sl-SI/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Zvok</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mikser</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Glasnost</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Zvok</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Upravljanje</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Naprava</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet je zmogljiva aplikacija za nadzor glasnosti za Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Celoten seznam posodobitev je na voljo na: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Klasični in sodobni upravitelj glasnosti</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Upravljanje privzete zvočne naprave z dvema klikoma</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Ujema se z videzom in občutkom operacijskega sistema Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Podpira premikanje aplikacij med napravami za predvajanje</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrirano s centrom za povratne informacije</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/sv-SE/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Ljud</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Mixer</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Volym</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Ljud</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontroll</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Enhet</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet är en kraftfull volymkontroll-app för Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Fullständig ändringslogg tillgänglig på: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Kontrollerar klassiska och moderna appvolymer</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Kontrollerar standardljudenheten med två klick</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Matchar utseendet och känslan av Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Stöder att flytta appar mellan uppspelningsenheter</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Integrerad med Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/th-TH/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">เสียง</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">มิกซ์เซอร์</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">ระดับเสียง</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">เสียง</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">ควบคุม</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">อุปกรณ์</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet เป็นแอปควบคุมเสียงที่สรงพลังสำหรับวินโดว์</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">เปิดบันทึกการเปลี่ยนแปลงแบบเต็มได้ที่: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">ควบคุมเสียงขแงแอปเก่าและใหม่</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">ควบคุมอุปกณณ์เสียงค่าเริ่มต้นด้วยสองคลิก</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">รูปและสัมผัสตรงกับของวินโดว์</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">สนับสนุนย้ายแอปผ่านแต่ละอุปกรณ์เล่นกลับ</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">เชื่อมต่อกับคำติชม (Feedback Hub)</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/tr-TR/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Ses</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Karıştırıcı</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Ses</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Ses</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Kontrol</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Aygıt</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet Windows için güçlü bir ses kontrol uygulamasıdır</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Tüm değişim kaydı şu adreste mevcut: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Klasik ve modern uygulama seslerini kontrol eder</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">İki tıklama ile varsayılan ses aygıtını kontrol eder</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Görsel ve kullanım olarak Windows'a denk</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Uygulamalara, kayıttan yürütme aygıtları arasında geçiş yaptırmayı destekler</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Geri Bildirim Merkezi ile bütünleştirildi</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/uk-UA/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Звук</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Мікшер</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Гучність</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Звук</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Управління</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Пристрій</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet є потужним додатком управління гучністю для Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Повний журнал змін доступний за адресою: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Керування гучністю програм</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Керує типовим аудіо пристроєм за допомогою двох натискань</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Збігається з стилем Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Можливість вказати пристрій відтворення для кожного застосунку</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Інтегрований з Feedback Hub</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/vi-VN/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">Âm thanh</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">Bộ chỉnh âm</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">Âm lượng</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">Âm thanh</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">Điều khiển</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">Thiết bị</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet là ứng dụng chỉnh âm thanh mạnh mẽ cho Windows</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">Bản ghi các thay đổi đầy đủ có sẵn tại: https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">Điều khiển âm thanh từ ứng dụng cũ và mới</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">Điều khiển thiết bị âm thanh chỉ với 2 cú click chuột</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">Khớp với giao diện của Windows</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">Hỗ trợ chuyển ứng dụng giữa các thiết bị phát lại</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">Tích hợp với Hub phản hồi</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/zh-CN/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">声音</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">音量合成器</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">音量</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">音频</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">控制</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">设备</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet 是一款功能强大的 Windows 音量控制应用</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">完整更新日志：https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">控制经典和现代应用的音量</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">两次点击就能修改默认音频设备</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">与 Windows 的外观风格相适应</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">支持切换应用的播放设备</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">与反馈中心集成</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/PDPs/zh-TW/pdp.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<ProductDescription xmlns=\"http://schemas.microsoft.com/appx/2012/ProductDescription\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Release=\"\" language=\"en-us\" xml:lang=\"en-us\">\r\n  <AppStoreName _locID=\"App_AppStoreName\">\r\n  </AppStoreName>\r\n  <Keywords>\r\n    <Keyword _locID=\"App_keyword1\">EarTrumpet</Keyword>\r\n    <Keyword _locID=\"App_keyword2\">聲音</Keyword>\r\n    <Keyword _locID=\"App_keyword3\">混音器</Keyword>\r\n    <Keyword _locID=\"App_keyword4\">音量</Keyword>\r\n    <Keyword _locID=\"App_keyword5\">音訊</Keyword>\r\n    <Keyword _locID=\"App_keyword6\">控制</Keyword>\r\n    <Keyword _locID=\"App_keyword7\">裝置</Keyword>\r\n  </Keywords>\r\n  <Description _locID=\"App_Description\">EarTrumpet 是一套功能強大的 Windows 音量控制程式</Description>\r\n  <ShortDescription _locID=\"App_ShortDescription\">\r\n  </ShortDescription>\r\n  <ShortTitle _locID=\"App_ShortTitle\">EarTrumpet</ShortTitle>\r\n  <SortTitle _locID=\"App_SortTitle\"/>\r\n  <VoiceTitle _locID=\"App_VoiceTitle\">Ear Trumpet</VoiceTitle>\r\n  <DevStudio _locID=\"App_DevStudio\"/>\r\n  <ReleaseNotes _locID=\"App_ReleaseNotes\">完整更新日誌：https://github.com/File-New-Project/EarTrumpet/blob/master/CHANGELOG.md</ReleaseNotes>\r\n  <ScreenshotCaptions>\r\n    <Caption DesktopImage=\"screenshot.png\" _locID=\"App_caption1\"/>\r\n  </ScreenshotCaptions>\r\n  <AdditionalAssets/>\r\n  <Trailers/>\r\n  <AppFeatures>\r\n    <AppFeature _locID=\"App_feature1\">控制經典和現代應用程序的音量</AppFeature>\r\n    <AppFeature _locID=\"App_feature2\">只需點擊兩次，即可切換預設音訊裝置</AppFeature>\r\n    <AppFeature _locID=\"App_feature3\">與 Windows 的外觀風格相適應</AppFeature>\r\n    <AppFeature _locID=\"App_feature4\">可將應用程式於不同播放裝置間移動切換</AppFeature>\r\n    <AppFeature _locID=\"App_feature5\">整合 Windows 意見反應中樞</AppFeature>\r\n  </AppFeatures>\r\n  <RecommendedHardware/>\r\n  <MinimumHardware/>\r\n  <CopyrightAndTrademark _locID=\"App_CopyrightandTrademark\">File-New-Project</CopyrightAndTrademark>\r\n  <AdditionalLicenseTerms _locID=\"App_AdditionalLicenseTerms\"/>\r\n  <WebsiteURL _locID=\"App_WebsiteURL\">https://github.com/File-New-Project/EarTrumpet</WebsiteURL>\r\n  <SupportContactInfo _locID=\"App_SupportContactInfo\"/>\r\n  <PrivacyPolicyURL _locID=\"App_PrivacyURL\"/>\r\n</ProductDescription>\r\n"
  },
  {
    "path": "Packaging/MicrosoftStore/sbconfig.json",
    "content": "{\r\n  \"packageParameters\": {\r\n    \"PDPRootPath\": \"\",\r\n    \"Release\": \"\",\r\n    \"PDPInclude\": [\r\n      \"pdp.xml\"\r\n    ],\r\n    \"PDPExclude\": [],\r\n    \"LanguageExclude\": [\r\n      \"default\"\r\n    ],\r\n    \"ImagesRootPath\": \"\",\r\n    \"MediaFallbackLanguage\": \"\",\r\n    \"AppxPath\": [],\r\n    \"OutPath\": \"\",\r\n    \"OutName\": \"\",\r\n    \"DisableAutoPackageNameFormatting\": false\r\n  },\r\n  \"appSubmission\": {\r\n    \"appId\": \"9NBLGGH516XP\",\r\n    \"targetPublishMode\": \"Immediate\",\r\n    \"targetPublishDate\": \"1601-01-01T00:00:00.0000000Z\",\r\n    \"visibility\": \"Public\",\r\n    \"pricing\": {\r\n      \"priceId\": \"Free\",\r\n      \"trialPeriod\": \"NoFreeTrial\",\r\n      \"marketSpecificPricings\": {},\r\n      \"sales\": []\r\n    },\r\n    \"allowTargetFutureDeviceFamilies\": {\r\n      \"Xbox\": false,\r\n      \"Team\": false,\r\n      \"Holographic\": false,\r\n      \"Desktop\": true,\r\n      \"Mobile\": false\r\n    },\r\n    \"allowMicrosoftDecideAppAvailabilityToFutureDeviceFamilies\": false,\r\n    \"enterpriseLicensing\": \"OnlineAndOffline\",\r\n    \"applicationCategory\": \"UtilitiesAndTools\",\r\n    \"hardwarePreferences\": [],\r\n    \"hasExternalInAppProducts\": false,\r\n    \"meetAccessibilityGuidelines\": false,\r\n    \"canInstallOnRemovableMedia\": true,\r\n    \"automaticBackupEnabled\": true,\r\n    \"isGameDvrEnabled\": false,\r\n    \"gamingOptions\": [\r\n      {\r\n        \"genres\": [],\r\n        \"isLocalMultiplayer\": false,\r\n        \"isLocalCooperative\": false,\r\n        \"isOnlineMultiplayer\": false,\r\n        \"isOnlineCooperative\": false,\r\n        \"localMultiplayerMinPlayers\": 0,\r\n        \"localMultiplayerMaxPlayers\": 0,\r\n        \"localCooperativeMinPlayers\": 0,\r\n        \"localCooperativeMaxPlayers\": 0,\r\n        \"isBroadcastingPrivilegeGranted\": false,\r\n        \"isCrossPlayEnabled\": false,\r\n        \"kinectDataForExternal\": \"Disabled\"\r\n      }\r\n    ],\r\n    \"notesForCertification\": \"When started, there is no UI. Instead, an icon is placed in the notification area (tray) that must be left/right clicked to invoke UI.\"\r\n  }\r\n}"
  },
  {
    "path": "README.md",
    "content": "# EarTrumpet\r\n\r\n[![GitHub issues](https://img.shields.io/github/issues/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/issues) [![GitHub forks](https://img.shields.io/github/forks/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/network) [![GitHub stars](https://img.shields.io/github/stars/File-New-Project/EarTrumpet?style=flat-square)](https://github.com/File-New-Project/EarTrumpet/stargazers) [![Nuget package](https://img.shields.io/chocolatey/v/eartrumpet?style=flat-square)](https://chocolatey.org/packages/eartrumpet) ![Maintenance status](https://img.shields.io/maintenance/yes/2025?style=flat-square)\r\n\r\n![EarTrumpet Screenshot](./Graphics/hero.gif)\r\n\r\n\r\n## Awards\r\n\r\n2022 Winner of the [Microsoft Store Community Choice Awards](https://blogs.windows.com/windowsdeveloper/2022/05/27/announcing-the-microsoft-store-app-awards-winners/#:~:text=open%20platform%20category) (Open Platform)\r\n> Windows is an open platform for innovation. We know that not every customer uses Windows in the same way — some want to modify different parts of the UI or make some features more accessible for them. These are the apps you said turn Windows into your Windows.\r\n\r\n## Media coverage\r\n\r\n> [...] there are alternative solutions like EarTrumpet which are great [...]\r\n>\r\n> &mdash; [Linus Tech Tips (February 12, 2025)](https://youtu.be/6wgHq9NZru0?t=461)\r\n\r\n\r\n> [...] there are third-party solutions out there that do a much better job than what Windows offers by default. One such app is called EarTrumpet [...]\r\n>\r\n> &mdash; [TechQuickie (Jan 11, 2022)](https://www.youtube.com/watch?v=xQvp5HzY9xc)\r\n\r\n> Microsoft's built-in Windows 11 audio management still isn't great. EarTrumpet overhauls it completely, with a system tray utility that gives you volume levels for every app and the ability to set custom inputs and outputs for those apps.\r\n>\r\n> &mdash; [The Verge (Dec 30, 2021)](https://www.theverge.com/22837232/windows-11-pc-best-apps-microsoft-2021)\r\n\r\n> If you want fine-tuned control of your app and system volume, EarTrumpet is a must.\r\n>\r\n> &mdash; [Windows Central (Jun 19, 2018)](https://www.windowscentral.com/eartrumpet-review-best-audio-control-app-windows)\r\n\r\n## Sponsors\r\n\r\n<!-- sponsors --><!-- sponsors -->\r\n\r\n## Features\r\n\r\n* Visualize audio with multi-channel aware peaking\r\n* Standalone volume mixer\r\n* Move apps between playback devices\r\n* Default playback device management\r\n* Automatic updates via the Microsoft Store\r\n* Support for light/dark mode and all accent colors\r\n* Configurable hotkeys\r\n* Modern context menus\r\n* Growing multilingual support\r\n\r\n## Internationalization\r\n\r\nThanks to our translators, we currently support 20+ languages. Are we missing your language? [Contribute a translation via Crowdin](https://crowdin.com/project/eartrumpet)!\r\n\r\n### Translators\r\n\r\n<!-- begin-translators -->\r\n<img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17199622/medium/88a7ddae4f6939b0407c2cb4a1dbd0ab.png\" width=\"60\" alt=\"4tubborn\" title=\"4tubborn\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14872330/medium/d38d40292450e14db39f113194629c0c_default.png\" width=\"60\" alt=\"BlockyTheDev\" title=\"BlockyTheDev\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330267/medium/b159ba7979de040c86a4397a0a2115c6.png\" width=\"60\" alt=\"casungo\" title=\"casungo\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12749175/medium/b95993758d781b934c040afaf0d5416a_default.png\" width=\"60\" alt=\"cmhdream\" title=\"cmhdream\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308340/medium/bad9ca0853fe4d9770b19f99988ad7de_default.png\" width=\"60\" alt=\"cronhan\" title=\"cronhan\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670476/medium/7c2feaab8de1a13a5a45d75cc1b28273_default.png\" width=\"60\" alt=\"CrysoK\" title=\"CrysoK\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13316318/medium/e0c4affb2a9a069c2d1b3cddf968a681.jpg\" width=\"60\" alt=\"Dekamir\" title=\"Dekamir\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15808639/medium/9de31b34118e395637343527bdee44da_default.png\" width=\"60\" alt=\"dkopec91\" title=\"dkopec91\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15970109/medium/ba21a1e47818b358efda3b1713d8ae0a.png\" width=\"60\" alt=\"Drasil\" title=\"Drasil\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17117160/medium/545e0f3d4452eb477e38b5bfba4352f0.png\" width=\"60\" alt=\"drodrigues55\" title=\"drodrigues55\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16628531/medium/0d041ba415436a324f4265a0c37dcdfa.png\" width=\"60\" alt=\"evasive\" title=\"evasive\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308282/medium/cac5243a5f30c5a57f40cf0a54db1122_default.png\" width=\"60\" alt=\"ewerkman\" title=\"ewerkman\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12919147/medium/3ec704edc2b1d72403757fb5bcedc208_default.png\" width=\"60\" alt=\"fashni\" title=\"fashni\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15555685/medium/c26effff6ae343d5972fe8372a40d2d0.png\" width=\"60\" alt=\"FoxyLoon\" title=\"FoxyLoon\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15267142/medium/b2026ac455aebad9dadb28d01a477e3e_default.png\" width=\"60\" alt=\"gbetsis\" title=\"gbetsis\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14309406/medium/994b9ee8f483e039dc65ee5d4efba5b4_default.png\" width=\"60\" alt=\"GoldenTao\" title=\"GoldenTao\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16087014/medium/f7d9ed53665b661827e08b23a2295ff5_default.png\" width=\"60\" alt=\"heerxingen\" title=\"heerxingen\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17224270/medium/0fc754148233c16e7383ffdc13fd6c97_default.png\" width=\"60\" alt=\"hypnotichemionus4\" title=\"hypnotichemionus4\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15783175/medium/7a55d8002ca14dc6f8a4199546c675a6_default.png\" width=\"60\" alt=\"ivoo_\" title=\"ivoo_\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16612717/medium/a28749450c7893af0a742392c37fd359_default.png\" width=\"60\" alt=\"jamilfarajov\" title=\"jamilfarajov\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15097137/medium/8f2d8386e1185d8f302ed914d98c8488.png\" width=\"60\" alt=\"JordyEGNL\" title=\"JordyEGNL\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817870/medium/cb2eb004e1cd51f9e98e7c9436b64eb5_default.png\" width=\"60\" alt=\"jsunyermias\" title=\"jsunyermias\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14630722/medium/1700b0fe117ee7026a6bff2aa37295a9_default.png\" width=\"60\" alt=\"JY3\" title=\"JY3\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12958483/medium/a18d9b484e0d449f3cdc9074ac3d7a0e_default.png\" width=\"60\" alt=\"kutiz\" title=\"kutiz\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15398042/medium/f81c48ee9ae7db632a0e061a47563b3f.png\" width=\"60\" alt=\"Le_Roi_Fromage\" title=\"Le_Roi_Fromage\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14813030/medium/644460ffb131e3d2083c28a75734f5b9_default.png\" width=\"60\" alt=\"luisvalles\" title=\"luisvalles\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14810974/medium/3283d948785c0fb6c983138140b828a8_default.png\" width=\"60\" alt=\"luukverhagen96\" title=\"luukverhagen96\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14677952/medium/c78ed52a3ce400b14f004fc782f9da92_default.png\" width=\"60\" alt=\"merah26\" title=\"merah26\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14642798/medium/aa7b7580bdc12db6d7e34fd1785396ea_default.png\" width=\"60\" alt=\"NazeehYauqoob\" title=\"NazeehYauqoob\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15101593/medium/7ba86a681950eccf6be0e4e368979a7f_default.png\" width=\"60\" alt=\"noseran\" title=\"noseran\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13946509/medium/fb250074d3e8e2ece44a96e1ce7c89f7_default.png\" width=\"60\" alt=\"Orofil\" title=\"Orofil\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14232896/medium/80e76b2ea46645c0a82837f82f841470_default.png\" width=\"60\" alt=\"OsoFugitivo\" title=\"OsoFugitivo\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15374728/medium/9dc09bcf3af4aea89ca137b3f3e196c9_default.png\" width=\"60\" alt=\"poipoi\" title=\"poipoi\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14311344/medium/2b7a3a073dd0b90deea572db691cc734_default.png\" width=\"60\" alt=\"random.001\" title=\"random.001\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13105668/medium/5a07864ec401e977450ada2d1d7f88de_default.png\" width=\"60\" alt=\"Randomname456\" title=\"Randomname456\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17394288/medium/a908cde51b4bf7fee9dad1b2b67c00b1.jpeg\" width=\"60\" alt=\"segewick\" title=\"segewick\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15748955/medium/7626ec8c38a97c05d5da7f6feab1d583_default.png\" width=\"60\" alt=\"siprach\" title=\"siprach\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16833969/medium/c350f5073017d50fc564f244617f347f_default.png\" width=\"60\" alt=\"solomoncyj\" title=\"solomoncyj\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13650547/medium/cf071114cd0cf19477b1a798f8f7ede8_default.png\" width=\"60\" alt=\"Tihsamikah\" title=\"Tihsamikah\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13987341/medium/cee0618ad00c94523b2852b63b6dd9ae_default.png\" width=\"60\" alt=\"TrDy73\" title=\"TrDy73\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14974199/medium/8ebcdd57e6d382411d3c883fe7f6a6a6_default.png\" width=\"60\" alt=\"weyh\" title=\"weyh\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15967701/medium/642f4846085e28561dd2c1925943b3c3_default.png\" width=\"60\" alt=\"Yannick_Whorst\" title=\"Yannick_Whorst\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13143242/medium/bbadb983963fa8490e4226b17a838d30.jpeg\" width=\"60\" alt=\"yinyue200\" title=\"yinyue200\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17156208/medium/a046ed46e4c47b6b552d38e7f45c59ea_default.png\" width=\"60\" alt=\"Zababa\" title=\"Zababa\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/9483/medium/f85c72e3a9f45b60de6c7d9d66534884_default.png\" width=\"60\" alt=\"chreddy\" title=\"chreddy\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12369651/medium/7fe177b1c102dad0579f1dc080abccd0.jpg\" width=\"60\" alt=\"gable\" title=\"gable\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12776255/medium/bc26f83e53902c22a2897526c38bc6ff_default.png\" width=\"60\" alt=\"RazvanS\" title=\"RazvanS\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12339223/medium/d87f31be32da1abf875cccc652c91dd7_default.png\" width=\"60\" alt=\"Taifuuni\" title=\"Taifuuni\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15783935/medium/5f94215ab3295606027f337039073160.jpeg\" width=\"60\" alt=\"140bpmdubstep\" title=\"140bpmdubstep\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15100557/medium/a17422cbc9cc74aff1bc268f3232400e.png\" width=\"60\" alt=\"alpdmrel\" title=\"alpdmrel\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12589411/medium/b5686384ac5c8e849b1f2e961cb0a54e.jpg\" width=\"60\" alt=\"Andrew Poženel\" title=\"Andrew Poženel\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14797892/medium/73cc1c9edba3ec76b93d8a52889751b7_default.png\" width=\"60\" alt=\"Apolônio Serafim\" title=\"Apolônio Serafim\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14665986/medium/83418b2b4bc3985746dcf8067f3cf729.jpeg\" width=\"60\" alt=\"Arcade\" title=\"Arcade\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15238102/medium/7a8ca83aca2acc4f4fa212add6e90a20.jpeg\" width=\"60\" alt=\"Ariel Eytan\" title=\"Ariel Eytan\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14561478/medium/4d3f3b4ff5d03bf3789f59bca14d119b.jpg\" width=\"60\" alt=\"Artan Imeri\" title=\"Artan Imeri\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600943/medium/06fea29b3b10610bc357e78cc8b8a81c.png\" width=\"60\" alt=\"Artem\" title=\"Artem\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13038722/medium/44e66f4b32f8838ac6165e8d5760f701.jpg\" width=\"60\" alt=\"Artem Bazhenov\" title=\"Artem Bazhenov\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13452961/medium/c1816f4fa3773e94fb8f97dbcf8aa030.jpg\" width=\"60\" alt=\"Bazsa\" title=\"Bazsa\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15240128/medium/ad4390b99e497fd08669c8f9aa58a0cd.jpeg\" width=\"60\" alt=\"Berk Kırıkçı\" title=\"Berk Kırıkçı\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16626235/medium/1b681f1e2ff7676ad73d3914cfdeeaab.jpeg\" width=\"60\" alt=\"Cain\" title=\"Cain\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14844934/medium/3e0ce84cd49f71bf1e102c6818b749c3.png\" width=\"60\" alt=\"Carl Oosthuizen\" title=\"Carl Oosthuizen\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15432564/medium/00a99077ebeb85a07c7c0bbbb71c00e9_default.png\" width=\"60\" alt=\"Charles IdB\" title=\"Charles IdB\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14074895/medium/b632b9964d4c4d7c368f2316e1cba408.png\" width=\"60\" alt=\"Corey\" title=\"Corey\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15129337/medium/a5267425bc6d8c0ef636fd99716c50d9.png\" width=\"60\" alt=\"Daan Schroeten\" title=\"Daan Schroeten\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13559595/medium/e7a36cb985b6faac8881c9d987526675.png\" width=\"60\" alt=\"Davin Risy A. H.\" title=\"Davin Risy A. H.\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13266874/medium/baa6126ab777c263dc67ad35bf307962.jpg\" width=\"60\" alt=\"Dimitris Traxiotis\" title=\"Dimitris Traxiotis\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13578856/medium/251c7ade449c995d85a200c81559f5f4.jpg\" width=\"60\" alt=\"Donato\" title=\"Donato\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14310562/medium/ddffb5e514dbe950aed40a1b5de9b9a7.jpg\" width=\"60\" alt=\"duk6046\" title=\"duk6046\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13630281/medium/fb862b5ff55daaac221ddf332736a59a.jpeg\" width=\"60\" alt=\"Dy64\" title=\"Dy64\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15544785/medium/18860b133c4f8af7942eb753e5e5d557.jpeg\" width=\"60\" alt=\"Eduardo Junio\" title=\"Eduardo Junio\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16122704/medium/191ecfb3c4efbf969b2f97afd0c54132.jpeg\" width=\"60\" alt=\"Elias Torstensen\" title=\"Elias Torstensen\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12830604/medium/2a143b2c7cf0203d2a55c16a24b9d21f.jpg\" width=\"60\" alt=\"Emre\" title=\"Emre\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14730934/medium/f863a2ca748957ffbc0ad9108a14cc92.jpg\" width=\"60\" alt=\"EN LYOWH\" title=\"EN LYOWH\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14827072/medium/f8c4e92cdf974b21d4969750bf7734d5.png\" width=\"60\" alt=\"Enes 3078\" title=\"Enes 3078\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14885042/medium/7e91c11908d9caa2fe71e1d88add03d2.png\" width=\"60\" alt=\"Epic gaming chair\" title=\"Epic gaming chair\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16572919/medium/5b0d7c6d7e786dc0f36f12f1a4a568f1.png\" width=\"60\" alt=\"Ettore Bernardi\" title=\"Ettore Bernardi\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14364106/medium/28e1ec673d60ca2b816e35ee3a0b9e6f.png\" width=\"60\" alt=\"ExteriorCloth20\" title=\"ExteriorCloth20\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308338/medium/4bf9aa2f14d9c2885c08621b58c28915.jpeg\" width=\"60\" alt=\"Firefly74940\" title=\"Firefly74940\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308306/medium/7a507059aea640e6f6d3f82447831003.jpeg\" width=\"60\" alt=\"Fred Ahrens\" title=\"Fred Ahrens\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13542306/medium/f83eed4a067b1420e23a93374f8c3201_default.png\" width=\"60\" alt=\"Gabriel Lima\" title=\"Gabriel Lima\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13047529/medium/198ab9def084738aed803ccd4bb513c2.jpg\" width=\"60\" alt=\"Gabriele\" title=\"Gabriele\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16934161/medium/a816fbc665df65a9b785c9734988b860.png\" width=\"60\" alt=\"GiHeong Ro\" title=\"GiHeong Ro\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12416181/medium/2864d29be808543d56f9e210a06ad934.jpg\" width=\"60\" alt=\"Göran\" title=\"Göran\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12974300/medium/32204f326bcb4f96462478242d42e080.JPG\" width=\"60\" alt=\"Guillaume Turchini\" title=\"Guillaume Turchini\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15252782/medium/80a0857613f002c9342677a1e3bc633d.jpeg\" width=\"60\" alt=\"Gustavo Abreu\" title=\"Gustavo Abreu\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17229364/medium/9cb05d83f5c41e8f2356b03dd6b421a0.jpeg\" width=\"60\" alt=\"HibouDev\" title=\"HibouDev\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16423104/medium/17ab422688c11d2f67060a27a04dd4de.jpeg\" width=\"60\" alt=\"Hichem Fantar\" title=\"Hichem Fantar\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14807610/medium/c116d37dacdba89e727a093458cfeed3.png\" width=\"60\" alt=\"hirin-byte\" title=\"hirin-byte\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13460838/medium/16ade1f68cc69048c02bcb4f5a444667.png\" width=\"60\" alt=\"hugoalh\" title=\"hugoalh\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14777148/medium/eacad532662cec7444b39a04b6f8b781.png\" width=\"60\" alt=\"IDAぷろ\" title=\"IDAぷろ\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14028282/medium/325e802fedad904f1260fdfc420ede8e.png\" width=\"60\" alt=\"iGerman00\" title=\"iGerman00\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17327176/medium/30abefc53d1673f09423880581e020cf.png\" width=\"60\" alt=\"Igor Ivić\" title=\"Igor Ivić\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16973688/medium/85ab9a9ee46aa1949acc51cd13c435da.jpeg\" width=\"60\" alt=\"Iman Nemati\" title=\"Iman Nemati\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13811295/medium/9e5c76b6a10754546fc3103073ee3730.png\" width=\"60\" alt=\"iMiKE (Borizzz from XDA)\" title=\"iMiKE (Borizzz from XDA)\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17250634/medium/313891d603fc605d60064bf00d1e071c.jpeg\" width=\"60\" alt=\"Italo King Muñoz\" title=\"Italo King Muñoz\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12813062/medium/98c8a5adc56049856afa66b585626c29.jpg\" width=\"60\" alt=\"Izumi W.\" title=\"Izumi W.\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14632244/medium/1ac43a9aca06f037a3d672b86d295584.jpeg\" width=\"60\" alt=\"Jacek Majda\" title=\"Jacek Majda\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13608356/medium/844af23171d02619cbb27b712adeff63.jpg\" width=\"60\" alt=\"Jaiganėsh Kumaran\" title=\"Jaiganėsh Kumaran\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12842611/medium/ad9fb3254c7f9378c96966000ba38c34.png\" width=\"60\" alt=\"Jaime Muñoz Martín\" title=\"Jaime Muñoz Martín\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14102781/medium/1b7a397ba4b6b75b70d4cd5bff01e805.png\" width=\"60\" alt=\"Jan Formela\" title=\"Jan Formela\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14575810/medium/62411610dc7dcd65c6b70dcce6054a18.png\" width=\"60\" alt=\"Jerem Dlcn\" title=\"Jerem Dlcn\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12346627/medium/15087fbf50ddc9e2927bff8d45227d54.jpg\" width=\"60\" alt=\"Jeroen Maathuis\" title=\"Jeroen Maathuis\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14858992/medium/156ee7e3baf40a3b061ef1a21a6948ea.png\" width=\"60\" alt=\"Jhongt796\" title=\"Jhongt796\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13573718/medium/f6c2b81316684f96734a17d70f57ad5d.jpg\" width=\"60\" alt=\"Jiaa\" title=\"Jiaa\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14699602/medium/515da61679e1065469fafe1dfa1dbb0a.jpeg\" width=\"60\" alt=\"johnyb0y\" title=\"johnyb0y\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14665122/medium/4abd13b512be8b419f1df13784c09d93.jpeg\" width=\"60\" alt=\"Jose Calderon\" title=\"Jose Calderon\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15904135/medium/529077dfebfec80e43eff73cc5f29c38.png\" width=\"60\" alt=\"Jules\" title=\"Jules\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14950449/medium/245040d1111d7e754eae46e3e17b4687.jpeg\" width=\"60\" alt=\"LastRagnarokkr\" title=\"LastRagnarokkr\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12732819/medium/f7c4901e999fc076ac8e081386f22a9a.png\" width=\"60\" alt=\"Leon San José Larsson\" title=\"Leon San José Larsson\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16142300/medium/4e8183bd05ab1054931145d38fa3275e.jpeg\" width=\"60\" alt=\"likegravity\" title=\"likegravity\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14700644/medium/a3afbfe8ebc9b81b1fd4e77fb2f1dd15.jpeg\" width=\"60\" alt=\"Lilian ARAGO\" title=\"Lilian ARAGO\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14165949/medium/6294dfb63294bd57da6208cbf79546de.png\" width=\"60\" alt=\"maboroshin\" title=\"maboroshin\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13541741/medium/98b008c02279ab89bc1be4f8d022dbc5.jpg\" width=\"60\" alt=\"Marco P.\" title=\"Marco P.\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13517065/medium/623fcb5e60d02deb86ef01c00a9a618d.jpg\" width=\"60\" alt=\"Marco te Kortschot\" title=\"Marco te Kortschot\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14191847/medium/41c2768c383d8d2113028c1b0cc9e53f_default.png\" width=\"60\" alt=\"Marian Dolinský\" title=\"Marian Dolinský\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/29290/medium/212cdece08139291e40600ba9f984c33_default.png\" width=\"60\" alt=\"Martijn van B.\" title=\"Martijn van B.\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15826833/medium/3e196c7999fe781f4c69e36aec602157.jpeg\" width=\"60\" alt=\"Mat GMC7\" title=\"Mat GMC7\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12691360/medium/1972915fe8906cc80c37cc3e93c116f0_default.png\" width=\"60\" alt=\"Melcon Moraes\" title=\"Melcon Moraes\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14677180/medium/85d459ce0f5acace6777b8995804b9ed.jpg\" width=\"60\" alt=\"Merloss\" title=\"Merloss\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308274/medium/18f21a28039e5d36454388d150840b19.jpeg\" width=\"60\" alt=\"Miguel Hurtado\" title=\"Miguel Hurtado\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14593474/medium/0ee238ef2b9f6a8b60c1c5090de9e212.jpeg\" width=\"60\" alt=\"Mohammad Shughri\" title=\"Mohammad Shughri\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17265764/medium/e40851765389fce5ec09f3aa95ccc1e3.png\" width=\"60\" alt=\"Mr Mati\" title=\"Mr Mati\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15729861/medium/f64ee22471b56560676856e9237b6e27.jpeg\" width=\"60\" alt=\"muhammad sadq \" title=\"muhammad sadq \" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16984836/medium/3578b6eea59d582f23987b5222256ce8.jpeg\" width=\"60\" alt=\"Nicolas Panico\" title=\"Nicolas Panico\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13856939/medium/fa8d8cedef0ed56ad4d28a37bf19e389.jpeg\" width=\"60\" alt=\"Nikola Perović\" title=\"Nikola Perović\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14735980/medium/ead5bccda5e9f1444871f861cf1465ef.jpeg\" width=\"60\" alt=\"Nil Calderó Vega\" title=\"Nil Calderó Vega\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15386352/medium/7df214fbcaf299a2e03660481c2791d6.png\" width=\"60\" alt=\"Nissan-O\" title=\"Nissan-O\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308858/medium/2824f71dddf2973c4a5b531e44a6e6e5.jpg\" width=\"60\" alt=\"NTAuthority\" title=\"NTAuthority\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12926745/medium/1eac4c9f7271d3ce79cd5d9432604d9a.jpg\" width=\"60\" alt=\"Omar Mostafa\" title=\"Omar Mostafa\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14888044/medium/e97ab716e09e8af9bb21e65f977d9970.png\" width=\"60\" alt=\"Pasvv19\" title=\"Pasvv19\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14964547/medium/b9d000864d028e54d580d26331a1571e.jpeg\" width=\"60\" alt=\"Pavel Bibichenko\" title=\"Pavel Bibichenko\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13773747/medium/17135a456c5980369c313157b4ebe4f8.jpeg\" width=\"60\" alt=\"Peter J. Mello\" title=\"Peter J. Mello\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/2952/medium/ebf0ac39dcaa7069d771310e63bd32dc_default.png\" width=\"60\" alt=\"Peter Pin-guang Chen\" title=\"Peter Pin-guang Chen\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15052449/medium/54e00aaf0028ee0132e5719604e1b1ed.jpeg\" width=\"60\" alt=\"Pol\" title=\"Pol\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13998735/medium/18f97a8233b24aaa697f2f6890acd579.png\" width=\"60\" alt=\"Quartyn Walker\" title=\"Quartyn Walker\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14308154/medium/303307459679a720572e4f315a990e32.png\" width=\"60\" alt=\"Rafael Rivera\" title=\"Rafael Rivera\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12929130/medium/5701b9d8cbe77ff718d46ac481042106.jpg\" width=\"60\" alt=\"Raul Andres del Canto Zahr\" title=\"Raul Andres del Canto Zahr\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15936797/medium/d321629424691404d2744c09af939890.png\" width=\"60\" alt=\"Really Super Otter\" title=\"Really Super Otter\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12522483/medium/87a014f599e0caba500684e96c1d7ee4_default.png\" width=\"60\" alt=\"Rodrigo\" title=\"Rodrigo\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13929217/medium/680fa5433ed52756443b29efb2150f48.jpg\" width=\"60\" alt=\"Rodrigo Garcia Martin\" title=\"Rodrigo Garcia Martin\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13958355/medium/7bee7f23e1c63f2e614a539d2d544357.png\" width=\"60\" alt=\"Roman Matviiv\" title=\"Roman Matviiv\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17502308/medium/842a9e9096b725a3bd75dd696e9304f5.jpeg\" width=\"60\" alt=\"Sándor Papp\" title=\"Sándor Papp\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15209700/medium/b397494f3b30da776097521bd0d42a3b.jpg\" width=\"60\" alt=\"Sebastian Soldat\" title=\"Sebastian Soldat\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13043045/medium/1832032ac5c873fdadc40920b37c1058.jpg\" width=\"60\" alt=\"Shahdan Turung\" title=\"Shahdan Turung\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16466045/medium/8db81342c9b72a258c4d18a508c930ed.jpeg\" width=\"60\" alt=\"Shahin Alam (shahin alam)\" title=\"Shahin Alam (shahin alam)\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17195616/medium/f96120726f6fe0511d9a27bdeae9a9ba.jpeg\" width=\"60\" alt=\"Shizzoid\" title=\"Shizzoid\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17205138/medium/ee2079138dee0e9b61106d4728a4e4f6.png\" width=\"60\" alt=\"ShlomoDev\" title=\"ShlomoDev\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14676966/medium/7d697e0cebba96718d04faceabeaeda4.png\" width=\"60\" alt=\"somni\" title=\"somni\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15919387/medium/c9c27be7d33780909fb770b0dcf74da4.jpeg\" width=\"60\" alt=\"Sophia Sarah\" title=\"Sophia Sarah\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14405616/medium/d4bcf370dceb8161b924c3260e033ea6.png\" width=\"60\" alt=\"Spaanhede\" title=\"Spaanhede\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13851339/medium/a794c857be32c2667344e09b8a74ecbd.jpeg\" width=\"60\" alt=\"Stanislav\" title=\"Stanislav\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14229382/medium/e1fbedc7a13497d4ab2098411bb8d6cb.png\" width=\"60\" alt=\"Steve Y Sus Juegos\" title=\"Steve Y Sus Juegos\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14824284/medium/61217f7dac49cff41ea578d0b449669e.jpeg\" width=\"60\" alt=\"Tci Gravifer Fang\" title=\"Tci Gravifer Fang\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13888473/medium/4ffdd5a168c9f44ad841b16037743e0f.jpg\" width=\"60\" alt=\"Ten tu není\" title=\"Ten tu není\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16975770/medium/6a095d7d8f84159d9a11c5c8bd27493b.png\" width=\"60\" alt=\"th ch\" title=\"th ch\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15346744/medium/9cdd79ccdc195fe4bf80d9fc55c0b392.jpeg\" width=\"60\" alt=\"Thatchai Sintra\" title=\"Thatchai Sintra\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773928/medium/d8dcbd7896ecdf87d6c44b82ebdd7976.png\" width=\"60\" alt=\"Thiago Henrique da Silva\" title=\"Thiago Henrique da Silva\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16899867/medium/76705c7e783ed6488fe8c0a3547d6160.jpeg\" width=\"60\" alt=\"Tungstene\" title=\"Tungstene\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13539607/medium/41693ad9493a7b911749c6cdcbf8d357_default.png\" width=\"60\" alt=\"u!^DEV\" title=\"u!^DEV\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15100993/medium/bcb6ece4c1b5b08d32c1a3c0889b8f6e.jpeg\" width=\"60\" alt=\"Umang Chauhan\" title=\"Umang Chauhan\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16834671/medium/6250c80df72b05d8a61112e3ad1f1d4f.png\" width=\"60\" alt=\"wancoro\" title=\"wancoro\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14679092/medium/589e4b1fec3cf774cbd6f2bad1fba733.jpeg\" width=\"60\" alt=\"WCONTI\" title=\"WCONTI\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14702386/medium/9dcd47d206da5952ead87de3d692b6ec.jpeg\" width=\"60\" alt=\"Wessel Smid\" title=\"Wessel Smid\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13309066/medium/22aba64233b225b1e73b700584f9ada7.jpg\" width=\"60\" alt=\"Yacine Boussoufa\" title=\"Yacine Boussoufa\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13501302/medium/610cf496d138c51448bb14f7ea813ed7.jpeg\" width=\"60\" alt=\"Yaniv Levin\" title=\"Yaniv Levin\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16557429/medium/c8cc9cff2045b6f8655cbc9f62b91997.jpeg\" width=\"60\" alt=\"Yasoga Nanayakkarawasam\" title=\"Yasoga Nanayakkarawasam\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14644782/medium/d78711de956166e30f32330d48db1e90.png\" width=\"60\" alt=\"YifePlayte\" title=\"YifePlayte\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14937273/medium/2c3b8a43cd5f93681a34d4c37a9d3e5f.png\" width=\"60\" alt=\"yrctw\" title=\"yrctw\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/13828709/medium/2d6846dca4f720b6e1ac73ed5bd7e949.jpg\" width=\"60\" alt=\"YuDong\" title=\"YuDong\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12541873/medium/6b3ae953acf0b631623bd293bf87293c.png\" width=\"60\" alt=\"yuna0x0\" title=\"yuna0x0\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/16253718/medium/1bb79c548873635abfd4ff9d43199cd9.jpeg\" width=\"60\" alt=\"Λόρδος Πορτοκάλης\" title=\"Λόρδος Πορτοκάλης\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15238672/medium/7e90a2f77e034e7463b1f1d24eedd645.png\" width=\"60\" alt=\"Вова Смірнов\" title=\"Вова Смірнов\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/17122322/medium/c3c686ded2bedb4bfaf02d5093335d5a.png\" width=\"60\" alt=\"Кирилл Карасёв\" title=\"Кирилл Карасёв\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14750132/medium/909fb18f45c4a69b8227ddbd7a7433e0.png\" width=\"60\" alt=\"Михаил Эпштейн\" title=\"Михаил Эпштейн\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15603175/medium/81923d48d6975b1cdc5f2bc0e084e74e.png\" width=\"60\" alt=\"י. פל.\" title=\"י. פל.\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/12960382/medium/efd52e2c41be32bfd52569ac15d228b7.jpg\" width=\"60\" alt=\"曹恩逢\" title=\"曹恩逢\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/14810144/medium/92b0ea42c77ff3689d6bbd05dbb2c332.png\" width=\"60\" alt=\"王柏崴\" title=\"王柏崴\" /> <img src=\"https://crowdin-static.cf-downloads.crowdin.com/avatar/15424036/medium/3f4163b8afe06a1d8d66807af4b4f783.png\" width=\"60\" alt=\"神枪968\" title=\"神枪968\" />\r\n<!-- end-translators -->\r\n\r\n## Install\r\n\r\nInstall EarTrumpet from the [Microsoft Store](https://www.microsoft.com/store/apps/9nblggh516xp)\r\n\r\nOr via command line using either\r\n- [Windows Package Manager Client (winget)](https://github.com/microsoft/winget-cli) (`winget install File-New-Project.EarTrumpet`)\r\n- Chocolatey (`choco install eartrumpet`)\r\n\r\n## Experimental dev builds\r\n\r\nWant to see what we were working on? Or help us test new features? [Install EarTrumpet from the dev channel.](https://install.eartrumpet.app/dev/EarTrumpet.Package.appinstaller) New builds are released automatically every time we commit to the `dev` branch, keeping you up to date on our progress.\r\n\r\n## Documentation\r\n* [Technical Information](./EarTrumpet/README.md)\r\n* [Compiling EarTrumpet](./COMPILING.md)\r\n* [Contributing to EarTrumpet](./CONTRIBUTING.md)\r\n* [Information Collected And Transmitted By EarTrumpet](./PRIVACY.md)\r\n* [Project License](./LICENSE)\r\n* [Change Log](./CHANGELOG.md)\r\n\r\n## Supported operating systems\r\n- Windows 10 1803 (April 2018 Update)\r\n- Windows 10 1809 (October 2018 Update)\r\n- Windows 10 1903 (May 2019 Update)\r\n- Windows 10 1909 (November 2019 Update)\r\n- Windows 10 2004 (May 2020 Update)\r\n- Windows 10 20H2 (October 2020 Update)\r\n- Windows 10 21H1 (May 2021 Update)\r\n- Windows 10 21H2 (November 2021 Update)\r\n- Windows 10 22H2 (October 2022 Update)\r\n- Windows 11\r\n\r\n## Credits\r\n- David Golden ([@GoldenTao](https://www.twitter.com/GoldenTao))\r\n- Rafael Rivera ([@WithinRafael](https://www.twitter.com/WithinRafael))\r\n- Dave Amenta ([@davux](https://www.twitter.com/davux))\r\n- [Contributors](https://github.com/File-New-Project/EarTrumpet/graphs/contributors)\r\n\r\n## Special thanks\r\n\r\n\"[Horn](https://thenounproject.com/icon/horn-125731/)\" icon by Artjom Korman from [the Noun Project](https://thenounproject.com/)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "crowdin.yml",
    "content": "commit_message: \"l10n: New translations for %original_file_name% (%language%)\"\r\nappend_commit_message: false\r\nfiles:\r\n  - source: EarTrumpet/Properties/Resources.resx\r\n    translation: /EarTrumpet/Properties/Resources.%locale%.resx\r\n  - source: /Packaging/MicrosoftStore/PDPs/en-us/pdp.xml\r\n    translation: /Packaging/MicrosoftStore/PDPs/%locale%/pdp.xml\r\n    content_segmentation: 0\r\n    translatable_elements:\r\n      - /ProductDescription/Keywords/Keyword\r\n      - /ProductDescription/Description\r\n      - /ProductDescription/ReleaseNotes\r\n      - /ProductDescription/AppFeatures/AppFeature\r\n"
  }
]