diff --git a/.github/workflows/build-commerceapi.yml b/.github/workflows/build-commerceapi.yml
new file mode 100644
index 0000000..d38f914
--- /dev/null
+++ b/.github/workflows/build-commerceapi.yml
@@ -0,0 +1,59 @@
+name: Jhoose Commerce API Build
+
+on:
+ push:
+ branches: [ main, release/* ]
+ pull_request:
+ branches: [ main ]
+ workflow_dispatch:
+
+env:
+ BUILD_NO: 1.0.0.${{ github.run_number }}
+ BUILD_NO_PRE: 1.0.0-rc.${{ github.run_number }}
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: |
+ 8.0.x
+ 9.0.x
+ 10.0.x
+
+ - name: Configure Source
+ working-directory: ./src/Jhoose.CommerceApi
+ run: |
+ dotnet nuget add source https://nuget.pkg.github.com/andrewmarkham/index.json --name "GithubBuild" --store-password-in-clear-text --username andrewmarkham --password ${{ secrets.PACKAGE_TOKEN }}
+ dotnet nuget add source https://api.nuget.optimizely.com/v3/index.json --name "Optimizely"
+
+ - name: Restore (nuget.exe)
+ run: dotnet restore Jhoose.CommerceApi.csproj --configfile ../../Nuget.config
+ working-directory: ./src/Jhoose.CommerceApi
+
+ - name: Build (Production)
+ if: github.ref == 'refs/heads/main'
+ run: dotnet build --configuration Release --no-restore -p:Version=${{ env.BUILD_NO }}
+ working-directory: ./src/Jhoose.CommerceApi
+
+ - name: Build (Pre Release)
+ if: github.ref != 'refs/heads/main'
+ run: dotnet build --configuration PreRelease --no-restore -p:Version=${{ env.BUILD_NO_PRE }}
+ working-directory: ./src/Jhoose.CommerceApi
+
+ - name: Run Jhoose.CommerceApi.Tests
+ working-directory: ./src/Jhoose.CommerceApi.Tests
+ run: dotnet test Jhoose.CommerceApi.Tests.csproj --no-restore --configuration Release --logger "trx;LogFileName=test_results.trx"
+
+ - name: nuget push
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release')
+ working-directory: ./src/Jhoose.CommerceApi
+ run: dotnet nuget push "**/Jhoose.CommerceApi*.nupkg" -k ${{ secrets.PACKAGE_TOKEN }} -s https://nuget.pkg.github.com/andrewmarkham/index.json --skip-duplicate
+ env:
+ GITHUB_TOKEN: ${{ secrets.PACKAGE_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/npm-publish-commerce-core.yml b/.github/workflows/npm-publish-commerce-core.yml
deleted file mode 100644
index 728969f..0000000
--- a/.github/workflows/npm-publish-commerce-core.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: Publish jhoose commerce core package
-on:
- workflow_dispatch:
- release:
- types: [published]
-jobs:
- build:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - uses: actions/checkout@v4
-
- # Setup .npmrc file to publish to GitHub Packages
- - uses: actions/setup-node@v4
- with:
- node-version: '20.x'
- registry-url: 'https://npm.pkg.github.com'
- # Defaults to the user or organization that owns the workflow file
- scope: '@jhoose-commerce'
- - run: npm ci
- working-directory: ./src/eCommerce/site/packages/core
- - run: npm publish
- working-directory: ./src/eCommerce/site/packages/core
- env:
- NODE_AUTH_TOKEN: ${{ secrets.npm_access }}
diff --git a/.vs/Foundation/xs/UserPrefs.xml b/.vs/Foundation/xs/UserPrefs.xml
deleted file mode 100644
index 4821614..0000000
--- a/.vs/Foundation/xs/UserPrefs.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.vs/Foundation/xs/project-cache/Foundation-Debug.json b/.vs/Foundation/xs/project-cache/Foundation-Debug.json
deleted file mode 100644
index 1c5001b..0000000
--- a/.vs/Foundation/xs/project-cache/Foundation-Debug.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Format":1,"ProjectReferences":[{"FilePath":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj","Aliases":[],"Framework":null}],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.AdvancedReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.ApprovalReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/lib/net6.0/Advanced.CMS.ExternalReviews.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.core/1.35.0/lib/net6.0/Azure.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.identity/1.10.3/lib/netstandard2.0/Azure.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/baaijte.optimizely.imagesharp.web/2.1.1/lib/net6.0/Baaijte.Optimizely.ImageSharp.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/portable.bouncycastle/1.9.0/lib/netstandard2.0/BouncyCastle.Crypto.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/boxed.aspnetcore.taghelpers/6.0.0/lib/net6.0/Boxed.AspNetCore.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.core/4.4.1/lib/netstandard1.5/Castle.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.windsor/5.1.1/lib/netstandard1.6/Castle.Windsor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.addons.helpers/1.1.0/lib/net6.0/EPiServer.AddOns.Helpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.ApplicationModules.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Business.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.htmlhelpers/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.HtmlHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.mvc/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.routing/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.taghelpers/12.20.2/lib/net6.0/EPiServer.Cms.AspNetCore.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.templating/12.21.2/lib/net6.0/EPiServer.Cms.AspNetCore.Templating.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms/12.28.0/lib/net6.0/EPiServer.CMS.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Cms.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/EPiServer.Cms.TinyMce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/EPiServer.Cms.TinyMce.SpellChecker.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.admin/12.28.0/lib/net6.0/EPiServer.Cms.UI.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.aspnetidentity/12.28.0/lib/net6.0/EPiServer.Cms.UI.AspNetIdentity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.settings/12.28.0/lib/net6.0/EPiServer.Cms.UI.Settings.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.visitorgroups/12.28.0/lib/net6.0/EPiServer.Cms.UI.VisitorGroups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.core/1.3.8/lib/net6.0/EPiServer.Cms.WelcomeIntegration.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.ui/1.3.8/lib/net6.0/EPiServer.Cms.WelcomeIntegration.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Bolt.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce/14.19.0/lib/net6.0/EPiServer.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Internal.Migration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.odp/14.19.0/lib/net6.0/EPiServer.Commerce.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Reporting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/lib/net6.0/EPiServer.Commerce.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.admin/14.19.0/lib/net6.0/EPiServer.Commerce.UI.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.customerservice/14.19.0/lib/net6.0/EPiServer.Commerce.UI.CustomerService.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/lib/net6.0/EPiServer.Commerce.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.cms/3.10.2/lib/net6.0/EPiServer.ContentApi.Cms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.core/3.10.2/lib/net6.0/EPiServer.ContentApi.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.cms/3.10.2/lib/net6.0/EPiServer.ContentApi.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdeliveryapi.search/3.10.2/lib/net6.0/EPiServer.ContentApi.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentdefinitionsapi/3.10.2/lib/net6.0/EPiServer.ContentDefinitionsApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.contentmanagementapi/3.10.2/lib/net6.0/EPiServer.ContentManagementApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Data.Cache.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.Enterprise.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Events.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.Cms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.commerce/12.2.0/lib/net6.0/EPiServer.Find.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find/16.1.0/lib/net6.0/EPiServer.Find.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.framework/16.1.0/lib/net6.0/EPiServer.Find.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.Optimizations.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.framework/16.1.0/lib/net6.0/EPiServer.Find.Statistics.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/lib/net6.0/EPiServer.Find.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.core/5.8.0/lib/net6.0/EPiServer.Forms.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms/5.8.0/lib/net6.0/EPiServer.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.samples/4.2.2/lib/net6.0/EPiServer.Forms.Samples.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.forms.ui/5.8.0/lib/net6.0/EPiServer.Forms.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework.aspnetcore/12.21.2/lib/net6.0/EPiServer.Framework.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.hosting/12.21.2/lib/net6.0/EPiServer.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.ImageLibrary.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.imagelibrary.imagesharp/1.0.0/lib/net6.0/EPiServer.ImageLibrary.ImageSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.labs.blockenhancements/1.2.3/lib/net6.0/EPiServer.Labs.BlockEnhancements.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.labs.languagemanager/5.2.0/lib/net6.0/EPiServer.Labs.LanguageManager.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.21.2/lib/net6.0/EPiServer.Licensing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.21.2/lib/net6.0/EPiServer.LinkAnalyzer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/lib/net6.0/Episerver.Marketing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/lib/net6.0/Episerver.Marketing.Connector.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.automation.forms/3.1.3/lib/net6.0/Episerver.Marketing.Connector.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.kpi/3.1.2/lib/net6.0/EPiServer.Marketing.KPI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.messaging/3.1.2/lib/net6.0/EPIServer.Marketing.Messaging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Dal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/lib/net6.0/EPiServer.Marketing.Testing.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect.ui/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.pdfpreview/2.1.3/lib/net6.0/EPiServer.PdfPreview.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.commerce/4.1.14/lib/net6.0/EPiServer.Personalization.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.common/4.0.3/lib/net6.0/EPiServer.Personalization.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.personalization.maxmindgeolocation/2.3.0/lib/net6.0/EPiServer.Personalization.MaxMindGeolocation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.session/2.1.0/lib/net6.0/EPiServer.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.activitystreams/2.0.2/lib/net6.0/EPiServer.Social.ActivityStreams.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.comments/2.0.2/lib/net6.0/EPiServer.Social.Comments.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common/2.0.2/lib/net6.0/EPiServer.Social.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.common.rest/2.0.2/lib/net6.0/EPiServer.Social.Common.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.framework/2.0.2/lib/net6.0/EPiServer.Social.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.groups/2.0.2/lib/net6.0/EPiServer.Social.Groups.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.moderation/2.0.2/lib/net6.0/EPiServer.Social.Moderation.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Rest.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.social.ratings/2.0.2/lib/net6.0/EPiServer.Social.Ratings.Rest.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.telemetry.ui.core/2.2.1/lib/net6.0/EPiServer.Telemetry.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.tracking.commerce/4.1.14/lib/net6.0/EPiServer.Tracking.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.tracking.core/2.1.0/lib/net6.0/EPiServer.Tracking.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.28.0/lib/net6.0/EPiServer.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/filehelpers/3.5.2/lib/netstandard2.0/FileHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.admin/5.0.8/lib/net6.0/Geta.NotFoundHandler.Admin.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler/5.0.8/lib/net6.0/Geta.NotFoundHandler.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.optimizely/5.0.8/lib/net6.0/Geta.NotFoundHandler.Optimizely.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories/1.1.1/lib/net6.0/Geta.Optimizely.Categories.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories.find/1.1.1/lib/net6.0/Geta.Optimizely.Categories.Find.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.abstractions/4.0.2/lib/netstandard2.0/GraphQL.Client.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.abstractions.websocket/4.0.2/lib/netstandard2.0/GraphQL.Client.Abstractions.Websocket.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client/4.0.2/lib/netstandard2.0/GraphQL.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.client.serializer.newtonsoft/4.0.2/lib/netstandard2.0/GraphQL.Client.Serializer.Newtonsoft.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/graphql.primitives/4.0.2/lib/netstandard2.0/GraphQL.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/j2n/2.0.0-beta-0012/lib/net5.0/J2N.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/jetbrains.annotations/2022.1.0/lib/netstandard2.0/JetBrains.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.analysis.common/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Analysis.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queries/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Queries.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queryparser/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.QueryParser.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.sandbox/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Sandbox.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mailkit/3.0.0/lib/net5.0/MailKit.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/maxmind.db/4.0.0/lib/net6.0/MaxMind.Db.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/maxmind.geoip2/5.1.0/lib/net6.0/MaxMind.GeoIP2.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.BusinessFoundation.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Payment.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Shipping.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Website.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Workflow.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.DataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.MetaDataPlus.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.LuceneSearchProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.SqlDataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Antiforgery.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.BearerToken.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Cookies.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.OAuth.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.Policy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Endpoints.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Connections.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.CookiePolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.Internal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HostFiltering.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Html.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Results.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpLogging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpOverrides.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpsPolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.identity.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.AspNetCore.JsonPatch/6.0.1/lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ApiExplorer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.newtonsoftjson/6.0.1/lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.razor.extensions/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.RazorPages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.odata/8.0.8/lib/net6.0/Microsoft.AspNetCore.OData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.OutputCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.razor.language/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Razor.Language.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RequestDecompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Rewrite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.HttpSys.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IIS.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IISIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.StaticFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebUtilities.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.CSharp/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.Common/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.razor/6.0.0/lib/netstandard2.0/Microsoft.CodeAnalysis.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.data.sqlclient/5.1.4/ref/net6.0/Microsoft.Data.SqlClient.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.abstractions/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.relational/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.sqlserver/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Binder.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Ini.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.KeyPerFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.Extensions.DependencyModel/6.0.0/lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Composite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Embedded.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Physical.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.extensions.http.polly/3.1.13/lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Stores.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.ObjectPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.WebEncoders.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client/4.56.0/lib/net6.0/Microsoft.Identity.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client.extensions.msal/4.56.0/lib/netstandard2.0/Microsoft.Identity.Client.Extensions.Msal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.abstractions/6.24.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.jsonwebtokens/6.24.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.logging/6.24.0/lib/net6.0/Microsoft.IdentityModel.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols/6.24.0/lib/net6.0/Microsoft.IdentityModel.Protocols.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/6.24.0/lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.tokens/6.24.0/lib/net6.0/Microsoft.IdentityModel.Tokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.io.recyclablememorystream/2.2.0/lib/net5.0/Microsoft.IO.RecyclableMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.JSInterop.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Net.Http.Headers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.core/7.9.4/lib/netstandard2.0/Microsoft.OData.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.edm/7.9.4/lib/netstandard2.0/Microsoft.OData.Edm.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.odata.modelbuilder/1.0.8/lib/net6.0/Microsoft.OData.ModelBuilder.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.openapi/1.2.3/lib/netstandard2.0/Microsoft.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.spatial/7.9.4/lib/netstandard2.0/Microsoft.Spatial.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.sqlserver.server/1.0.0/lib/netstandard2.0/Microsoft.SqlServer.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Registry.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.win32.systemevents/6.0.0/lib/net6.0/Microsoft.Win32.SystemEvents.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mimekit/3.0.0/lib/net5.0/MimeKit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/nonfactors.grid.core.mvc6/7.0.2/lib/net6.0/Mvc.Grid.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/newtonsoft.json.bson/1.0.2/lib/netstandard2.0/Newtonsoft.Json.Bson.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Newtonsoft.Json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.abstractions/3.1.1/lib/netstandard2.1/OpenIddict.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.core/3.1.1/lib/net5.0/OpenIddict.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore/3.1.1/lib/net5.0/OpenIddict.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore.models/3.1.1/lib/netstandard2.0/OpenIddict.EntityFrameworkCore.Models.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Server.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.dataprotection/3.0.3/lib/net5.0/OpenIddict.Server.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server/3.0.3/lib/net5.0/OpenIddict.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Validation.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.dataprotection/3.0.3/lib/net5.0/OpenIddict.Validation.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation/3.0.3/lib/net5.0/OpenIddict.Validation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.serverintegration/3.0.3/lib/netstandard2.1/OpenIddict.Validation.ServerIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.systemnethttp/3.0.3/lib/netstandard2.1/OpenIddict.Validation.SystemNetHttp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/optimizely.cmp.client/0.0.2/lib/net6.0/Optimizely.Cmp.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/lib/net6.0/Optimizely.Labs.MarketingAutomationIntegration.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly/7.1.0/lib/netstandard2.0/Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly.extensions.http/3.0.0/lib/netstandard2.0/Polly.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/powell.couponcode/1.0.3/lib/netstandard2.0/Powells.CouponCode.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/powerslice/5.2.0/lib/net6.0/PowerSlice.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/restsharp/107.3.0/lib/net6.0/RestSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/schema.net/11.0.1/lib/net6.0/Schema.NET.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.aspnetcore/6.0.1/lib/net5.0/Serilog.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog/2.12.0/lib/net6.0/Serilog.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.extensions.hosting/5.0.1/lib/netstandard2.1/Serilog.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.extensions.logging/3.1.0/lib/netstandard2.0/Serilog.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.formatting.compact/1.1.0/lib/netstandard2.0/Serilog.Formatting.Compact.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.settings.configuration/3.3.0/lib/netstandard2.0/Serilog.Settings.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.console/4.0.1/lib/net5.0/Serilog.Sinks.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.debug/2.0.0/lib/netstandard2.1/Serilog.Sinks.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/serilog.sinks.file/5.0.0/lib/net5.0/Serilog.Sinks.File.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/sixlabors.imagesharp/2.1.3/lib/netcoreapp3.1/SixLabors.ImageSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/sixlabors.imagesharp.web/2.0.2/lib/netcoreapp3.1/SixLabors.ImageSharp.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/skiasharp/2.80.3/lib/netstandard2.0/SkiaSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Immutable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.configuration.configurationmanager/6.0.1/lib/net6.0/System.Configuration.ConfigurationManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.DataSetExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.drawing.common/6.0.0/lib/net6.0/System.Drawing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Asn1.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Tar.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.identitymodel.tokens.jwt/6.24.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.Brotli.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.io.packaging/6.0.0/lib/net6.0/System.IO.Packaging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipelines.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.linq.async/6.0.1/ref/net6.0/System.Linq.Async.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.memory.data/1.0.2/lib/netstandard2.0/System.Memory.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.HttpListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Mail.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.ServicePoint.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebClient.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.reactive/4.3.2/lib/netstandard2.0/System.Reactive.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.TypeExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Intrinsics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Loader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Cng.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.OpenSsl.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.pkcs/6.0.1/lib/net6.0/System.Security.Cryptography.Pkcs.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.protecteddata/6.0.0/lib/net6.0/System.Security.Cryptography.ProtectedData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.permissions/6.0.0/lib/net6.0/System.Security.Permissions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.servicemodel.syndication/6.0.0/lib/net6.0/System.ServiceModel.Syndication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceProcess.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.CodePages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.threading.accesscontrol/6.0.0/lib/net6.0/System.Threading.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Channels.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Threading.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Dataflow.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.Local.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.HttpUtility.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.windows.extensions/6.0.0/lib/net6.0/System.Windows.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/unrvld.odp.visitorgroups/1.2.0.23/lib/net6.0/UNRVLD.ODP.VisitorGroups.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.detection/5.7.3/lib/net6.0/Wangkanai.Detection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.hosting/0.3.0/lib/net6.0/Wangkanai.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/wangkanai.runtime/1.3.3/lib/net6.0/Wangkanai.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/lib/net6.0/WeCantSpell.Hunspell.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/WindowsBase.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/x.pagedlist/8.4.3/lib/net6.0/X.PagedList.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/AuthorizedApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/CatalogExportController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/ExternalLoginConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Api/PublicApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadCrumbBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlockStyleSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockContentTypeCheckInitialization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ContainerBlock/ContainerBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/DefaultBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FacebookBlock/FacebookBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GoogleMapsBlock/GoogleMapsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthBotBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthChatbotBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchListingComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/PageListBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/ExistsFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/FilterBaseBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/FilterUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/NumericFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/NumericOperatorSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductFilterBlocks/StringFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingSetting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingSettingProperty.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlockSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TextBlock/TextBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TwitterBlock/TwitterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VideoBlock/VideoBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VimeoBlock/VimeoBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/YouTubeBlock/YouTubeBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/BlogCommentsBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogItemPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/BlogTagRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/BlogListPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/BundleController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/BundleViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/DemoGenericBundleViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/GenericBundle.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/GenericBundleViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/CatalogContentControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/CatalogEntryViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProductController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/DynamicProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicVariation/DynamicVariant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/ElevatedRoles.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/EntryViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IEntryViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IProductModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/IProductRecommendations.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/GenericPackage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/GenericPackageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/PackageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/PackageViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/GenericProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/GenericProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductPartialContentComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/ProductViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/ProductTileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/RecommendedProductTileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/FoundationPromotionEngineContentLoader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PriceCalculationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PricingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/ProductService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/PromotionService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Services/QuickOrderService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/VariantViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/GenericVariant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/GenericVariantViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/VariantViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/VariationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/CategoryFoundationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/CategorySearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/StandardCategoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/AddToCartResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/OrderConfirmationMailController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/OrderConfirmationMailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/FoundationPlacedPriceProcessor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/BudgetPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/BudgetPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/CashOnDeliveryPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GenericCreditCardPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GenericCreditCardPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GiftCardPaymentGateway.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/GiftCardPaymentOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/IPaymentService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentModelBinderProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentOptionBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentOptionViewModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payments/PaymentService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/PriceCalculationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/AnonymousPurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/AuthenticatedPurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartItemViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CartViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CheckoutAddressHandling.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/CheckoutService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ConfirmationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ICartService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/IOrdersService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/IShippingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/OrdersService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/PurchaseValidation.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShipmentViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShippingMethodInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Services/ShippingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/CheckoutViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/CheckoutViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/MultiAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/MultiShipmentViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderDiscountViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderSummaryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderSummaryViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/OrganizationOrderPadViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/PaymentMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/PaymentMethodViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/SharedMiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShipmentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShippingMethodInfoModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/ShippingMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UpdateAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UpdateShippingMethodViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ViewModels/UsersOrderPadViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/CollectionPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/CollectionPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/CommunittyPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/CommunityPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/CalendarViewModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/CalendarEventController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/CalendarEventPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Folder/FolderPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Folder/FolderPageUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/DemoUserViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderLogoComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderLogoViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/HeaderViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/IHeaderViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/LargeCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MegaMenuModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MobileHeaderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/MyAccountNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/NavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/OrgNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Header/WishListMiniCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/HomeController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/HomePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/LandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/LandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/ThreeColumnLandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/ThreeColumnLandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/TwoColumnLandingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/TwoColumnLandingPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterActivitiesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterContinentsBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterDistancesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterLocationUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterTemperaturesBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/IFilterBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/LocationItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/LocationListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationsPartialRouting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagsCarouselViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/TagsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagsPartialRouting.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/LoginViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/RegisterAccountViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/UserController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/UserViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrencyController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrencyViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/CurrentMarketViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/LanguageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/LanguageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketsComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/MarketViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/CodingFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/FoundationPdfFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/FoundationPdfFileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaDataAlignmentSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMediaDataViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/MediaController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/StandardFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VectorImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFile.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFileViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/WebImageMediaData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressBookService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressCollectionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/AddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/CountryRegionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/CountryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/IAddressBookService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/NewAddressComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksApiController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/BookmarksViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardCollectionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/CreditCardViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/ICreditCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/GiftCardViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/IdentityControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/MyAccountNavigationViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationControllerBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/OrderConfirmationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/OrderDetailsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/OrderHistoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/OrderHistoryBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/OrderHistoryBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/AccountInformationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/ProfilePageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPasswordViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/MailBasePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordMailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/SubscriptionDetailViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/SubscriptionHistoryViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BAddressViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/B2BNavigationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetingPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/BudgetViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/IBudgetService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/ContactViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/IB2BNavigationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrderOrganizationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/OrdersPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/IOrganizationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/OrganizationService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/OrganizationSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderProductViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/QuickOrderViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/QuickOrderPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/SkuSearchResultModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/SubOrganizationPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UserSearchResultModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/UsersPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/ChangeCartJsonResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartViewModelBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/CartWithValidationIssues.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/DefaultCartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/OrderPadsPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/SharedCartViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishlistController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishListPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/WishListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/NewProductsPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/LocationsSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonItemPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/PersonViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonList.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonListPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/PersonListViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/SectorsSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/CatalogPartialPreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PagePartialPreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PartialViewDisplayChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PreviewController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/PreviewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/RecommendationsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/RecommendationsViewComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetBlockController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/WidgetSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/SalesPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/CategoriesFilterViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/CategoryController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/CategoryPartialComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/GenericNode.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/GenericNodeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ContentSearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FilterOptionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FilterOptionViewModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationCatalogContentEventListener.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationFindConventions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/FoundationSearchProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlock.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchBlockItemsPerRowSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/ProductSearchResultViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchResults.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSortOrder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchPageUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/SearchResultPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SearchViewModelFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/SortOrder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/VariationModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/CollectionSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/LabelSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/LayoutSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/ReferencePageSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/ScriptInjectionSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Settings/SearchSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/BaseInclusionExclusionPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/BlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/DropdownComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/OptionDropdownTagHelper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Money/MoneyComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/ContentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/ColorPickerEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/DisableOpeUIDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/HideContentAreaActionsContainer.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/EditorDescriptor/MoveCategoryEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/FoundationBlockData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/FoundationPageData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/HtmlDownloader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IBlockViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IContentViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/IFoundationContent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/MailService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/AvailablePageTypesSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/BackgroundColorSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/BlockRatioSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/InclusionOrderingSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/MarginSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/PaddingSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/PreviewOptionSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/TeaserSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/SelectionFactories/TemplateListSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageTopPaddingModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/StandardPageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/IStoreService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePageController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StorePageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StoreService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/StoreViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Attributes/OnlyAnonymousAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/AllowDBWriteAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/ContentImageAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/EmailAddressAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedCompareAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedDisplayAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedEmailAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedRegularExpressionAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedRequiredAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/LocalizedStringLengthAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Attributes/MaxElementsAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/BulkUpdateController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/CmsMenuProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ContentLocator.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/CookieService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/AsyncHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/CategorizableExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentAreaItemExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ContentReferenceExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/HtmlHelperExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/IEnumerableExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/PageTypeExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/ServiceConfigurationContextExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/StringExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/UrlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/UrlResolverExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Extensions/XElementExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ISchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/IsInEditModeAccessor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ModelBinders/DecimalModelBinder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/ModelBinders/DecimalModelBinderProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/PagingInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/SelectionItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsRepositoryDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/GlobalSettingsSearchProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsContentTypeAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsFolder.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Settings/SettingsService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/SiteImageUrl.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/TrackingCookieManager.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/ExternalLoginConfirmationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/IUserService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/SiteUser.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Users/UserService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Constant.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/BookmarkModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/CustomerTiers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationAddress.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationBudget.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationContact.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/FoundationOrganization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/IdentityContactResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/CustomerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/FileHelperService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/ICustomerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/IFileHelperService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/ILoyaltyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/Services/LoyaltyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Customer/UserRoles.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/AssetContainerExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/CartExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/CustomerAddressExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/EntityObjectExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/EntryContentBaseExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/IExtendedPropertiesExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/InitializationEngineExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/LineItemExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/MarketExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/OrderGroupExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Extensions/Price.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCard.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardManager.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardManagerController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/GiftCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/GiftCard/IGiftCardService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/BaseInstallStep.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/FoundationConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/IInstallService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/IInstallStep.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallMessage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallProgressMessenger.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/InstallService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddCurrencies.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddCustomers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddMarkets.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddPaymentMethods.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddPromotions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddShippingMethods.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddTaxes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Install/Steps/AddWarehouses.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/DeleteExpiredCouponJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/FoundationCouponFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/FoundationCouponUsage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/IUniqueCouponService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/PromotionCouponsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/PromotionsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/SingleUseCouponController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/UniqueCoupon.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Marketing/UniqueCouponService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/CurrencyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/CurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/EmptyMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/ICurrencyService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/LanguageService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/MarketContentLoader.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Markets/MarketEvent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/BrandSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CatalogSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CurrencySelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/CurrencySelector.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/DiscontinuedProductModeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/ProductStatusSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/SortOrderSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Models/EditorDescriptors/VirtualVariantTypeSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/NavigationAuthorizeAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/ContentInstaller.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/CustomFormsRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/CustomizedRenderingInitialization.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayResolution.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/DisplayResolutionBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FeatureConvention.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FeatureViewLocationExpander.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FoundationContentAreaRenderer.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/FoundationQuickNavigatorItemProvider.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/MobileChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/RazorExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/ViewTemplateModelRegistrator.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Display/WebChannel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/ExternalReviews/ExternalReviewsInit.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumSelectionDescriptionAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/EnumSelectionFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetConfigFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetEnums.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetFilterConfigurationItem.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/FacetFilterConfigurationProperty.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/IFacetConfigFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/IgnoreCollectionEditorDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/PropertyListBase.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/Config/SelectOneEnumAttribute.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetAverageRatingDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetGroupOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetNumericRangeDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetOption.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetRegistry.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetStringDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/FacetStringListDefinition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/IFacetConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/IFacetRegistry.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/ISelectable.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/MultiSelectTermCount.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/RangeFacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/RangeFacetFilterRequestConverter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/SelectableNumericRange.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/SelectableNumericRangeResult.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/TermsFacetFilterRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Facets/TermsFacetFilterRequestConverter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/GeoPosition.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/InitializationEngineExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Find/SearchExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/GroupNames.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ContextHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/Extensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/HtmlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ImageUrlHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/OpenGraphHelpers.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/ViewContextExtension.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Helpers/WebPHelper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/InitializeSite.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/BlobJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/DemoIntegrationJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Jobs/UsersIndexJob.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/DeterminerExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/StringBuilderExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/Extensions/TypeExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphFoundationPageData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphGenericNode.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphGenericProduct.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphHomePage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/OpenGraph/OpenGraphLocationItemPage.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/BlockView.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/CmsTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/CommerceTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/ICommerceTrackingService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/ImageView.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/RecommendationsExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Personalization/TrackingDataFactory.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/CommerceSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/ContentSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/PowerSlices/GeneralSlices.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/BlogItemPageSchemaMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/GenericProductSchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/HomePageSchemaMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/SchemaMarkup/LocationItemPageSchemaDataMapper.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityActivityAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMemberAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMembershipRequestAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/CommunityMembershipWorkflowAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Adapters/ICommunityActivityAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/CommentExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Composites/Review.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Composites/ReviewRating.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/AddMemberRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/GroupExtensionData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/MemberExtensionData.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ExtensionData/MembershipModeration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Initialize.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/IPrincipalExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/MessageViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/CommunityActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/CommunityFeedFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/ICommunityActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageCommentActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageRatingActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageSubscription.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/PageSubscriptionFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/ActivityStreams/ReviewActivity.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/BlogComment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/PageComment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Comments/PageCommentFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/Community.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMember.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMemberFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Groups/CommunityMembershipRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Moderation/CommunityMembershipWorkflow.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Ratings/PageRatingFilter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/Ratings/PageRatingStatistics.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Models/User.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Moderation/ModerationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Moderation/ModerationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/CommunityActivityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/CommunityFeedRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/ICommunityActivityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/ICommunityFeedRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/IPageSubscriptionRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/ActivityStreams/PageSubscriptionRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/BlogCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/IBlogCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/IPageCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Comments/PageCommentRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/IPageRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/IUserRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/PageRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Common/UserRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/CommunityMemberRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/CommunityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/ICommunityMemberRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Groups/ICommunityRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Moderation/CommunityMembershipModerationRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Moderation/ICommunityMembershipModerationRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Ratings/IPageRatingRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Repositories/Ratings/PageRatingRepository.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/CommentManagerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ICommentManagerService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/IReviewActivityService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/IReviewService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ReviewActivityService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ReviewService.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Services/ViewModelAdapter.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/SocialBlockComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/SocialRepositoryException.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityFeedItemViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityMemberViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/CommunityModerationViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/RatingFormViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewStatisticsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewSubmissionViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewsViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/ViewModels/ReviewViewModel.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/TabNames.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Program.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Startup.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/Comment.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/CommentsPaneDescriptor.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Test/CommentsPaneNavigationComponent.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.RazorAssemblyInfo.cs","/Users/andrewmarkham/.nuget/packages/episerver.find.cms/16.1.0/contentFiles/any/any/modules/_protected/Find/Find.zip","/Users/andrewmarkham/.nuget/packages/powerslice/5.2.0/contentFiles/any/any/modules/_protected/PowerSlice/PowerSlice.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.settings/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.Settings/EPiServer.Cms.UI.Settings.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.admin/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.Admin/EPiServer.Cms.UI.Admin.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui/12.28.0/contentFiles/any/any/modules/_protected/CMS/CMS.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui/12.28.0/contentFiles/any/any/modules/_protected/Shell/Shell.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.tinymce/4.7.2/contentFiles/any/any/modules/_protected/EPiServer.Cms.TinyMce/EPiServer.Cms.TinyMce.zip","/Users/andrewmarkham/.nuget/packages/episerver.forms.ui/5.8.0/contentFiles/any/any/modules/_protected/EPiServer.Forms.UI/EPiServer.Forms.UI.zip","/Users/andrewmarkham/.nuget/packages/episerver.forms/5.8.0/contentFiles/any/any/modules/_protected/EPiServer.Forms/EPiServer.Forms.zip","/Users/andrewmarkham/.nuget/packages/episerver.connectformarketingautomation/6.1.4/contentFiles/any/any/modules/_protected/Episerver.Marketing.Connector/Episerver.Marketing.Connector.zip","/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/contentFiles/any/any/Resources/Translations/Optimizely.Labs.MarketingAutomationIntegration.ODP.Forms_EN.xml","/Users/andrewmarkham/.nuget/packages/optimizely.labs.marketingautomationintegration.odp/1.0.2/contentFiles/any/any/Views/Shared/ElementBlocks/ODPListConsentFormBlock.cshtml","/Users/andrewmarkham/.nuget/packages/geta.optimizely.categories/1.1.1/contentFiles/any/any/modules/_protected/Geta.Optimizely.Categories/Geta.Optimizely.Categories.zip","/Users/andrewmarkham/.nuget/packages/geta.notfoundhandler.optimizely/5.0.8/contentFiles/any/any/modules/_protected/Geta.NotFoundHandler.Optimizely/module.config","/Users/andrewmarkham/.nuget/packages/episerver.telemetry.ui/2.2.1/contentFiles/any/any/modules/_protected/episerver-telemetry-ui/episerver-telemetry-ui.zip","/Users/andrewmarkham/.nuget/packages/episerver.pdfpreview/2.1.3/contentFiles/any/any/modules/_protected/EPiServer.PdfPreview/EPiServer.PdfPreview.zip","/Users/andrewmarkham/.nuget/packages/episerver.openidconnect.ui/3.10.2/contentFiles/any/any/modules/_protected/EPiServer.OpenIDConnect.UI/EPiServer.OpenIDConnect.UI.zip","/Users/andrewmarkham/.nuget/packages/episerver.marketing.testing/3.1.2/contentFiles/any/any/modules/_protected/EPiServer.Marketing.Testing/EPiServer.Marketing.Testing.zip","/Users/andrewmarkham/.nuget/packages/episerver.marketing.automation.forms/3.1.3/contentFiles/any/any/Resources/LanguageFiles/Episerver.Marketing.Automation.Forms_EN.xml","/Users/andrewmarkham/.nuget/packages/episerver.labs.languagemanager/5.2.0/contentFiles/any/any/modules/_protected/EPiServer.Labs.LanguageManager/EPiServer.Labs.LanguageManager.zip","/Users/andrewmarkham/.nuget/packages/episerver.labs.blockenhancements/1.2.3/contentFiles/any/any/modules/_protected/episerver-labs-block-enhancements/module.config","/Users/andrewmarkham/.nuget/packages/episerver.forms.samples/4.2.2/contentFiles/any/any/modules/_protected/EPiServer.Forms.Samples/EPiServer.Forms.Samples.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.customerservice/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.UI.CustomerService/EPiServer.Commerce.UI.CustomerService.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui.admin/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.UI.Admin/EPiServer.Commerce.UI.Admin.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/contentFiles/any/any/modules/_protected/Commerce/Commerce.zip","/Users/andrewmarkham/.nuget/packages/episerver.commerce.ui/14.19.0/contentFiles/any/any/modules/_protected/EPiServer.Commerce.Shell/EPiServer.Commerce.Shell.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.visitorgroups/12.28.0/contentFiles/any/any/modules/_protected/EPiServer.Cms.UI.VisitorGroups/EPiServer.Cms.UI.VisitorGroups.zip","/Users/andrewmarkham/.nuget/packages/episerver.cms.welcomeintegration.ui/1.3.8/contentFiles/any/any/modules/_protected/EPiServer.Cms.WelcomeIntegration.UI/EPiServer.Cms.WelcomeIntegration.UI.zip","/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/contentFiles/any/any/modules/_protected/advanced-cms-approval-reviews/advanced-cms-approval-reviews.zip","/Users/andrewmarkham/.nuget/packages/advanced.cms.advancedreviews/1.3.6/contentFiles/any/any/modules/_protected/advanced-cms-external-reviews/advanced-cms-external-reviews.zip","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","None","None","None","None","None","None","None","None","None","None","EmbeddedResource","None","None","None","None","None","None","None","EmbeddedResource","None","None","None","None","None","None","None","None","None","None","None","Compile","Compile","Compile"],"Analyzers":["/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Analyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Web/analyzers/cs/Microsoft.AspNetCore.Mvc.Analyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll","/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/analyzers/dotnet/cs/Lucene.Net.CodeAnalysis.CSharp.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.analyzers/6.0.0/analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Language.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.AspNetCore.Razor.Utilities.Shared.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.ExternalAccess.RazorCompiler.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.CodeAnalysis.Razor.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.Extensions.ObjectPool.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/Microsoft.NET.Sdk.Razor.SourceGenerators.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/System.Collections.Immutable.dll"],"AdditionalFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/AssetsDownloadLinksBlock/AssetsDownloadLinksBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/BreadcrumbBlock/BreadcrumbBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ButtonBlock/ButtonBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CallToActionBlock/CallToActionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CarouselBlock/CarouselBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CategoryBlock/CategoryBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/CommentsBlock/CommentsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ContainerBlock/ContainerBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ElevatedRoleBlock/ElevatedRoleBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FacebookBlock/FacebookBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/FeedBlock/FeedBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GoogleMapsBlock/GoogleMapsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupAdmissionBlock/GroupAdmissionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/GroupCreationBlock/GroupCreationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/Healthbot/HealthChatBotBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/HeroBlock/HeroBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/LikeButtonBlock/LikeButtonBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipAffiliationBlock/MembershipAffiliationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MembershipDisplayBlock/MembershipDisplayBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/MenuItemBlock/MenuItemBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/NavigationBlock/NavigationBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/OrderSearchBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/OrderSearchBlock/_OrderSearchListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/PageListBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_CardTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_GridTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_GridTemplateComponent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_HighlightPanelTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_InsightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_LeftImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_NoImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/PageListBlock/Views/Templates/_TopImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/ProductHeroBlock/ProductHeroBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RatingBlock/RatingBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/RssReaderBlock/RssReaderBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/SubscriptionBlock/SubscriptionBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TeaserBlock/TeaserBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TextBlock/TextBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/TwitterBlock/TwitterBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VideoBlock/VideoBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/VimeoBlock/VimeoBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blocks/YouTubeBlock/YouTubeBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogCommentBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_CardTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_GridTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_GridTemplateComponent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_HighLightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_ImageLeftTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_ImageTopTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_InsightTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/Templates/_NoImageTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/_BlogList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Blog/BlogListPage/Views/_Paging.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/_BundleDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Bundle/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/DynamicCatalogContent/DynamicProduct/_ProductDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/_PackageDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Package/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/_ProductDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Product/_Quickview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/Variation/_VariantDetail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_BuyNow.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_Images.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_ListVariants.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_Rating.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_SocialIconsListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/CatalogContent/_WarningHasSaleCode.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/_PageListing.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Category/_Preview.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/BillingInformation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Checkout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/CheckoutMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ConfirmationMail/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/EmptyCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/MultipleAddresses.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Payment.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/PlaceOrder.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/ShippingInformation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/SingleAddress.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/Subscription.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_AddPayment.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_BudgetPaymentPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_CashOnDeliveryPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_Coupon.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_GenericCreditCardPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_GiftCardPaymentPaymentMethod.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Checkout/_OrderSummary.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Collection/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Community/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Events/CalendarEvent/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Home/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/LandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/ThreeColumnLandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/LandingPages/TwoColumnLandingPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterActivitiesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterContinentsBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterDistancesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/Blocks/FilterTemperaturesBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationItemPage/Navigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/LocationListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/CarouselSimple.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Locations/TagPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Login/Register.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Markets/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/ImageMedia.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/PdfFile.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Media/VideoFile.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AccountInformation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/EditAddress.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/EditForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/AddressBook/ModalAddressDialog.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/Bookmarks/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/EditForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/CreditCard/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/GiftCardPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_BudgetPaymentConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_CashOnDeliveryConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_GenericCreditCardConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderConfirmation/_GiftCardPaymentConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_Discounts.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_ItemTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderDetails/_QuoteNotes.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/Detail.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistory/_OrderFilterBox.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/OrderHistoryBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ProfilePage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPassword.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ForgotPasswordConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPassword.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/ResetPassword/ResetPasswordConfirmation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionDetail/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/SubscriptionHistory/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/_MyAccountLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyAccount/_ProfileSidebar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/AddBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/AddBudgetToUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/EditBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/EditUserBudget.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Budgeting/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Orders/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/AddSub.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/Edit.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Organization/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/QuickOrderPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/Edit.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/SubOrganization/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/AddUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/EditUser.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/Users/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/_B2BNavigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/MyOrganization/_MyOrganizationLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/LargeCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_CartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_CartSummary.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_ItemTemplate.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/DefaultCart/_ProcessCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/OrderPadsPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/SharedCart/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NamedCarts/Wishlist/_WishlistListItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/NewProducts/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonItemPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/People/PersonListPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Preview/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Recommendations/WidgetBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Sales/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Category/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/EmptyResult.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/FindError.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/ProductSearchBlock/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/Search/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_CategoriesFilter.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_Facet.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_FacetContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearch.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchAll.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_QuickSearchPdf.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_RecentlyBrowsed.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_SearchContent.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_SearchPdf.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Search/_Toolbar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Dropdown/Default.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Components/Money/Default.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/CountryOptions.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/CountryRegionViewModel.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/DisplayTemplates/HeroBlockCallout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/EditorTemplates/CountryRegionViewModel.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/ChoiceElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/Components/FormContainerBlock/FormContainerBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/SelectionElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/SubmitButtonElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/TextareaElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/ElementBlocks/TextboxElementBlock.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Header.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_HeaderCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_HeaderLogo.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MarketList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Menu.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniSharedCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniSharedCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniWishlist.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MiniWishlistItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniSharedCart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniSharedCartItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniWishlist.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileMiniWishlistItems.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileNavigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_MobileUsers.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Navigation.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/Header/_Users.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/TemplateHint.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Address.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_AddressRegion.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_AddressSummaryLine.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_BreadCrumb.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Category.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Facet.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Footer.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Grid.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Layout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_LoginLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_MasterLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Page.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Pager.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Product.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductGrid.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductGridItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProductList.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ProfileSidebar.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Promotion.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_QuickViewModal.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_RecentlyBrowsed.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ReviewForm.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_ReviewItem.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Reviews.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_Store.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Shared/Views/_WishListMiniCartDetails.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/StandardPage/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/Stores/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Features/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/BulkUpdate/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/Shared/_ShellLayout.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Cms/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/GiftCardManager/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/SingleUseCoupon/EditPromotionCoupons.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/SingleUseCoupon/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/_viewImports.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Commerce/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Views/Moderation/Index.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Infrastructure/Social/Views/_viewstart.cshtml","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/Views/Shared/ElementBlocks/ODPListConsentFormBlock.cshtml"],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk.Razor/source-generators/RazorSourceGenerator.razorencconfig","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.GeneratedMSBuildEditorConfig.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig"],"DefineConstants":["TRACE","DEBUG","NET","NET8_0","NETCOREAPP","NET5_0_OR_GREATER","NET6_0_OR_GREATER","NET7_0_OR_GREATER","NET8_0_OR_GREATER","NETCOREAPP1_0_OR_GREATER","NETCOREAPP1_1_OR_GREATER","NETCOREAPP2_0_OR_GREATER","NETCOREAPP2_1_OR_GREATER","NETCOREAPP2_2_OR_GREATER","NETCOREAPP3_0_OR_GREATER","NETCOREAPP3_1_OR_GREATER"],"IntermediateAssembly":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Foundation/obj/Debug/net8.0/Foundation.dll"}
\ No newline at end of file
diff --git a/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json b/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json
deleted file mode 100644
index f0d8de6..0000000
--- a/.vs/Foundation/xs/project-cache/Jhoose.CommerceApi-Debug.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Format":1,"ProjectReferences":[],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.core/1.24.0/lib/net5.0/Azure.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/azure.identity/1.6.0/lib/netstandard2.0/Azure.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/portable.bouncycastle/1.9.0/lib/netstandard2.0/BouncyCastle.Crypto.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.core/4.4.1/lib/netstandard1.5/Castle.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/castle.windsor/5.1.1/lib/netstandard1.6/Castle.Windsor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.ApplicationModules.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Business.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore/12.17.1/lib/net6.0/EPiServer.Cms.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.aspnetcore.templating/12.17.1/lib/net6.0/EPiServer.Cms.AspNetCore.Templating.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Cms.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.aspnetidentity/12.22.7/lib/net6.0/EPiServer.Cms.UI.AspNetIdentity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Bolt.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Internal.Migration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.ODP.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/EPiServer.Commerce.Reporting.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Data.Cache.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.Enterprise.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Events.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework.aspnetcore/12.17.1/lib/net6.0/EPiServer.Framework.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Framework.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.ImageLibrary.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.framework/12.17.1/lib/net6.0/EPiServer.Licensing.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.core/12.17.1/lib/net6.0/EPiServer.LinkAnalyzer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.openidconnect/3.10.2/lib/net6.0/EPiServer.OpenIDConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Shell.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.Shell.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.cms.ui.core/12.22.7/lib/net6.0/EPiServer.UI.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/j2n/2.0.0-beta-0012/lib/net5.0/J2N.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.analysis.common/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Analysis.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queries/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Queries.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.queryparser/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.QueryParser.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/lucene.net.sandbox/4.8.0-beta00014/lib/netstandard2.1/Lucene.Net.Sandbox.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mailkit/3.0.0/lib/net5.0/MailKit.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.BusinessFoundation.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Payment.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Plugins.Shipping.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Website.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Commerce.Workflow.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.DataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.MetaDataPlus.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.Search.LuceneSearchProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/episerver.commerce.core/14.19.0/lib/net6.0/Mediachase.SqlDataProvider.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Antiforgery.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.BearerToken.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Cookies.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authentication.OAuth.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Authorization.Policy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Authorization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Endpoints.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Forms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Components.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Connections.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.CookiePolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.Internal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.DataProtection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HostFiltering.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Html.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Connections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Http.Results.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpLogging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpOverrides.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.HttpsPolicy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Identity.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.identity.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.AspNetCore.JsonPatch/6.0.1/lib/net6.0/Microsoft.AspNetCore.JsonPatch.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Localization.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ApiExplorer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Cors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.newtonsoftjson/6.0.1/lib/net6.0/Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.mvc.razor.extensions/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Mvc.Razor.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.RazorPages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.TagHelpers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.OutputCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.aspnetcore.razor.language/6.0.0/lib/netstandard2.0/Microsoft.AspNetCore.Razor.Language.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Razor.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.RequestDecompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCaching.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.ResponseCompression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Rewrite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Routing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.HttpSys.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IIS.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.IISIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.Session.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.SignalR.Protocols.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.StaticFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.AspNetCore.WebUtilities.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.CSharp/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CodeAnalysis.Common/4.0.0/lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.razor/6.0.0/lib/netstandard2.0/Microsoft.CodeAnalysis.Razor.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.data.sqlclient/5.0.1/ref/netcoreapp3.1/Microsoft.Data.SqlClient.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.abstractions/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.relational/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.sqlserver/6.0.0/lib/net6.0/Microsoft.EntityFrameworkCore.SqlServer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Caching.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Binder.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.CommandLine.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.FileExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Ini.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.KeyPerFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.UserSecrets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Configuration.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.DependencyInjection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.Extensions.DependencyModel/6.0.0/lib/netstandard2.0/Microsoft.Extensions.DependencyModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Features.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Composite.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Embedded.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileProviders.Physical.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.FileSystemGlobbing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Hosting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.extensions.http.polly/3.1.13/lib/netstandard2.0/Microsoft.Extensions.Http.Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Identity.Stores.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Localization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.EventSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Logging.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.ObjectPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Options.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Extensions.WebEncoders.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client/4.45.0/lib/netcoreapp2.1/Microsoft.Identity.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identity.client.extensions.msal/2.19.3/lib/netcoreapp2.1/Microsoft.Identity.Client.Extensions.Msal.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.abstractions/6.21.0/lib/net6.0/Microsoft.IdentityModel.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.jsonwebtokens/6.21.0/lib/net6.0/Microsoft.IdentityModel.JsonWebTokens.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.logging/6.21.0/lib/net6.0/Microsoft.IdentityModel.Logging.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols/6.21.0/lib/net6.0/Microsoft.IdentityModel.Protocols.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/6.21.0/lib/net6.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.identitymodel.tokens/6.21.0/lib/net6.0/Microsoft.IdentityModel.Tokens.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.JSInterop.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Net.Http.Headers.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.openapi/1.2.3/lib/netstandard2.0/Microsoft.OpenApi.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.sqlserver.server/1.0.0/lib/netstandard2.0/Microsoft.SqlServer.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.VisualBasic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/Microsoft.Win32.Registry.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.win32.systemevents/6.0.0/lib/net6.0/Microsoft.Win32.SystemEvents.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/mimekit/3.0.0/lib/net5.0/MimeKit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/newtonsoft.json.bson/1.0.2/lib/netstandard2.0/Newtonsoft.Json.Bson.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Newtonsoft.Json/13.0.1/lib/netstandard2.0/Newtonsoft.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.abstractions/3.1.1/lib/netstandard2.1/OpenIddict.Abstractions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.core/3.1.1/lib/net5.0/OpenIddict.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore/3.1.1/lib/net5.0/OpenIddict.EntityFrameworkCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.entityframeworkcore.models/3.1.1/lib/netstandard2.0/OpenIddict.EntityFrameworkCore.Models.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Server.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server.dataprotection/3.0.3/lib/net5.0/OpenIddict.Server.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.server/3.0.3/lib/net5.0/OpenIddict.Server.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.aspnetcore/3.0.3/lib/net5.0/OpenIddict.Validation.AspNetCore.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.dataprotection/3.0.3/lib/net5.0/OpenIddict.Validation.DataProtection.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation/3.0.3/lib/net5.0/OpenIddict.Validation.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.serverintegration/3.0.3/lib/netstandard2.1/OpenIddict.Validation.ServerIntegration.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/openiddict.validation.systemnethttp/3.0.3/lib/netstandard2.1/OpenIddict.Validation.SystemNetHttp.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly/7.1.0/lib/netstandard2.0/Polly.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/polly.extensions.http/3.0.0/lib/netstandard2.0/Polly.Extensions.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Immutable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Annotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.DataAnnotations.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.configuration.configurationmanager/6.0.0/lib/net6.0/System.Configuration.ConfigurationManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Configuration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.DataSetExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.EventLog.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.drawing.common/6.0.0/lib/net6.0/System.Drawing.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Asn1.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Formats.Tar.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.identitymodel.tokens.jwt/6.21.0/lib/net6.0/System.IdentityModel.Tokens.Jwt.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.Brotli.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.io.packaging/6.0.0/lib/net6.0/System.IO.Packaging.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipelines.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.linq.async/6.0.1/ref/net6.0/System.Linq.Async.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.memory.data/1.0.2/lib/netstandard2.0/System.Memory.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.HttpListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Mail.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Quic.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.ServicePoint.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebClient.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Metadata.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Reflection.TypeExtensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.JavaScript.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Intrinsics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Loader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Cng.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.OpenSsl.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.pkcs/6.0.0/lib/net6.0/System.Security.Cryptography.Pkcs.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.cryptography.protecteddata/6.0.0/lib/net6.0/System.Security.Cryptography.ProtectedData.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Security.Cryptography.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.security.permissions/6.0.0/lib/net6.0/System.Security.Permissions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.Principal.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.servicemodel.syndication/6.0.0/lib/net6.0/System.ServiceModel.Syndication.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ServiceProcess.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.CodePages.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.threading.accesscontrol/6.0.0/lib/net6.0/System.Threading.AccessControl.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Channels.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/ref/net8.0/System.Threading.RateLimiting.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Dataflow.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Transactions.Local.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Web.HttpUtility.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.windows.extensions/6.0.0/lib/net6.0/System.Windows.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/ref/net8.0/WindowsBase.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/AllowListConfiguration.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiMiddleware.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Configuration/CommerceApiOptions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Authentication/AuthenticationController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Authentication/CommerceApiOptionsDefaults.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/CartController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/CartExtensions.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/Models/Cart.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Cart/Models/CartLine.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Markets/MarketController.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Features/Markets/Models/Market.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Infrastructure/CurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/Infrastructure/ProxyCurrentMarket.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.GlobalUsings.g.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile"],"Analyzers":["/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll","/Users/andrewmarkham/.nuget/packages/lucene.net/4.8.0-beta00014/analyzers/dotnet/cs/Lucene.Net.CodeAnalysis.CSharp.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.2/analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.Analyzers.dll","/Users/andrewmarkham/.nuget/packages/microsoft.entityframeworkcore.analyzers/6.0.0/analyzers/dotnet/cs/Microsoft.EntityFrameworkCore.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll","/usr/local/share/dotnet/packs/Microsoft.NETCore.App.Ref/8.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.App.CodeFixes.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/cs/Microsoft.AspNetCore.Components.Analyzers.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll","/usr/local/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/8.0.0/analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Options.SourceGeneration.dll"],"AdditionalFiles":[],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/.editorconfig","/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.GeneratedMSBuildEditorConfig.editorconfig","/usr/local/share/dotnet/sdk/8.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig"],"DefineConstants":["TRACE","DEBUG","NET","NET8_0","NETCOREAPP","NET5_0_OR_GREATER","NET6_0_OR_GREATER","NET7_0_OR_GREATER","NET8_0_OR_GREATER","NETCOREAPP1_0_OR_GREATER","NETCOREAPP1_1_OR_GREATER","NETCOREAPP2_0_OR_GREATER","NETCOREAPP2_1_OR_GREATER","NETCOREAPP2_2_OR_GREATER","NETCOREAPP3_0_OR_GREATER","NETCOREAPP3_1_OR_GREATER"],"IntermediateAssembly":"/Users/andrewmarkham/DevRoot/Optimizley/CommerceApi/src/Jhoose.CommerceApi/obj/Debug/net8.0/Jhoose.CommerceApi.dll"}
\ No newline at end of file
diff --git a/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json b/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json
deleted file mode 100644
index eadfadb..0000000
--- a/.vs/Foundation/xs/project-cache/Jhoose.Search.Core-Debug.json
+++ /dev/null
@@ -1 +0,0 @@
-{"Format":1,"ProjectReferences":[],"MetadataReferences":[{"FilePath":"/Users/andrewmarkham/.nuget/packages/elastic.clients.elasticsearch/8.0.0-rc.1/lib/netstandard2.1/Elastic.Clients.Elasticsearch.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/elastic.transport/0.3.2/lib/netstandard2.1/Elastic.Transport.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/Microsoft.CSharp/4.7.0/ref/netstandard2.0/Microsoft.CSharp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/Microsoft.Win32.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/mscorlib.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/netstandard.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.AppContext.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Buffers.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.Concurrent.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.NonGeneric.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Collections.Specialized.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.Composition.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.EventBasedAsync.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ComponentModel.TypeConverter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Console.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Core.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Data.Common.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Data.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Contracts.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Debug.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/System.Diagnostics.DiagnosticSource/5.0.1/lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.FileVersionInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Process.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.StackTrace.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.TextWriterTraceListener.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Tools.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.TraceSource.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Diagnostics.Tracing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Drawing.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Drawing.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Dynamic.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.Calendars.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Globalization.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Compression.ZipFile.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.DriveInfo.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.FileSystem.Watcher.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.IsolatedStorage.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.MemoryMappedFiles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.Pipes.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.IO.UnmanagedMemoryStream.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Expressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Linq.Queryable.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Memory.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Http.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.net.http.json/6.0.0/lib/netstandard2.0/System.Net.Http.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.NameResolution.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.NetworkInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Ping.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Requests.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Security.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.Sockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebHeaderCollection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebSockets.Client.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Net.WebSockets.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Numerics.Vectors.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ObjectModel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.DispatchProxy.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.ILGeneration.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Emit.Lightweight.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Reflection.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.Reader.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.ResourceManager.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Resources.Writer.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.CompilerServices.VisualC.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Handles.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.InteropServices.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.InteropServices.RuntimeInformation.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Numerics.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Formatters.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Runtime.Serialization.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Claims.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Algorithms.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Csp.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.Primitives.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Cryptography.X509Certificates.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.Principal.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Security.SecureString.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ServiceModel.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.Encoding.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.Encoding.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/System.Text.Encodings.Web/6.0.0/lib/netstandard2.0/System.Text.Encodings.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/Users/andrewmarkham/.nuget/packages/system.text.json/6.0.6/lib/netstandard2.0/System.Text.Json.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Text.RegularExpressions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Overlapped.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.Extensions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Tasks.Parallel.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Thread.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.ThreadPool.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Threading.Timer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Transactions.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.ValueTuple.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Web.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Windows.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.Linq.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.ReaderWriter.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.Serialization.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XmlDocument.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XmlSerializer.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XPath.dll","Aliases":[],"Framework":null},{"FilePath":"/usr/local/share/dotnet/packs/NETStandard.Library.Ref/2.1.0/ref/netstandard2.1/System.Xml.XPath.XDocument.dll","Aliases":[],"Framework":null}],"Files":["/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/HealthResponse.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/BaseSearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/HealthSearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/Requests/ISearchRequest.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchClientSettings.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchRequestHandler.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/SearchResponse.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/.NETStandard,Version=v2.1.AssemblyAttributes.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.AssemblyInfo.cs"],"BuildActions":["Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile","Compile"],"Analyzers":["/Users/andrewmarkham/.nuget/packages/system.text.json/6.0.6/analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll"],"AdditionalFiles":[],"EditorConfigFiles":["/Users/andrewmarkham/DevRoot/Optimizley/Foundation/.editorconfig","/Users/andrewmarkham/DevRoot/Optimizley/Foundation/Jhoose.Search.Core/obj/Debug/netstandard2.1/Jhoose.Search.Core.GeneratedMSBuildEditorConfig.editorconfig"],"DefineConstants":["TRACE","DEBUG","NETSTANDARD","NETSTANDARD2_1","","NETSTANDARD1_0_OR_GREATER","NETSTANDARD1_1_OR_GREATER","NETSTANDARD1_2_OR_GREATER","NETSTANDARD1_3_OR_GREATER","NETSTANDARD1_4_OR_GREATER","NETSTANDARD1_5_OR_GREATER","NETSTANDARD1_6_OR_GREATER","NETSTANDARD2_0_OR_GREATER","NETSTANDARD2_1_OR_GREATER"]}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index eff0cb8..194740c 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -20,7 +20,7 @@
"args": [
"watch",
"run",
- "${workspaceFolder}/src/Sample/DemoSite/DemoSite.csproj",
+ "${workspaceFolder}/src/Jhoose.Demo/Jhoose.Demo.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
diff --git a/Developer Notes.md b/Developer Notes.md
index 97a9639..6099cbf 100644
--- a/Developer Notes.md
+++ b/Developer Notes.md
@@ -81,7 +81,7 @@ COMMERCE_AUTHORIZATION_KEY = ...
- npm run build - builds and packages the project.
- npm run test - runs the unit tests
- npm run testf - runs the unit functional tests, requires the Rest API to be running
- - npm run doc - creates the documentation
+ - npm run doc - creates the documentation
### components
This is the reactjs component library
diff --git a/README.md b/README.md
index 048c822..c7b9b6b 100644
--- a/README.md
+++ b/README.md
@@ -12,11 +12,15 @@ A Rest API layer that supports these common eCommerce journies
- Pricing
- Markets
+See [Customer Rest API](./docs/customerRestapi.md)
+
#### Javascript/Typescript Customer API Layer
-This library provides an abstration of the Rest API which simplifies the approach when developing either clientside components in Vanilla JS or more complex applications via Frameworks such as NEXT.js or Angular.
+This library provides an abstration of the Rest API which simplifies the approach when developing either client-side components in Vanilla JS or more complex applications via Frameworks such as NEXT.js, React or Angular.
- Parity functionality to the Customer Rest API
- Caching to enhance performance
+See [Javascript Customer API Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/javascriptapi.md)
+
#### Microfront UI Layer
This is a React framework that delivers a core set of components that can be used to accelerate development.
@@ -28,6 +32,8 @@ This is a React framework that delivers a core set of components that can be use
The components can be styled to match designs.
+See [Micro UI Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/microfrontend.md)
+
---
## Why
@@ -53,6 +59,20 @@ The Rest API can be used by Websites, POS, Mobile apps, surfacing the same Cart,
### Authentication
See [Authentication](./docs/authentication.md)
+### Markets
+See [Markets](./docs/markets.md)
+
+### Extensibility
+Feature [Extensibility](https://github.com/andrewmarkham/CommerceApi/issues/2)
+
+---
+## Getting Started
+Please read the [Customer Rest API](./docs/customerRestapi.md) documentation to understand how to add the framework to an existing Optimizely Commerce solution.
+
+For an example api site please see [Jhoose Demo](./src/Jhoose.Demo/README.md)
+
+For an example headless site (Next.js) please see [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing)
+
---
## API Documentation
@@ -60,10 +80,10 @@ See [Authentication](./docs/authentication.md)
See [Customer Rest API](./docs/customerRestapi.md)
### Javascript Customer API Layer
-See [Javascript Customer API Layer](./docs/javascriptapi.md)
+See [Javascript Customer API Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/javascriptapi.md)
### Micro UI Layer
-See [Micro UI Layer](./docs/microfrontend.md)
+See [Micro UI Layer](https://github.com/andrewmarkham/CommerceApi.Frontend/blob/main/docs/microfrontend.md)
---
diff --git a/build/SqlScripts/FoundationConfigurationSchema.sql b/build/SqlScripts/FoundationConfigurationSchema.sql
deleted file mode 100644
index b1a10b5..0000000
--- a/build/SqlScripts/FoundationConfigurationSchema.sql
+++ /dev/null
@@ -1,41 +0,0 @@
-CREATE TABLE [dbo].[FoundationConfiguration]
-(
- [Id] [bigint] IDENTITY(1,1) NOT NULL,
- [AppName] NVARCHAR(250) NOT NULL,
- [IsInstalled] BIT NOT NULL DEFAULT(0),
- CONSTRAINT [PK_FoundationConfiguration] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-GO
-
-CREATE PROCEDURE [dbo].[FoundationConfiguration_List]
-AS
-BEGIN
- SELECT * FROM FoundationConfiguration
-END
-GO
-
-CREATE PROCEDURE [dbo].[FoundationConfiguration_SetInstalled]
-AS
-BEGIN
- UPDATE FoundationConfiguration SET IsInstalled = 1
-END
-GO
-
-CREATE PROCEDURE [dbo].[FoundationConfiguration_Save]
-(
- @Id INT = 0,
- @AppName NVARCHAR(250),
- @IsInstalled BIT = 0
-)
-AS
-BEGIN
- IF @Id > 0
- UPDATE FoundationConfiguration SET AppName = @AppName, IsInstalled = @IsInstalled WHERE Id = @Id
- ELSE
- INSERT INTO FoundationConfiguration (AppName, IsInstalled) VALUES (@AppName, @IsInstalled)
-
-END
-GO
-
-INSERT INTO FoundationConfiguration (AppName) VALUES ( '$(appname)')
-GO
diff --git a/build/SqlScripts/ServiceApiCms.sql b/build/SqlScripts/ServiceApiCms.sql
deleted file mode 100644
index 082c7f2..0000000
--- a/build/SqlScripts/ServiceApiCms.sql
+++ /dev/null
@@ -1,38 +0,0 @@
---beginvalidatingquery
-IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'tblUserPermission')
- BEGIN
- IF NOT EXISTS (SELECT pkid FROM dbo.tblUserPermission WHERE Permission = 'WriteAccess' and GroupName = 'EPiServerServiceApi')
- SELECT 1, 'Installing Permissions'
- ELSE
- SELECT 0, 'Already installed default permissions'
- END
-ELSE
- select -1, 'Not an EPiServer CMS database'
---endvalidatingquery
-
-GO
-
-INSERT INTO [dbo].[tblUserPermission]
- ([Name]
- ,[IsRole]
- ,[Permission]
- ,[GroupName])
-VALUES
- ('Administrators'
- ,1
- ,'WriteAccess'
- ,'EPiServerServiceApi')
-GO
-
-INSERT INTO [dbo].[tblUserPermission]
- ([Name]
- ,[IsRole]
- ,[Permission]
- ,[GroupName])
-VALUES
- ('Administrators'
- ,1
- ,'ReadAccess'
- ,'EPiServerServiceApi')
-
-GO
diff --git a/build/SqlScripts/ServiceApiCommerce.sql b/build/SqlScripts/ServiceApiCommerce.sql
deleted file mode 100644
index 4810584..0000000
--- a/build/SqlScripts/ServiceApiCommerce.sql
+++ /dev/null
@@ -1,37 +0,0 @@
---beginvalidatingquery
-IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'SchemaVersion')
- BEGIN
- IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id (N'[dbo].[ecf_CatalogEntry_Paging]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
- select 0,'Already correct database version'
- ELSE
- select 1, 'Upgrading database'
- END
-ELSE
- select -1, 'Not an EPiServer Commerce database'
-go
---endvalidatingquery
-
--- ecf_CatalogEntry_Paging.sql
-CREATE PROCEDURE [dbo].[ecf_CatalogEntry_Paging]
- @StartPage int,
- @PageSize int,
- @ReturnInactive bit = 0
-AS
-BEGIN
- DECLARE @intStartRow int;
- DECLARE @intEndRow int;
-
- SET @intStartRow = (@StartPage -1) * @PageSize + 1;
- SET @intEndRow = @StartPage * @PageSize;
-
- WITH entries AS
- (SELECT CatalogEntryId,
- ROW_NUMBER() OVER(ORDER BY CatalogEntryId) as intRow,
- COUNT(CatalogEntryId) OVER() AS intTotalHits
- FROM CatalogEntry)
-
- SELECT CatalogEntryId, intTotalHits FROM entries
- WHERE intRow BETWEEN @intStartRow AND @intEndRow
-END
-go
--- END OF ecf_CatalogEntry_Paging.sql
diff --git a/build/SqlScripts/UniqueCouponSchema.sql b/build/SqlScripts/UniqueCouponSchema.sql
deleted file mode 100644
index 5cb24f0..0000000
--- a/build/SqlScripts/UniqueCouponSchema.sql
+++ /dev/null
@@ -1,116 +0,0 @@
-CREATE TABLE [dbo].[UniqueCoupons]
-(
- [Id] [bigint] IDENTITY(1,1) NOT NULL,
- [PromotionId] [int] NOT NULL,
- [Code] [nvarchar](max) NOT NULL,
- [Valid] [datetime2](7) NOT NULL,
- [Expiration] [datetime2](7) NULL,
- [CustomerId] [uniqueidentifier] NULL,
- [Created] [datetime2](7) NULL,
- [MaxRedemptions] [int] NULL,
- [UsedRedemptions] [int] NULL,
- CONSTRAINT [PK_UniqueCoupons] PRIMARY KEY CLUSTERED ([Id] ASC)
-);
-GO
-
-CREATE NONCLUSTERED INDEX [IDX_UniqueCoupons_PromotionId] ON [dbo].[UniqueCoupons]
-(
- [PromotionId] ASC
-)
-GO
-
-CREATE TYPE [dbo].[udttUniqueCoupons] AS TABLE
-(
- [Id] [bigint] NOT NULL,
- [PromotionId] [int] NOT NULL,
- [Code] [nvarchar](max) NOT NULL,
- [Valid] [datetime2](7) NOT NULL,
- [Expiration] [datetime2](7) NULL,
- [CustomerId] [uniqueidentifier] NULL,
- [Created] [datetime2](7) NOT NULL,
- [MaxRedemptions] [int] NOT NULL,
- [UsedRedemptions] [int] NOT NULL
-);
-GO
-
-CREATE PROCEDURE [dbo].[UniqueCoupons_DeleteById]
-(
- @Id BIGINT
-)
-AS
-BEGIN
- DELETE FROM UniqueCoupons
- WHERE Id = @Id
-END
-GO
-
-CREATE PROCEDURE [dbo].[UniqueCoupons_DeleteByPromotionId]
-(
- @PromotionId INT
-)
-AS
-BEGIN
- DELETE FROM UniqueCoupons
- WHERE PromotionId = @PromotionId
-END
-GO
-
-CREATE PROCEDURE [dbo].[UniqueCoupons_GetById]
-(
- @Id BIGINT
-)
-AS
-BEGIN
- SELECT * FROM UniqueCoupons
- WHERE Id = @Id
-END
-GO
-
-CREATE PROCEDURE [dbo].[UniqueCoupons_GetByPromotionId]
-(
- @PromotionId INT
-)
-AS
-BEGIN
- SELECT * FROM UniqueCoupons
- WHERE PromotionId = @PromotionId
-END
-GO
-
-CREATE PROCEDURE [dbo].[UniqueCoupons_Save]
-(
- @Data dbo.[udttUniqueCoupons] readonly
-)
-AS
-BEGIN
- MERGE dbo.UniqueCoupons AS TARGET
- USING @Data AS SOURCE
- On (TARGET.Id = SOURCE.Id)
- WHEN MATCHED THEN
- UPDATE SET PromotionId = SOURCE.PromotionId,
- Code = SOURCE.Code,
- Valid = SOURCE.Valid,
- Expiration = SOURCE.Expiration,
- CustomerId = SOURCE.CustomerId,
- Created = SOURCE.Created,
- MaxRedemptions = SOURCE.MaxRedemptions,
- UsedRedemptions = SOURCE.UsedRedemptions
-
- WHEN NOT MATCHED THEN
- INSERT (PromotionId, Code, Valid, Expiration, CustomerId, Created, MaxRedemptions, UsedRedemptions)
- VALUES (SOURCE.PromotionId, SOURCE.Code, SOURCE.Valid, SOURCE.Expiration, SOURCE.CustomerId, SOURCE.Created, SOURCE.MaxRedemptions, SOURCE.UsedRedemptions);
-END
-GO
-
-
-SET ANSI_NULLS ON
-GO
-SET QUOTED_IDENTIFIER OFF
-GO
-
-Create PROCEDURE [dbo].[UniqueCoupons_DeleteExpiredCoupons]
-AS
-BEGIN
- DELETE FROM UniqueCoupons
- WHERE Expiration < GETDATE()
-END
diff --git a/build/appsettings.json b/build/appsettings.json
deleted file mode 100644
index e5eb0d3..0000000
--- a/build/appsettings.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information",
- "EPiServer.Commerce": "Debug"
- }
- },
- "AllowedHosts": "*",
- "ConnectionStrings": {
- "EPiServerDB": "Data Source=.;Database=netcore.qs.Cms;User Id=netcoreUser;Password=epi#Server7Local;MultipleActiveResultSets=True"
- }
-}
\ No newline at end of file
diff --git a/build/icon.png b/build/icon.png
deleted file mode 100644
index b3a65a2..0000000
Binary files a/build/icon.png and /dev/null differ
diff --git a/build/nuget.exe b/build/nuget.exe
deleted file mode 100644
index 606c36a..0000000
Binary files a/build/nuget.exe and /dev/null differ
diff --git a/build/version.props b/build/version.props
deleted file mode 100644
index 8a9ecc2..0000000
--- a/build/version.props
+++ /dev/null
@@ -1 +0,0 @@
-0.0.1
\ No newline at end of file
diff --git a/build/vswhere.exe b/build/vswhere.exe
deleted file mode 100644
index 5e701ae..0000000
Binary files a/build/vswhere.exe and /dev/null differ
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
deleted file mode 100644
index 00a15cf..0000000
--- a/docs/CONTRIBUTING.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# Contribution Guide
-Before
-contributing, please read the [code of conduct](https://github.com/episerver/Foundation/blob/develop/docs/code-of-conduct.md). Contributions are greatly appreciated via forks. Episerver retains control of the direction of the project and reserves the right to close issues and PR:s that don’t align with the project roadmap.
-
-
-* First, if you found a bug yourself you need to report it and let it as an issue in Github.
-* Then, assign it you.
-* Read through this document to make sure you follow the practices for developing on Foundation.
-* __Test__, code, __test__, code, __test__
-* Create a pull request with your changes, squash your changes to a single commit (unless multiple commits makes sense for some reason)
-
----
-
-## Changing code in Foundation
-
-* Create branch off develop named XXX-shortname where XXX is the issue number in Github, for example "bugfix/1231-thumbnails-for-media". See branching chapter for details.
-* For bug fixes add a unit test to catch the bug before continuing
-* Write tests, code, write tests, code :)
-* Make sure you have the latest code from develop
-* Write a commit message according to the commit message guidelines below
-* Make sure builds are green, Foundation CI runs on every checkin
-* Create a pull requests form your branch to develop and add reviewer if you know who should review, otherwise leave blank
-
----
-
-## Before submitting a pull-request
-* Make sure the code is documented
-* Make sure the tests are up to date and test the new code
-* Make sure the correct issue ids are present in the commit message
-* Follow the commit message guideline
-
----
-
-## Accepting pull requests
-
-Pull request are the official code review where someone on the team signs off on the code. It is encouraged to do code reviews continuously before you push to the repository but this is not enforced and up to every developer to choose to do so.
-
-All developers are encourage to read, review, and comment on pull requests to make sure code reviews are a collaborate effort.
-
-When merging, always delete source branch.
-
----
-
-## Branching model in Foundation
-
-We are using the workflow as described in https://www.atlassian.com/git/workflows#!workflow-gitflow with some minor modifications.
-
-### Master branch
-
-Should always contain tested, working, releasable code. You can only get code onto master by creating pull requests that then needs to be reviewed and accepted.
-
-### Develop branch
-
-Acts as integration branch for feature and bugfix branches that should go into the next release. You can only get code onto master by creating pull requests that then needs to be reviewed and accepted. Should only contain completely implemented work items.
-
-### Feature branches
-
-Created from develop and should be named feature/`-`. For example to work on "User Story 35: Remove the 'Classic' link stage in the API and only use permanent links" you would create a branch from develop named "feature/35-remove-classic-links". Note that the `` is all lower-case with hyphens.
-
-Merge to the develop branch by creating a pull request.
-
-### Bugfix branches
-
-Created from develop and should be named bugfix/`-`. For example to work on "Bug 111571: MVC rendering of built-in properties" you should create a branch named something like "bugfix/111571-mvc-rendering-properties". Note that the `` is all lower-case with hyphens.
-
-Merge to the develop branch by creating a pull request.
-
----
-
-## Commit Message Guidelines ##
-
-To make the history easier to read and the changes easier to understand a commit message should be created according to the rules below, which are a slightly modified version of [these seven rules](http://chris.beams.io/posts/git-commit/#seven-rules).
-
-* Separate subject from body with a blank line
-* Limit the subject to 50 characters
-* Capitalize the subject line
-* Do not end the subject line with a period
-* Wrap the body at 72 characters
-* Use the body to explain what and why vs. how
-* Add a reference to the associated task
-
-**Example**
-Handle multiple errors from the server
-
-Extended the message view model to have additional information which
-will be displayed beneath the error message in the alert dialog. Used
-the additional information in the mark as ready to publish method to
-handle errors that may occur when dealing with multiple items.
-
diff --git a/docs/authentication.md b/docs/authentication.md
index c336527..5571c33 100644
--- a/docs/authentication.md
+++ b/docs/authentication.md
@@ -8,15 +8,22 @@ Authorization: Bearer ...eyJhbGciOiJIUzI...
```
## Known Customers
-Customers must authenticate via an external identity provider, such as Entra ID or Okta.
+Customers must authenticate via an external identity provider, such as Entra ID or Okta. The bearer token returned by the external provider is then used by all the api requests.
## Anonymous Users
-Users are 'anonymous' until they authenticate via an external provider. In this scenario, a request to the endpoint `/commerceapi/authentication/` is required to create a bearer token for the anonymous user. The `jti` claim will hold the anonymous ID. To maintain a consistent anonymous ID between subsequent authentication requests, you can include in the request body the current ID, which will be used instead of generating a new ID.
+Users are 'anonymous' until they authenticate via an external provider. In this scenario, a request to the endpoint `/commerceapi/authentication/` is required to create a bearer token for the anonymous user. The `jti` claim will hold the anonymous ID.
+
+To maintain a consistent anonymous ID between subsequent authentication requests, you must include in the request body the current ID. This will be returned instead of generating a new ID.
``` http
POST /commerceapi/authentication/ HTTP/1.1
X-Auth-Key: ...2ODQ5NDg1MGEzYzI4MGFkZGE2M...
```
+```json
+{
+ "anonymousAuthenticationRequest": "{{$guid}}"
+}
+```
This returns a bearer token that can be used by all the api requests
```json
@@ -30,6 +37,9 @@ This returns a bearer token that can be used by all the api requests
> **Note:** The value in the `X-Auth-Key` header must match the appSetting `JhooseCommerceApiOptions.AuthorizationKey`.
+Once the user has authenticated, the next step is to create the customer context.
+> **Note:** When the authentication token expires and is recreated, you must also recreate the customer context.
+
## Customer Context
The customer context is a secure token which provides additional information about the customer.
@@ -47,5 +57,19 @@ Authorization: Bearer ...eyJhbGciOiJIUzI1NiIsInR5cCI6I...
}
```
-Once the user has authenticated, the next step is to create the customer context.
-> **Note:** When the authentication token expires and is recreated, you must also recreate the customer context.
\ No newline at end of file
+## Migrate Cart
+When a user authenticates it is important to maintain the state of the cart. To support this journey you must call the cart migrate endpoint.
+
+The Customer context must be for the newly authenticated user, and the anonymousId is from the previoud state.
+
+``` http
+POST /commerceapi/cart/migrate HTTP/1.1
+X-Customer-Context: ...vyVMCy1ZFjhTWub3QW6aJzKqPi...
+Authorization: Bearer ...eyJhbGciOiJIUzI...
+```
+
+```json
+{
+ "anonymousId": "...a12d-4356..."
+}
+```
diff --git a/docs/code-of-conduct.md b/docs/code-of-conduct.md
deleted file mode 100644
index 81b217c..0000000
--- a/docs/code-of-conduct.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-In the interest of fostering an open and welcoming environment, we as
-contributors and maintainers pledge to make participation in our project and
-our community a harassment-free experience for everyone, regardless of age, body
-size, disability, ethnicity, sex characteristics, gender identity and expression,
-level of experience, education, socio-economic status, nationality, personal
-appearance, race, religion, or sexual identity and orientation.
-
-## Our Standards
-
-Examples of behavior that contributes to creating a positive environment
-include:
-
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery and unwelcome sexual attention or
- advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Our Responsibilities
-
-Project maintainers are responsible for clarifying the standards of acceptable
-behavior and are expected to take appropriate and fair corrective action in
-response to any instances of unacceptable behavior.
-
-Project maintainers have the right and responsibility to remove, edit, or
-reject comments, commits, code, wiki edits, issues, and other contributions
-that are not aligned to this Code of Conduct, or to ban temporarily or
-permanently any contributor for other behaviors that they deem inappropriate,
-threatening, offensive, or harmful.
-
-## Scope
-
-This Code of Conduct applies within all project spaces, and it also applies when
-an individual is representing the project or its community in public spaces.
-Examples of representing a project or community include using an official
-project e-mail address, posting via an official social media account, or acting
-as an appointed representative at an online or offline event. Representation of
-a project may be further defined and clarified by project maintainers.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
-complaints will be reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
-
-Project maintainers who do not follow or enforce the Code of Conduct in good
-faith may face temporary or permanent repercussions as determined by other
-members of the project's leadership.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
-available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
-
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see
-https://www.contributor-covenant.org/faq
diff --git a/docs/customerRestapi.md b/docs/customerRestapi.md
index 4f079a1..f7a6561 100644
--- a/docs/customerRestapi.md
+++ b/docs/customerRestapi.md
@@ -18,12 +18,13 @@ All requests (unless otherwise specified) work in the scope of the currently aut
## Installation
-__*TBC*__
-
+```bash
+dotnet add package Jhoose.CommerceApi
+```
## Getting Started
-API Layer
-``` c#
+Modify `startup.cs` `ConfigureServices` method.
+```C#
// add authentication
services
.AddAuthentication()
@@ -40,16 +41,23 @@ API Layer
o.CreateAbsoluteUrls = true;
});
+```
-
+Modify `startup.cs` `Configure` method.
+```C#
+ // Add after UseRouting, but before UseAuthentication and UseAuthorization, else will have CORS issues
+
app.UseJhooseCommerceApi();
```
+Settings can also be managed in `appSettings.json`
``` json
"JhooseCommerceApiOptions": {
"JwtKey": "cd1b757768494850a3c280adda607373",
"AuthorizationKey": "Y2QxYjc1Nzc2ODQ5NDg1MGEzYzI4MGFkZGE2MDczNzM=",
"ProxyCurrentMarket": true,
+ "CreateAbsoluteUrls": true,
+ "SiteHostname": "http://localhost:3000",
"Encryption": {
"Key": "cd1b757768494850a3c280adda607373",
"IV": "cd1b757768494850"
@@ -57,6 +65,44 @@ API Layer
}
```
+The framework also expects the MSRP Sales Price type to exist and is required for the standard pricing to work.
+``` json
+ "EPiServer": {
+ "Commerce": {
+
+ "CatalogOptions": {
+
+ // Add the MSRP Sales price type
+ "SalePriceTypes": [
+ {
+ "Key": "MSRP",
+ "Value": "4",
+ "Description": "MSRP"
+ }
+ ]
+ }
+ }
+```
+
+## JwtBearer Options
+Used to configure the external authentication provider.
+
+| Property | Description |
+| -- | -- |
+| Audience | As supplied by external provider |
+| Authority | As supplied by external provider |
+| Issuer | As supplied by external provider |
+
+## JhooseCommerceApiOptions
+| Property | Description |
+| -- | -- |
+| SiteHostname | This is the hostname of the external site that is using the CommerceApi. Include the protocol and (port if necessary). This is used by CORS |
+| JwtKey | This is the key used to sign the JWT token used for anonymous authentication. See: [JWT Keys](https://jwtsecretkeygenerator.com)|
+| AuthorizationKey | This is the key used to authenticate for anonymous authentication.|
+| ProxyCurrentMarket | If true, the local ICurrentMarket implementation will be proxied with the CommerceApi implementation. See [Markets](./markets.md) |
+| CreateAbsoluteUrls | If true, all urls will be created as absolute urls.|
+| Encryption.Key | AES Encryption Key used See: [Encryption Keys](https://generate-random.org/encryption-keys)|
+| Encryption.IV | AES Initilization Vector used|
diff --git a/docs/javascriptapi.md b/docs/javascriptapi.md
deleted file mode 100644
index e1cf7aa..0000000
--- a/docs/javascriptapi.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## Javascript API Layer
-Low level javascript wrapper for the rest api
-
-https://typedoc.org
-
-[Documentation](../src/eCommerce/site/packages/core/docs/README.md)
diff --git a/docs/markets.md b/docs/markets.md
new file mode 100644
index 0000000..269aa3e
--- /dev/null
+++ b/docs/markets.md
@@ -0,0 +1,31 @@
+# Markets
+
+The Jhoose Commerce Framework will automatically register an implementation of ICurrentMarket. If you wish to use your own implementation then register your own instance and then set the configuration option `ProxyCurrentMarket` to true.
+
+## IMarketManager
+The Jhoose Commerce Framework requires you to register your own implementation of `IMarketManager`. For the majority of time you can inherit from the base class `BaseMarketManager` and then implement the method `DetermineMarket`. This method is used to calculate the commerce market from the request.
+
+```c#
+///
+/// Provides market resolution and mapping helpers for the commerce API.
+///
+public interface IMarketManager
+{
+ ///
+ /// Builds the public URL for a given market.
+ ///
+ string BuildMarketUrl(IMarket market);
+
+ ///
+ /// Determines the market that applies to the supplied request metadata.
+ ///
+ MarketDetails DetermineMarket(MarketRequest request);
+
+ ///
+ /// Converts platform markets into API market models.
+ ///
+ List GetMarkets(List markets);
+}
+```
+
+See: [Market API](./restapi/markets.md)
\ No newline at end of file
diff --git a/docs/microfrontend.md b/docs/microfrontend.md
deleted file mode 100644
index 6accf8e..0000000
--- a/docs/microfrontend.md
+++ /dev/null
@@ -1,44 +0,0 @@
-## Micro UI Layer
-
-``` json
- "dependencies": {
- "@jhoose-commerce/components": "^1.0.0",
- "react": "^18",
- "react-dom": "^18"
- },
-```
-
-Add css to global.css
-`@import '@jhoose-commerce/components/dist/style.css';
-`
-### Providers
-``` html
-
-
-
- {props.children}
-
-
-```
-
-### Hooks
-``` js
- const { client, marketContext } = useJhooseCommerce();
-```
-
-### Components
-
-``` html
-
-
- setShowMiniCart(false)}>
-
-
-
-
-
-
-```
\ No newline at end of file
diff --git a/src/Jhoose.CommerceApi.Stripe/README.md b/src/Jhoose.CommerceApi.Stripe/README.md
new file mode 100644
index 0000000..3c31ef0
--- /dev/null
+++ b/src/Jhoose.CommerceApi.Stripe/README.md
@@ -0,0 +1,156 @@
+# Jhoose.CommerceApi.Stripe
+
+Stripe payment integration module for Jhoose Commerce API. This library provides Stripe payment processing capabilities for Optimizely Commerce applications.
+
+## Features
+
+- **Payment Intent Creation**: Create Stripe payment intents for shopping carts
+- **Webhook Processing**: Handle Stripe webhook events for payment completion
+- **Payment Gateway Integration**: Seamless integration with Optimizely Commerce order pipeline
+- **Multi-target Support**: Compatible with .NET 8.0, 9.0, and 10.0
+
+## Installation
+
+This library depends on:
+- `Stripe.net` - Official Stripe .NET SDK
+- `Jhoose.CommerceApi` - Core Commerce API library
+- Microsoft ASP.NET Core framework
+
+## Configuration
+
+### appsettings.json
+
+Add the following configuration section to your `appsettings.json`:
+
+```json
+{
+ "Stripe": {
+ "PublishableKey": "pk_test_your_publishable_key",
+ "SecretKey": "sk_test_your_secret_key",
+ "WebhookSecret": "whsec_your_webhook_secret"
+ }
+}
+```
+
+### Service Registration
+
+Register Stripe payment services in your `Startup.cs` or `Program.cs`:
+
+```csharp
+using Jhoose.CommerceApi.Stripe.Configuration;
+
+// In ConfigureServices or WebApplicationBuilder
+services.AddStripePayment(configuration);
+
+// Or with custom options
+services.AddStripePayment(configuration, options =>
+{
+ // Customize StripeOptions if needed
+});
+```
+
+## Usage
+
+### Creating a Payment Intent
+
+The `PaymentIntentController` provides an endpoint to create Stripe payment intents:
+
+**Endpoint**: `POST /commerceapi/stripe/PaymentIntent/{cartId}`
+
+**Headers**:
+- `Authorization`: Bearer JWT token
+- `X-Customer-Context`: Customer context information
+
+**Request Body**:
+```json
+{
+ "marketId": "en-US",
+ "language": "en"
+}
+```
+
+**Response**:
+```json
+{
+ "clientSecret": "pi_xxx_secret_xxx",
+ "paymentId": "pi_xxx",
+ "paymentMethodId": "guid-of-payment-method"
+}
+```
+
+### Webhook Handling
+
+The `StripePaymentWebHook` controller processes Stripe webhook events:
+
+**Endpoint**: `POST /api/StripePaymentWebHook`
+
+**Supported Events**:
+- `payment_intent.processing` - Payment is being processed
+- `payment_intent.payment_failed` - Payment has failed
+- `payment_intent.succeeded` - Payment completed successfully
+
+When a payment succeeds, the webhook automatically:
+1. Adds the payment to the cart
+2. Converts the cart to a purchase order
+3. Updates the Stripe payment intent with order information
+
+### Payment Method Setup
+
+In Optimizely Commerce, configure a payment method with the system keyword `StripePayment`. This keyword is used to identify and retrieve the Stripe payment method for processing.
+
+## Components
+
+### Controllers
+
+- **PaymentIntentController**: Handles payment intent creation for carts
+- **StripePaymentWebHook**: Processes Stripe webhook notifications
+
+### Payment Processing
+
+- **StripePaymentGateway**: Payment gateway implementation for Optimizely Commerce pipeline
+- **StripePaymentMethod**: Payment method implementation that creates and validates Stripe payments
+
+### Configuration
+
+- **StripePaymentExtensions**: Service collection extensions for dependency injection
+- **StripeOptions**: Configuration model for Stripe API keys and webhook secrets
+
+### Models
+
+- **PaymentIntentRequest**: Request model containing market and language information
+- **PaymentIntentResponse**: Response model with payment intent details
+
+## Security
+
+- All payment intent endpoints require JWT authentication
+- CORS is configured via `JhooseCommerceApiOptions.CommerceApiCorsPolicy`
+- Webhook signatures are validated using the configured webhook secret
+- Cart ownership is validated before creating payment intents
+
+## Important Notes
+
+1. **Amount Conversion**: Stripe requires amounts in the smallest currency unit (cents). The library automatically multiplies cart totals by 100.
+
+2. **Metadata**: Payment intents include metadata for cart tracking:
+ - `cartId` - Commerce cart identifier
+ - `email` - Customer email from shipping address
+ - `marketId` - Market identifier
+ - `language` - Language code
+ - `paymentMethodId` - Commerce payment method ID
+
+3. **Automatic Payment Methods**: Payment intents are configured with automatic payment method detection enabled.
+
+4. **Webhook Requirements**: Configure your Stripe webhook endpoint in the Stripe Dashboard to point to `/api/StripePaymentWebHook`.
+
+## Dependencies
+
+- EPiServer.Commerce.Order
+- Mediachase.Commerce
+- Stripe.net
+- Microsoft.AspNetCore.App
+
+## Target Frameworks
+
+- .NET 8.0
+- .NET 9.0
+- .NET 10.0
diff --git a/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs b/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs
deleted file mode 100644
index be72e42..0000000
--- a/src/Jhoose.CommerceApi/Configuration/AddCommerceClaimsTransformation.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using Mediachase.BusinessFoundation.Data;
-using Mediachase.BusinessFoundation.Data.Business;
-using Mediachase.BusinessFoundation.Data.Meta;
-using Mediachase.Commerce.Customers;
-using Microsoft.AspNetCore.Authentication;
-using OpenIddict.Abstractions;
-using System.Security.Claims;
-
-/*
-namespace Jhoose.CommerceApi.Configuration
-{
- public static class CommerceClaims {
- public const string CustomerId = "CustomerId";
- public const string OrganisationId = "OrganisationId";
- }
-
- public class AddCommerceClaimsTransformation : IClaimsTransformation
- {
- private readonly CustomerContext _customerContext;
-
- public AddCommerceClaimsTransformation(CustomerContext customerContext)
- {
- _customerContext = customerContext;
- }
-
- public Task TransformAsync(ClaimsPrincipal principal)
- {
- ClaimsIdentity claimsIdentity = new ClaimsIdentity();
-
- var emailAddress = principal?.Identity?.Name ?? principal?.GetClaim(ClaimTypes.Name) ?? principal.GetClaim("name");
-
- if (string.IsNullOrEmpty(emailAddress))
- {
- return Task.FromResult(principal);
- }
-
- var customer = GetContactByEmail(emailAddress);
-
- if (customer == null)
- {
- return Task.FromResult(principal);
- }
-
- if (!principal.HasClaim(claim => claim.Type == CommerceClaims.CustomerId))
- {
- claimsIdentity.AddClaim(new Claim(CommerceClaims.CustomerId, customer.PrimaryKeyId.Value.ToString()));
- }
-
- if (!principal.HasClaim(claim => claim.Type == CommerceClaims.OrganisationId) && customer.ContactOrganization != null)
- {
- claimsIdentity.AddClaim(new Claim(CommerceClaims.OrganisationId, customer.ContactOrganization.PrimaryKeyId.Value.ToString()));
- }
-
- principal.AddIdentity(claimsIdentity);
- return Task.FromResult(principal);
- }
-
- private CustomerContact? GetContactByEmail(string email)
- {
- try
- {
- var filterEl = new FilterElement("Email", FilterElementType.Equal, email);
- return
- BusinessManager.List(ContactEntity.ClassName, new[] { filterEl })
- .OfType()
- .FirstOrDefault();
- }
- catch (ObjectNotFoundException)
- {
- //Safe guard
- return null;
- }
- }
- }
-}
-*/
diff --git a/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs b/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs
index 72a4092..f068acb 100644
--- a/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs
+++ b/src/Jhoose.CommerceApi/Configuration/Models/JhooseCommerceApiOptions.cs
@@ -24,7 +24,7 @@ public class JhooseCommerceApiOptions
public required string SiteHostname { get; set; }
///
- /// if true, the local ICurrentMarket implementation will be proxied the CommerceApi implementation.
+ /// if true, the local ICurrentMarket implementation will be proxied with the CommerceApi implementation.
///
public bool ProxyCurrentMarket { get; set; } = false;
diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs
index bad7e6c..93a341a 100644
--- a/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs
+++ b/src/Jhoose.CommerceApi/Features/Cart/Services/ICartModelBinderService.cs
@@ -16,57 +16,3 @@ public interface ICartModelBinderService: IOrderGroupModelBinderService
///
Models.Cart BindCart(IOrderGroup cart);
}
-
-///
-/// Maps purchase order entities to API models.
-///
-public interface IPurchaseOrderModelBinderService : IOrderGroupModelBinderService
-{
- ///
- /// Converts a platform purchase order to an API purchase order model.
- ///
- PurchaseOrder BindOrder(IPurchaseOrder order);
-
-}
-
-///
-/// Base contract for mapping order group components between platform and API.
-///
-public interface IOrderGroupModelBinderService
-{
-
- ///
- /// Converts a platform order form to an API order form.
- ///
- OrderForm BindOrderForm(IOrderForm form, IMarket market, Currency currency);
-
- ///
- /// Converts a platform shipment to an API shipment.
- ///
- Shipment BindShipment(IShipment shipment, IMarket market, Currency currency);
-
- ///
- /// Converts a platform payment to an API payment model.
- ///
- Payment BindPayment(IPayment payment);
-
- ///
- /// Converts a platform order address to an API commerce address.
- ///
- CommerceAddress BindCommerceAddress(IOrderAddress address);
-
- ///
- /// Copies API commerce address data onto a platform order address.
- ///
- IOrderAddress BindOrderAddress(IOrderAddress address, CommerceAddress commerceAddress);
-
- ///
- /// Converts a platform line item to an API cart line.
- ///
- CartLine BindLineItem(ILineItem lineItem, Currency currency);
-
- ///
- /// Converts a platform order note to an API note.
- ///
- Note BindNote(IOrderNote note);
-}
diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs
new file mode 100644
index 0000000..e1d4ef9
--- /dev/null
+++ b/src/Jhoose.CommerceApi/Features/Cart/Services/IOrderGroupModelBinderService.cs
@@ -0,0 +1,49 @@
+using EPiServer.Commerce.Order;
+using Mediachase.Commerce;
+using Jhoose.CommerceApi.Features.Cart.Models;
+using Currency = Mediachase.Commerce.Currency;
+using Jhoose.CommerceApi.Features.Checkout.Models;
+
+namespace Jhoose.CommerceApi.Features.Cart.Services;
+
+///
+/// Base contract for mapping order group components between platform and API.
+///
+public interface IOrderGroupModelBinderService
+{
+
+ ///
+ /// Converts a platform order form to an API order form.
+ ///
+ OrderForm BindOrderForm(IOrderForm form, IMarket market, Currency currency);
+
+ ///
+ /// Converts a platform shipment to an API shipment.
+ ///
+ Shipment BindShipment(IShipment shipment, IMarket market, Currency currency);
+
+ ///
+ /// Converts a platform payment to an API payment model.
+ ///
+ Payment BindPayment(IPayment payment);
+
+ ///
+ /// Converts a platform order address to an API commerce address.
+ ///
+ CommerceAddress BindCommerceAddress(IOrderAddress address);
+
+ ///
+ /// Copies API commerce address data onto a platform order address.
+ ///
+ IOrderAddress BindOrderAddress(IOrderAddress address, CommerceAddress commerceAddress);
+
+ ///
+ /// Converts a platform line item to an API cart line.
+ ///
+ CartLine BindLineItem(ILineItem lineItem, Currency currency);
+
+ ///
+ /// Converts a platform order note to an API note.
+ ///
+ Note BindNote(IOrderNote note);
+}
diff --git a/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs b/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs
new file mode 100644
index 0000000..20727fb
--- /dev/null
+++ b/src/Jhoose.CommerceApi/Features/Cart/Services/IPurchaseOrderModelBinderService.cs
@@ -0,0 +1,16 @@
+using EPiServer.Commerce.Order;
+using Jhoose.CommerceApi.Features.Checkout.Models;
+
+namespace Jhoose.CommerceApi.Features.Cart.Services;
+
+///
+/// Maps purchase order entities to API models.
+///
+public interface IPurchaseOrderModelBinderService : IOrderGroupModelBinderService
+{
+ ///
+ /// Converts a platform purchase order to an API purchase order model.
+ ///
+ PurchaseOrder BindOrder(IPurchaseOrder order);
+
+}
diff --git a/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs b/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs
index da4d719..60f2ab5 100644
--- a/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs
+++ b/src/Jhoose.CommerceApi/Features/Markets/Services/BaseMarketManager.cs
@@ -52,7 +52,7 @@ public virtual string BuildMarketUrl(IMarket market)
site.Hosts.First();
- var url = "https://localhost:3000/";//host.Url.AbsoluteUri;
+ var url = host.Url.AbsoluteUri;
return $"{url}{market.DefaultLanguage.Name.ToLower()}/";
}
diff --git a/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj b/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj
index d963cf7..a6dc0c2 100644
--- a/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj
+++ b/src/Jhoose.CommerceApi/Jhoose.CommerceApi.csproj
@@ -6,6 +6,20 @@
enable
true
false
+ latest
+
+ Jhoose.CommerceApi
+ https://github.com/andrewmarkham/CommerceApi
+ https://github.com/andrewmarkham/CommerceApi
+ 1.0.0.0
+ Andrew Markham
+ A RestFull Commerce API for Optimizely Commerce Connect
+ Jhoose CommerceApi
+ Jhoose;Episerver;Optimizely;Commerce RESTFull API
+ true
+
+ 1.0.0.0 - Initial Release
+
diff --git a/src/Jhoose.CommerceApi/README.md b/src/Jhoose.CommerceApi/README.md
new file mode 100644
index 0000000..d817785
--- /dev/null
+++ b/src/Jhoose.CommerceApi/README.md
@@ -0,0 +1,489 @@
+# Jhoose.CommerceApi
+
+A RESTful Commerce API for Optimizely Commerce Connect that provides comprehensive e-commerce functionality including cart management, checkout, product catalog, customer management, and market operations.
+
+## Overview
+
+Jhoose.CommerceApi is a complete REST API solution built on top of Optimizely Commerce, designed to enable headless commerce implementations. It provides a modern, secure, and feature-rich API for building e-commerce applications using any frontend technology.
+
+## Features
+
+- **Cart Management**: Full CRUD operations for shopping carts and cart lines
+- **Checkout Operations**: Shipping and payment method selection, order placement
+- **Product Catalog**: Product inventory and pricing queries
+- **Customer Management**: Customer registration, profile management, and addresses
+- **Market Management**: Multi-market support with currency and language handling
+- **Authentication**: JWT-based authentication for both anonymous and registered users
+- **Security**: OAuth/OpenID Connect integration, encrypted customer context
+- **CORS Support**: Configurable cross-origin resource sharing
+- **API Documentation**: Swagger/OpenAPI integration
+- **Multi-target Support**: Compatible with .NET 8.0, 9.0, and 10.0
+
+## Installation
+
+### NuGet Package
+
+```bash
+dotnet add package Jhoose.CommerceApi
+```
+
+### Dependencies
+
+This library requires:
+- `EPiServer.Commerce.Core` - Optimizely Commerce platform
+- `EPiServer.Cms.AspNetCore.Mvc` - Optimizely CMS MVC framework
+- `EPiServer.OpenIDConnect` - OpenID Connect authentication
+- `Microsoft.AspNetCore.Authentication.JwtBearer` - JWT authentication
+- `Swashbuckle.AspNetCore` - API documentation
+- `MimeKit` - Email and encryption utilities
+
+## Configuration
+
+### appsettings.json
+
+Add the following configuration section:
+
+```json
+{
+ "JhooseCommerceApiOptions": {
+ "SiteHostname": "https://your-frontend-app.com",
+ "ProxyCurrentMarket": false,
+ "CreateAbsoluteUrls": true,
+ "JwtKey": "your-secret-jwt-signing-key-min-32-chars",
+ "AuthorizationKey": "your-api-authorization-key",
+ "Encryption": {
+ "Certificate": {
+ "Thumbprint": "your-certificate-thumbprint",
+ "StoreName": "My",
+ "StoreLocation": "LocalMachine"
+ }
+ }
+ }
+}
+```
+
+### Configuration Options
+
+- **SiteHostname**: The frontend application URL (includes protocol and port)
+- **ProxyCurrentMarket**: Whether to proxy the default ICurrentMarket implementation (default: false)
+- **CreateAbsoluteUrls**: Generate absolute URLs for resources (default: true)
+- **JwtKey**: Secret key for signing JWT tokens (minimum 32 characters)
+- **AuthorizationKey**: API key for anonymous authentication
+- **Encryption**: Certificate configuration for encrypting customer context
+
+### Service Registration
+
+In your `Program.cs` or `Startup.cs`:
+
+```csharp
+using Jhoose.CommerceApi.Configuration;
+
+// Add services
+services.AddJhooseCommerceApi(configuration);
+
+// Add authentication
+services.AddAuthentication()
+ .AddJhooseCommerceAuthentication(bearer =>
+ {
+ bearer.Issuer = "https://your-identity-provider.com";
+ bearer.Authority = "https://your-identity-provider.com";
+ bearer.Audience = new[] { "your-api-audience" };
+ });
+
+// Configure application
+app.UseJhooseCommerceApi();
+```
+
+### Custom Configuration
+
+You can provide post-configuration options:
+
+```csharp
+services.AddJhooseCommerceApi(configuration, options =>
+{
+ options.CreateAbsoluteUrls = false;
+ options.ProxyCurrentMarket = true;
+});
+```
+
+## API Endpoints
+
+### Authentication
+
+#### Anonymous Authentication
+```
+POST /commerceapi/Authentication
+Headers: X-Auth-Key: {your-authorization-key}
+Body: { "anonymousId": "optional-guid" }
+Response: { "accessToken": "jwt-token", "expiresIn": 3600 }
+```
+
+#### Customer Context
+```
+GET /commerceapi/Authentication
+Headers: Authorization: Bearer {jwt-token}
+Response: Customer context details
+```
+
+### Cart Operations
+
+#### Get Carts
+```
+GET /commerceapi/Cart
+GET /commerceapi/Cart/{cartId}
+Headers:
+ - Authorization: Bearer {jwt-token}
+ - X-Customer-Context: {encrypted-customer-context}
+```
+
+#### Create Cart
+```
+POST /commerceapi/Cart
+Headers:
+ - Authorization: Bearer {jwt-token}
+ - X-Customer-Context: {encrypted-customer-context}
+Body: { "name": "default", "market": "en-US" }
+```
+
+#### Delete Cart
+```
+DELETE /commerceapi/Cart/{cartId}
+```
+
+#### Add Line Items
+```
+POST /commerceapi/Cart/{cartId}/lines
+Body: [
+ {
+ "code": "SKU-001",
+ "quantity": 2,
+ "displayName": "Product Name"
+ }
+]
+```
+
+#### Update Line Item
+```
+PUT /commerceapi/Cart/{cartId}/lines/{lineItemId}
+Body: { "quantity": 5 }
+```
+
+#### Delete Line Item
+```
+DELETE /commerceapi/Cart/{cartId}/lines/{lineItemId}
+```
+
+#### Apply Coupon
+```
+POST /commerceapi/Cart/{cartId}/coupon
+Body: { "couponCode": "SAVE10" }
+```
+
+#### Update Billing Address
+```
+PUT /commerceapi/Cart/{cartId}/billingaddress
+Body: { address details }
+```
+
+### Checkout Operations
+
+#### Get Shipping Methods
+```
+POST /commerceapi/Checkout/shippingmethods
+Body: {
+ "cartId": 123,
+ "marketId": "en-US",
+ "language": "en",
+ "zipCode": "12345",
+ "city": "New York",
+ "countryCode": "US"
+}
+```
+
+#### Get Payment Methods
+```
+POST /commerceapi/Checkout/paymentmethods
+Body: {
+ "cartId": 123,
+ "marketId": "en-US",
+ "language": "en"
+}
+```
+
+#### Add Shipment
+```
+POST /commerceapi/Checkout/{cartId}/shipping
+Body: {
+ "shippingMethodId": "guid",
+ "address": { shipping address details }
+}
+```
+
+#### Add Payment
+```
+POST /commerceapi/Checkout/{cartId}/payment
+Body: {
+ "amount": 99.99,
+ "paymentMethodId": "guid",
+ "status": "Pending",
+ "transactionType": "Authorization"
+}
+```
+
+#### Convert to Purchase Order
+```
+POST /commerceapi/Checkout/{cartId}/placeorder
+```
+
+### Products
+
+#### Get Product Pricing and Inventory
+```
+POST /commerceapi/Product/{productCode}
+Headers: X-Customer-Context: {encrypted-customer-context}
+Body: {
+ "marketId": "en-US",
+ "currencyCode": "USD",
+ "warehouse": "default"
+}
+Response: {
+ "skuWithPriceAndInventory": [
+ {
+ "sku": "SKU-001",
+ "listPrice": 99.99,
+ "salePrice": 79.99,
+ "discountPrice": 69.99,
+ "inStock": true,
+ "inventoryStatus": "InStock"
+ }
+ ]
+}
+```
+
+### Markets
+
+#### Get All Markets
+```
+GET /commerceapi/Market
+Response: {
+ "markets": [
+ {
+ "marketId": "en-US",
+ "marketName": "United States",
+ "defaultLanguage": "en",
+ "languages": ["en"],
+ "currencies": ["USD"],
+ "countries": ["US"]
+ }
+ ]
+}
+```
+
+#### Determine Market
+```
+POST /commerceapi/Market/determinemarket
+Body: {
+ "languageId": "en",
+ "currencyCode": "USD",
+ "countryCode": "US"
+}
+```
+
+### Customer Management
+
+#### Get Customer Details
+```
+GET /commerceapi/Customer
+Headers: X-Customer-Context: {encrypted-customer-context}
+```
+
+#### Register Customer
+```
+POST /commerceapi/Customer
+Body: { customer details }
+```
+
+#### Add Customer Address
+```
+POST /commerceapi/Customer/address
+Body: { address details }
+```
+
+#### Update Customer Address
+```
+PUT /commerceapi/Customer/address/{addressId}
+Body: { updated address details }
+```
+
+#### Delete Customer Address
+```
+DELETE /commerceapi/Customer/address/{addressId}
+```
+
+#### Get Orders
+```
+GET /commerceapi/Customer/orders
+```
+
+## Authentication & Security
+
+### JWT Authentication
+
+The API supports two authentication modes:
+
+1. **Anonymous Authentication**: Uses a shared authorization key to obtain a JWT token
+2. **OpenID Connect**: Integrates with external identity providers
+
+### Customer Context
+
+The `X-Customer-Context` header contains encrypted customer information including:
+- Customer ID
+- Contact ID
+- Organization ID
+- User ID
+- Timestamps
+
+This context is encrypted using X.509 certificates and validated on each request.
+
+### CORS Configuration
+
+CORS is automatically configured based on the `SiteHostname` setting. The policy allows:
+- Credentials
+- Any header
+- Any method
+- Specified origins
+
+## Architecture
+
+### Services
+
+- **ICartService**: Cart operations and validation
+- **ICheckoutService**: Checkout workflow management
+- **ICustomerService**: Customer CRUD operations
+- **IPaymentMethodService**: Payment method resolution
+- **IShippingService**: Shipping method calculation
+- **IJhoosePriceService**: Pricing with customer-specific logic
+- **IProductImageService**: Product image URL generation
+- **IEncryptionHelper**: Customer context encryption/decryption
+- **ICustomerContextHelper**: Customer context creation and validation
+
+### Model Binders
+
+Custom model binders handle serialization:
+- **CustomerContextBinder**: Binds encrypted customer context from headers
+- **ICartModelBinderService**: Transforms ICart to API models
+- **IOrderGroupModelBinderService**: Transforms order groups to API models
+- **ICustomerModelBinderService**: Transforms customer entities to API models
+
+### Middleware
+
+**CommerceApiMiddleware**: Handles response formatting and error handling
+
+### Filters
+
+**ValidateCustomerContextActionFilter**: Validates customer context on protected endpoints
+
+## Response Caching
+
+The API leverages ASP.NET Core response caching for:
+- Market listings (15 minutes)
+- Customer details (15 minutes)
+
+## Extensibility
+
+### Custom Services
+
+Override default service implementations by registering your own:
+
+```csharp
+services.AddSingleton();
+```
+
+### Custom Pricing
+
+Implement `IJhoosePriceService` for custom pricing logic:
+
+```csharp
+public class MyPricingService : IJhoosePriceService
+{
+ public IEnumerable GetDiscountPrices(
+ IMarket market,
+ IEnumerable contentLinks,
+ string currency)
+ {
+ // Custom pricing logic
+ }
+}
+```
+
+### Custom Product Images
+
+Implement `IProductImageService` to customize image URL generation:
+
+```csharp
+public class MyImageService : IProductImageService
+{
+ public string GetDefaultImageUrl(VariationContent variation)
+ {
+ // Custom image logic
+ }
+}
+```
+
+## Swagger Documentation
+
+When configured, Swagger UI is available at `/swagger` and includes:
+- All API endpoints
+- Request/response models
+- Authentication requirements
+- Status codes
+
+## Error Handling
+
+The API returns standard HTTP status codes:
+- **200 OK**: Successful request
+- **201 Created**: Resource created
+- **204 No Content**: Successful deletion
+- **400 Bad Request**: Invalid request data
+- **401 Unauthorized**: Missing or invalid authentication
+- **403 Forbidden**: Insufficient permissions
+- **404 Not Found**: Resource not found
+- **500 Internal Server Error**: Server error
+
+## Postman Collection
+
+A complete Postman collection is available at:
+`/postman/Commerce API.postman_collection.json`
+
+## Best Practices
+
+1. **Always use HTTPS** in production environments
+2. **Rotate JWT keys** regularly
+3. **Use certificate-based encryption** for customer context
+4. **Enable response caching** where appropriate
+5. **Implement rate limiting** for public endpoints
+6. **Validate input data** on the client side
+7. **Handle errors gracefully** in client applications
+
+## Target Frameworks
+
+- .NET 8.0
+- .NET 9.0
+- .NET 10.0
+
+## License
+
+See the LICENSE file in the repository root.
+
+## Repository
+
+- GitHub: https://github.com/andrewmarkham/CommerceApi
+- Issues: https://github.com/andrewmarkham/CommerceApi/issues
+
+## Author
+
+Andrew Markham
+
+## Version History
+
+- **1.0.0.0** - Initial Release
diff --git a/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs b/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs
index 99f357f..736d4d6 100644
--- a/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs
+++ b/src/Jhoose.Demo/Features/Graph/DefaultCategoryImageContentApiModel.cs
@@ -1,4 +1,3 @@
-using EPiServer.Commerce.Catalog.ContentTypes;
using EPiServer.Commerce.Catalog.Linking;
using EPiServer.ContentApi.Core.Serialization.Models;
using EPiServer.ServiceLocation;
@@ -63,92 +62,3 @@ public object GetValue(ContentApiModel contentApiModel)
}
}
-
-[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)]
-public class ProductParentCategoriesContentApiModel : ITypedContentApiModelProperty, IContentApiModelProperty
-{
- private readonly ContentTypeModelRepository _contentTypeModelRepository;
- private readonly IContentLoader _contentLoader;
- private readonly IUrlResolver _urlHelper;
-
- public ProductParentCategoriesContentApiModel(ContentTypeModelRepository contentTypeModelRepository,
- IContentLoader contentLoader,
- IUrlResolver urlHelper)
- {
- _contentTypeModelRepository = contentTypeModelRepository;
- _contentLoader = contentLoader;
- _urlHelper = urlHelper;
- }
-
- public string Name => "ParentCategories";
-
- public Type[] ContentTypes => [typeof(GenericProduct)];
-
- public object GetValue(ContentApiModel contentApiModel)
- {
- var parentCategories = new List();
-
- Guid? guid = contentApiModel.ContentLink?.GuidValue;
- if (!guid.HasValue || guid.Value == Guid.Empty)
- {
- return parentCategories;
- }
-
- IContent content;
- try
- {
- content = _contentLoader.Get(guid.Value);
- }
- catch (ContentNotFoundException)
- {
- return parentCategories;
- }
-
- if (content is GenericProduct nodeProduct)
- {
- parentCategories.AddRange(GetNodes(nodeProduct));
- }
-
- return parentCategories;
- }
-
- private List GetNodes(ProductContent currentContent)
- {
- List nodeList = [];
-
- foreach (var nodeRelation in currentContent.GetCategories())
- {
- var currentNode = _contentLoader.Get(nodeRelation);
- if (currentNode != null)
- {
- AddParentNodes(currentNode, nodeList);
- }
- }
-
- return nodeList;
- }
-
- private void AddParentNodes(NodeContent currentNode, List nodeList)
- {
- if (currentNode == null)
- {
- return;
- }
-
- if (!nodeList.Contains(currentNode.Code))
- {
- nodeList.Add(currentNode.Code);
- }
- var nodeRelations = currentNode.GetCategories().ToList();
- nodeRelations.Add(currentNode.ParentLink);
-
- foreach (var nodeRef in nodeRelations)
- {
- var node = _contentLoader.Get(nodeRef);
- if (node is NodeContent nodeContent )
- {
- AddParentNodes(nodeContent, nodeList);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs b/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs
new file mode 100644
index 0000000..f14f64c
--- /dev/null
+++ b/src/Jhoose.Demo/Features/Graph/ProductParentCategoriesContentApiModel.cs
@@ -0,0 +1,97 @@
+using EPiServer.Commerce.Catalog.ContentTypes;
+using EPiServer.ContentApi.Core.Serialization.Models;
+using EPiServer.ServiceLocation;
+using EPiServer.Web.Routing;
+using Jhoose.Demo.Models.Commerce;
+using Optimizely.ContentGraph.Cms.Core.ContentApiModelProperties;
+
+namespace Jhoose.Demo.Features.Graph;
+
+[ServiceConfiguration(typeof(IContentApiModelProperty), Lifecycle = ServiceInstanceScope.Singleton)]
+public class ProductParentCategoriesContentApiModel : ITypedContentApiModelProperty, IContentApiModelProperty
+{
+ private readonly ContentTypeModelRepository _contentTypeModelRepository;
+ private readonly IContentLoader _contentLoader;
+ private readonly IUrlResolver _urlHelper;
+
+ public ProductParentCategoriesContentApiModel(ContentTypeModelRepository contentTypeModelRepository,
+ IContentLoader contentLoader,
+ IUrlResolver urlHelper)
+ {
+ _contentTypeModelRepository = contentTypeModelRepository;
+ _contentLoader = contentLoader;
+ _urlHelper = urlHelper;
+ }
+
+ public string Name => "ParentCategories";
+
+ public Type[] ContentTypes => [typeof(GenericProduct)];
+
+ public object GetValue(ContentApiModel contentApiModel)
+ {
+ var parentCategories = new List();
+
+ Guid? guid = contentApiModel.ContentLink?.GuidValue;
+ if (!guid.HasValue || guid.Value == Guid.Empty)
+ {
+ return parentCategories;
+ }
+
+ IContent content;
+ try
+ {
+ content = _contentLoader.Get(guid.Value);
+ }
+ catch (ContentNotFoundException)
+ {
+ return parentCategories;
+ }
+
+ if (content is GenericProduct nodeProduct)
+ {
+ parentCategories.AddRange(GetNodes(nodeProduct));
+ }
+
+ return parentCategories;
+ }
+
+ private List GetNodes(ProductContent currentContent)
+ {
+ List nodeList = [];
+
+ foreach (var nodeRelation in currentContent.GetCategories())
+ {
+ var currentNode = _contentLoader.Get(nodeRelation);
+ if (currentNode != null)
+ {
+ AddParentNodes(currentNode, nodeList);
+ }
+ }
+
+ return nodeList;
+ }
+
+ private void AddParentNodes(NodeContent currentNode, List nodeList)
+ {
+ if (currentNode == null)
+ {
+ return;
+ }
+
+ if (!nodeList.Contains(currentNode.Code))
+ {
+ nodeList.Add(currentNode.Code);
+ }
+ var nodeRelations = currentNode.GetCategories().ToList();
+ nodeRelations.Add(currentNode.ParentLink);
+
+ foreach (var nodeRef in nodeRelations)
+ {
+ var node = _contentLoader.Get(nodeRef);
+ if (node is NodeContent nodeContent )
+ {
+ AddParentNodes(nodeContent, nodeList);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Jhoose.Demo/README.md b/src/Jhoose.Demo/README.md
index ce6c7af..64272aa 100644
--- a/src/Jhoose.Demo/README.md
+++ b/src/Jhoose.Demo/README.md
@@ -1,46 +1,308 @@
-# Empty Commerce template
+# Jhoose Demo
-## How to run
+A demonstration Optimizely CMS and Commerce site showcasing the **Jhoose Commerce API** with Stripe payment integration. This backend powers the [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing) Next.js headless storefront.
-Chose one of the following options to get started.
+## Overview
-### Windows
+This demo site demonstrates a complete headless commerce architecture using:
+- **Jhoose.CommerceApi** - RESTful API for cart, checkout, products, and customer management
+- **Jhoose.CommerceApi.Stripe** - Stripe payment processing integration
+- **Optimizely Commerce** - Product catalog and order management
+- **Optimizely Content Graph** - Product indexing and delivery
+- **Auth0** - JWT-based authentication for registered users
-Prerequisities
-- .NET SDK 8+
-- SQL Server 2016 Express LocalDB (or later)
+## Project Structure
-```bash
-$ dotnet run
-````
+The solution was created using `dotnet new epi-commerce-empty` and enhanced with:
+- Foundation commerce models and supporting code
+- HomePage content type for basic CMS functionality
+- Custom Content Graph API models for enhanced product data
+- Custom market manager for multi-market routing
-### Any OS with Docker
+### Key Components
-Prerequisities
-- Docker
-- Enable Docker support when applying the template
-- Review the .env file and make changes where necessary to the Docker-related variables
+#### Configuration (`appsettings.json`)
+- **JhooseCommerceApiOptions**: API keys, encryption, and CORS settings
+- **Stripe**: Payment gateway credentials
+- **Jwt**: Auth0 authentication configuration
+- **Optimizely.ContentGraph**: Content Graph connection settings
+- **EPiServer.Commerce**: Catalog search and indexing configuration
-```bash
-$ docker-compose up
-````
+#### Startup Configuration (`Startup.cs`)
-> Note that this Docker setup is just configured for local development. Follow this [guide to enable HTTPS](https://github.com/dotnet/dotnet-docker/blob/main/samples/run-aspnetcore-https-development.md).
+The demo configures several key services:
-#### Reclaiming Docker Image Space
+```csharp
+// Jhoose Commerce API with custom options
+services.AddJhooseCommerceApi(_configuration, o =>
+{
+ o.ProxyCurrentMarket = true;
+});
-1. Backup the App_Data/\${DB_NAME}.mdf and App_Data/\${DB_NAME}.ldf DB restoration files for safety
-2. Run `docker compose down --rmi all` to remove containers, networks, and images associated with the specific project instance
-3. In the future, run `docker compose up` anytime you want to recreate the images and containers
+// Stripe payment integration
+services.AddStripePayment(_configuration);
-### Any OS with external database server
+// JWT authentication with Auth0
+services.AddAuthentication()
+ .AddJhooseCommerceAuthentication(o => {
+ o.Audience = _configuration.GetSection("Jwt:Audience").Get>();
+ o.Authority = _configuration["Jwt:Authority"];
+ o.Issuer = _configuration["Jwt:Issuer"];
+ });
-Prerequisities
-- .NET SDK 8+
-- SQL Server 2016 (or later) on a external server, e.g. Azure SQL
+// Custom market manager
+services.AddTransient();
-Create two empty databases on the external database server and update the connection strings accordingly.
+// Content Graph for CMS and Commerce
+services.AddContentGraph(x =>
+{
+ x.IncludeInheritanceInContentType = true;
+ x.PreventFieldCollision = true;
+})
+.AddCommerceGraph();
+```
-```bash
-$ dotnet run
-````
+## Setup Instructions
+
+### Prerequisites
+
+- .NET 8.0 SDK or later
+- SQL Server (local or Docker)
+- Optimizely Content Graph account (optional, for product indexing)
+- Stripe account (for payment processing)
+- Auth0 account (for user authentication)
+
+### Database Setup
+
+1. **Restore Databases**
+
+ The `Databases` folder contains two BACPAC files with the Foundation product catalog:
+ - `Jhoose.Demo.CMS.bacpac` - CMS database
+ - `Jhoose.Demo.Commerce.bacpac` - Commerce database
+
+2. **Update Connection Strings**
+
+ In `appsettings.json`, update the connection strings:
+ ```json
+ "ConnectionStrings": {
+ "EPiServerDB": "Server=localhost;Database=Jhoose.Demo.Cms;Trusted_Connection=True;",
+ "EcfSqlConnection": "Server=localhost;Database=Jhoose.Demo.Commerce;Trusted_Connection=True;"
+ }
+ ```
+
+### Configuration Setup
+
+#### 1. Jhoose Commerce API
+
+Update `JhooseCommerceApiOptions` in `appsettings.json`:
+
+```json
+"JhooseCommerceApiOptions": {
+ "JwtKey": "your-32-character-secret-key",
+ "AuthorizationKey": "base64-encoded-authorization-key",
+ "SiteHostname": "http://localhost:3000",
+ "ProxyCurrentMarket": true,
+ "Encryption": {
+ "Key": "your-32-character-encryption-key",
+ "IV": "your-16-character-iv"
+ }
+}
+```
+
+- **JwtKey**: Used for anonymous JWT token signing
+- **AuthorizationKey**: Required for anonymous authentication endpoint
+- **SiteHostname**: Your frontend application URL (enables CORS)
+- **Encryption.Key/IV**: Used for encrypting customer context headers
+
+#### 2. Stripe Configuration
+
+Add your Stripe credentials:
+
+```json
+"Stripe": {
+ "PublishableKey": "pk_test_your_publishable_key",
+ "SecretKey": "sk_test_your_secret_key",
+ "WebhookSecret": "whsec_your_webhook_secret"
+}
+```
+
+Get these from your [Stripe Dashboard](https://dashboard.stripe.com/test/apikeys).
+
+#### 3. Auth0 Configuration
+
+Configure JWT authentication:
+
+```json
+"Jwt": {
+ "Issuer": "https://your-tenant.auth0.com/",
+ "Authority": "https://your-tenant.auth0.com/",
+ "Audience": ["https://your-api-identifier", "your-client-id"]
+}
+```
+
+#### 4. Content Graph (Optional)
+
+For product indexing and GraphQL queries:
+
+```json
+"Optimizely": {
+ "ContentGraph": {
+ "GatewayAddress": "https://cg.optimizely.com",
+ "AppKey": "your-app-key",
+ "Secret": "your-secret",
+ "SingleKey": "your-single-key"
+ }
+}
+```
+
+## Features & Customizations
+
+### Custom Market Manager
+
+`Features/Headless/FoundationMarketManager.cs` implements URL-based market routing:
+
+- `/en/*` routes to US market
+- `/fr/*` routes to FR market
+- `/sv/*` routes to SWE market
+
+This allows the headless frontend to use URL segments for market selection.
+
+### Content Graph API Models
+
+The `Features/Graph` folder contains custom API models for enhanced product data:
+
+- **ColorContentApiModel.cs** - Product color variations
+- **SizeContentApiModel.cs** - Product size variations
+- **ProductParentCategoriesContentApiModel.cs** - Category hierarchy
+- **DefaultCategoryImageContentApiModel.cs** - Category images
+
+These extend the standard Content Graph schema with commerce-specific fields needed by the frontend.
+
+### Commerce Models
+
+The project includes Foundation commerce models:
+- Product variations (color, size)
+- Category structures
+- Media assets
+- Custom metadata
+
+## Running the Solution
+
+### Development Mode
+
+1. **Start the application**:
+ ```bash
+ dotnet run
+ ```
+
+2. **Access the CMS**:
+ ```
+ http://localhost:5001/util/login
+ ```
+
+ **Credentials**:
+ - Username: `admin`
+ - Password: `Episerver123!`
+
+3. **Important**: The site must run on HTTP (not HTTPS) for local development with the demo frontend.
+
+### API Endpoints
+
+Once running, the Commerce API is available at:
+- `http://localhost:5001/commerceapi/authentication` - Anonymous/customer authentication
+- `http://localhost:5001/commerceapi/cart` - Cart operations
+- `http://localhost:5001/commerceapi/checkout` - Checkout operations
+- `http://localhost:5001/commerceapi/product/{code}` - Product pricing/inventory
+- `http://localhost:5001/commerceapi/market` - Market information
+- `http://localhost:5001/commerceapi/customer` - Customer management
+- `http://localhost:5001/commerceapi/stripe/paymentintent/{cartId}` - Stripe payments
+
+### Swagger Documentation
+
+API documentation is available at:
+```
+http://localhost:5001/swagger
+```
+
+## Integration with Frontend
+
+This backend is designed to work with the [Ozone Clothing](https://github.com/andrewmarkham/OzoneClothing) Next.js demo, which demonstrates:
+
+- Anonymous and authenticated user flows
+- Product browsing with Content Graph
+- Shopping cart management
+- Multi-step checkout process
+- Stripe payment integration
+- Multi-market/multi-currency support
+
+### Authentication Flow
+
+1. **Anonymous Users**: Frontend calls `/commerceapi/authentication` with `X-Auth-Key` header
+2. **Registered Users**: Frontend uses Auth0 for authentication, receives JWT token
+3. **Customer Context**: API encrypts customer data in `X-Customer-Context` header
+4. **Subsequent Requests**: Frontend includes both `Authorization` and `X-Customer-Context` headers
+
+## Development Notes
+
+### Content Graph Requirement
+
+The demo site requires a Content Graph index as products are indexed to Content Graph for the Next.js frontend. **Note**: Content Graph is **not required** to use the Jhoose Commerce API - it's only used by the demo frontend for product discovery and searching.
+
+### Scheduler Disabled
+
+In development mode, the Optimizely Scheduler is disabled to prevent background jobs from running during debugging.
+
+### Payment Method Configuration
+
+Ensure a payment method with the system keyword `StripePayment` is configured in the Optimizely Commerce admin interface for Stripe integration to work.
+
+### Webhook Configuration
+
+Configure your Stripe webhook endpoint to:
+```
+http://your-domain/api/StripePaymentWebHook
+```
+
+## Project Dependencies
+
+### NuGet Packages
+
+- **EPiServer.CMS** - Content management system
+- **EPiServer.Commerce** - E-commerce platform
+- **EPiServer.ContentDeliveryApi.Cms** - Content delivery API
+- **Optimizely.ContentGraph.Cms** - Content Graph CMS integration
+- **Optimizely.Graph.Commerce** - Content Graph Commerce integration
+- **Microsoft.AspNetCore.Authentication.OpenIdConnect** - OpenID authentication
+
+### Project References
+
+- **Jhoose.CommerceApi** - Core commerce REST API
+- **Jhoose.CommerceApi.Stripe** - Stripe payment integration
+
+## Additional Resources
+
+- **API Documentation**: See [Jhoose.CommerceApi README](../Jhoose.CommerceApi/README.md)
+- **Stripe Integration**: See [Jhoose.CommerceApi.Stripe README](../Jhoose.CommerceApi.Stripe/README.md)
+- **Headless Frontend**: [Ozone Clothing Demo](https://github.com/andrewmarkham/OzoneClothing)
+- **Optimizely Documentation**: [Optimizely Commerce](https://docs.developers.optimizely.com/commerce-cloud/)
+
+## Troubleshooting
+
+### CORS Issues
+- Ensure `SiteHostname` in configuration matches your frontend URL exactly
+- Verify `UseJhooseCommerceApi()` is called after `UseRouting()` but before `UseAuthentication()`
+
+### Authentication Issues
+- Check JWT configuration matches your Auth0 tenant
+- Verify `JwtKey` and `AuthorizationKey` are set correctly
+- Ensure anonymous ID cookies are enabled in your frontend
+
+### Database Connection Issues
+- Verify SQL Server is running
+- Check connection strings in `appsettings.json`
+- Restore databases from BACPAC files if needed
+
+### Stripe Payment Issues
+- Confirm payment method with keyword `StripePayment` exists
+- Verify Stripe keys are for the correct environment (test/live)
+- Check webhook secret matches Stripe dashboard configuration
diff --git a/src/Jhoose.Demo/appsettings.json b/src/Jhoose.Demo/appsettings.json
index 3afdd2e..a434f8b 100644
--- a/src/Jhoose.Demo/appsettings.json
+++ b/src/Jhoose.Demo/appsettings.json
@@ -75,9 +75,9 @@
"Optimizely": {
"ContentGraph": {
"GatewayAddress": "https://cg.optimizely.com",
- "AppKey": "MzMgHrqKxlvz5MsFApgPfIvoIkJEAgvbfOnCLuXhDEmWAafs",
- "Secret": "8HajQPAuaWzP4SV6zoJUHTLVaJqZdJmhMnOS6BL4aSo5IqMcIg3uMDqLmFtkXNDP",
- "SingleKey": "5yqTqf0yPQTBov4GrbIKHqzV4IbUiIGqQOKbtNAEEgqZtzJq",
+ "AppKey": "",
+ "Secret": "",
+ "SingleKey": "",
"AllowSendingLog": "true"
}
},